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集群节点的配置文件。