ceph数据recovery配置策略

1、背景
在ceph集群中,如果ceph集群出现OSD的out或者in(增加、删除、上线、下线OSD等情况),最终都会导致ceph集群中的数据迁移及数据重建,数据迁移及重建会占用一部分网络带宽及磁盘带宽,此时就可能导致出现block(阻塞)现象。
2、场景

场景一:优先保证recovery带宽;
在对数据安全性要求比较高的场景下,为了保证数据副本的完整性以及快速恢复存储集群的健康,会优先保证数据恢复带宽,此时需要提升recovery的I/O优先级,降低client的I/O优先级,具体操作如下(在ceph任意一个节点或客户端运行即可)

提升recovery的I/O优先级(12.0.0版本默认recovery的I/O优先级为3)

ceph tell osd.* injectargs "--osd_recovery_op_priority 63"

降低client的I/O优先级(12.0.0版本默认recovery的I/O优先级为63)

ceph tell osd.* injectargs "--osd_client_op_priority 3"

待recovery完成,需要还原配置

ceph tell osd.* injectargs "--osd_recovery_op_priority 3"
ceph tell osd.* injectargs "--osd_client_op_priority 63"

场景二:优先保证client带宽;
在对数据安全性要求不是很高的场景下,为了降低对用户体验的影响,会优先对client的I/O优先级及带宽进行保证,此时需要降低recovery的I/O优先级及带宽,具体操作如下:

降低recovery的I/O优先级(12.0.0版本默认recovery的I/O优先级为3)

ceph tell osd.* injectargs "--osd_recovery_op_priority 1"

降低recovery的I/O带宽及backfill带宽(12.0.0版本默认osd_recovery_max_active为3,osd_recovery_sleep为0)

ceph tell osd.* injectargs "--osd_recovery_max_active 1"
ceph tell osd.* injectargs "--osd_recovery_sleep 0.4"

待recovery完成,需要还原配置

ceph tell osd.* injectargs "--osd_recovery_op_priority 3"
ceph tell osd.* injectargs "--osd_recovery_max_active 3"
ceph tell osd.* injectargs "--osd_recovery_sleep 0"

场景三:完全保证client带宽
在极端情况下,如果网络带宽及磁盘性能有限,这个时候为了不影响用户体验,不得不在业务繁重时段关闭数据重建及迁移的I/O,来完全保证client的带宽,在业务空闲时段再打开数据重建及迁移,具体操作如下:

在业务繁忙时,完全关闭数据重建及迁移:

ceph osd set norebalance
ceph osd set norecover
ceph osd set nobackfill

在业务空闲时,打开数据重建及迁移:

ceph osd unset norebalance
ceph osd unset norecover
ceph osd unset nobackfill

以上前两种方案操作配置均为立即生效,且重启服务或者重启节点后失效,如果想长期有效,可以在进行以上操作立即生效后,修改所有ceph集群节点的配置文件。

猜你喜欢

转载自blog.csdn.net/Linux_kiss/article/details/82857117