除了使用对象多副本,Ceph还通过Scrub 归置组(PG)来保证数据的完整性。在对象存储层,Ceph Scrub类似于fsck。针对每一个归置组(PG),OSD比较主副本和从副本,确保没有对象丢失和错误,捕获 OSD 缺陷和文件系统错误。OSD也能执行Deep Scrub:一般一周一次,通过读取数据和使用校验码来保证数据完整性,可以捕捉那些在轻度清洗过程中未能发现的磁盘上的坏扇区。。
*作者:Younger Liu,
本作品采用知识共享署名-非商业性使用-相同方式共享 3.0 未本地化版本许可协议进行许可。*
Ceph Scrub对维护数据完整性很重要,但是会影响性能,可以通过如下参数对Scrub进行调整。
1.1 osd max scrubs
描述:一个Ceph OSD守护线程同时执行Scrub操作的最大数目
类型:32-bit int
默认:1
1.2 osd max begin hour
描述:一天中调度Scrub操作的下限时间
类型:0~24中的整数
默认:0
1.3 osd max end hour
描述:一天中调度Scrub操作的上限时间,与参数 osd scrub begin hour定义执行Scrub的时间窗口,但是只要归置组调度Scrub的时间间隔超过osd scrub max interval的值,无论是否在该时间窗口内,都会执行
类型:0~24中的整数
默认:24
1.4 osd scrub during recovery
描述:在recovery时允许scrub,如果设置了false,将禁用scrub或deep scrub,但是已经调度的将继续执行,将影响集群的性能
类型:Boolean
默认:true
1.5 osd scrub thread timeout
描述:scrub线程执行的最大时间(单位秒)
类型:32-bit Integer
默认:60
1.6 osd scrub finalize thread timeout
描述:scrub finalize线程运行的最大时间(单位秒)
类型:32-bit Integer
默认:60 * 10
1.7 osd scrub load threshold
描述:当ceph的负载超过阈值时,不在调度Scrub
类型:Float
默认:0.5
1.8 osd scrub min interval
描述:当ceph集群的负载比较低,执行scrub的最小时间间隔
类型:Float
默认:一天一次,7*60*60*24
1.9 osd scrub max interval
描述:执行scrub的最大时间间隔,无视负载
类型:Float
默认:一天一次,60*60*24
1.10 osd scrub chunk min
描述:一次Scrub操作要处理的最小chunk数
类型:32-bit Integer
默认:5
1.11 osd scrub chunk max
描述:一次Scrub操作要处理的最大chunk数
类型:32-bit Integer
默认:25
1.12 osd scrub sleep
描述:Scrub两个 Chunk组之间的时间间隔,增大该值会使得Scrub变慢
类型:Float
默认:0
1.13 osd deep scrub interval
描述:两次deep Scrub的时间间隔, osd scrub load threshold 不会应该该设定
类型:Float
默认:60*60*24*7
1.14 osd scrub interval randomize ration
描述:为 osd scrub min interval增加随机延迟,当调度下一个Scrub任务时,延迟是小于 osd scrub min interval * osd scrub interval randomized ratio的一个随机数,因此,默认设置的时间窗口为[1, 1.5] * osd scrub min interval.
类型:Float
默认:0.5
1.15 osd deep scrub stride
描述:执行deep scrub时的读的大小
类型:32-bit Integer
默认:512 KB. 524288
作者:Younger Liu,
本作品采用知识共享署名-非商业性使用-相同方式共享 3.0 未本地化版本许可协议进行许可。