9.6 洗刷 REPORT DOCUMENTATION BUG#
除了为对象创建多个副本外,Ceph 还可通过洗刷 归置组来确保数据完整性(请参见第 1.3.2 节 "归置组"了解有关归置组的详细信息)。Ceph 的洗刷类似于在对象存储层运行 fsck
。对于每个归置组,Ceph 都会生成一个包含所有对象的编目,并比较每个主对象及其副本,以确保不会有缺失或不匹配的对象。每天的浅层洗刷会检查对象大小和属性,而每周的深层洗刷则会读取数据并使用校验和来确保数据完整性。
洗刷对于维护数据完整性非常重要,但该操作可能会降低性能。您可以通过调整以下设置来增加或减少洗刷操作:
osd max scrubs
同时针对一个 Ceph OSD 执行的洗刷操作数量上限。默认值为 1。
osd scrub begin hour
、osd scrub end hour
按小时定义的一天内可以执行洗刷的时间段(0 到 24)。默认开始时间为 0,结束时间为 24。
重要
如果归置组的洗刷间隔超出 osd scrub max interval
设置的值,则无论您定义的洗刷时间段为何,都将执行洗刷。
osd scrub during recovery
允许恢复期间执行洗刷。如果将此选项设置为"false",则当存在工作的恢复进程时,将禁止安排新的洗刷。已在运行的洗刷将继续执行。此选项有助于降低忙碌集群上的负载。默认值为"true"。
osd scrub thread timeout
洗刷线程超时前的最长时间(以秒为单位)。默认值为 60。
osd scrub finalize thread timeout
洗刷完成线程超时前的最长时间(以秒为单位)。默认值为 60*10。
osd scrub load threshold
规范化的最大负载。当系统负载(由 getloadavg()
与 online cpus
数量之比定义)高于此数字时,Ceph 将不会执行洗刷。默认值为 0.5。
osd scrub min interval
当 Ceph 集群负载较低时洗刷 Ceph OSD 的最短间隔(以秒为单位)。默认值为 60*60*24(一天一次)。
osd scrub max interval
无论集群负载如何都洗刷 Ceph OSD 的最长间隔(以秒为单位)。默认值为 7*60*60*24(一周一次)。
osd scrub chunk min
单次操作期间要洗刷的对象存储块数量下限。洗刷期间,Ceph 会阻止向单个块写入数据。默认值为 5。
osd scrub chunk max
单次操作期间要洗刷的对象存储块数量上限。默认值为 25。
osd scrub sleep
洗刷下一组块之前休眠的时间。增大此值会降低整个洗刷操作的速度,但对客户端操作的影响较小。默认值为 0。
osd deep scrub interval
深层洗刷(完整读取所有数据)的间隔。osd scrub load threshold
选项不会影响此设置。默认值为 60*60*24*7(一周一次)。
osd scrub interval randomize ratio
在安排归置组的下一次洗刷作业时,为 osd scrub min interval
值增加一个随机延迟。该延迟为一个随机的值,小于 osd scrub min interval
* osd scrub interval randomized ratio
所得结果。因此,该默认设置实际上是将洗刷随机地安排在允许的时间段 [1, 1.5] * osd scrub min interval
内执行。默认值为 0.5。
osd deep scrub stride
执行深层洗刷时读取的大小。默认值为 524288 (512 kB)。