背景:
有osd所在的盘坏了,需要停掉对应osd,数据开始自动恢复,
但是数据恢复的速度引起了我的注意,明明内网的速度可以达到1g多/s的,
为什么到这这么慢了呢?
原来是集群当初配置了1,恢复的数量被限制了
这里是有讲究的,是防止自身后端osd并发过高,导致线上客户读写体验所以设置1的
从原本的1改到16,速度从30m/s到600m/s
recovery_max_single_start:
这个值限定了每个pg可以启动recover操作的最大数。
osd_recovery_sleep_hdd:
指示hd磁盘在恢复过程中的休眠时间
osd_recovery_max_active:
一个osd上可以承载多个pg, 可能好几个pg都需要recover,这个值限定该osd最多同时有多少pg做recover。
osd_max_backfills:
一个osd上承载了多个pg。可能很多pg都需要做第二种recovery,即backfill。 设定这个参数来指明在一个osd上最多能有多少个pg同时做backfill。
sudo ceph tell osd.* injectargs '--osd_recovery_max_single_start 16 --osd_recovery_sleep_hdd 0 --osd_recovery_max_active 16 --osd_max_backfills 16'
总结:
线上生产还是设置为1 限流,防止在osd故障,或者换盘的时候,或者其他原因导致数据需要recover的时候,osd并发量过大,会有影响到客户读写体验的风险。