Ceph在某些情况下,需要进行数据均衡,后端的数据均衡IO会对client的IO造成影响从而影响到集群的业务IO,所以我们需要对数据均衡IO进行控制,主要是业务优先恢复优先
操作前记得查看下默认参数值,操作完后记得恢复到原先参数

业务优先:

ceph tell osd.* injectargs '--osd-max-backfills 1 --osd-recovery-max-active 1 --osd-recovery-max-single-start 1'
ceph tell osd.* injectargs '--osd-recovery-sleep 1'

恢复优先:

ceph tell osd.* injectargs '--osd-max-backfills 5 --osd-recovery-max-active 5 --osd-recovery-max-single-start 5'
ceph tell osd.* injectargs '--osd-recovery-sleep 0'

查看配置信息:

ceph --admin-daemon  /var/run/ceph/ceph-osd.0.asok config show | grep -E "osd_max_backfills|osd_recovery_max_active|osd_recovery_max_single_start|osd_recovery_sleep"

参数解析:
osd_max_backfills : 一个osd上最多能有多少个pg同时做backfill。其中osd出去的最大backfill数量为osd_max_backfills ,osd进来的最大backfill数量也是osd_max_backfills ,所以每个osd最大的backfill数量为osd_max_backfills * 2;
osd_recovery_max_active: 这个值限定该osd最多同时有多少pg做recovery;
osd_recovery_max_single_start: 一个PG Recovery对应的Object个数;
osd_recovery_sleep: 出队列后先Sleep一段时间,拉长两个Recovery的时间间隔;

默认配置参数:
"osd_max_backfills": "1",
"osd_recovery_sleep": "0",
"osd_recovery_max_active": "3",
"osd_recovery_max_single_start": "1",

推荐配置参数:

级别: 5%是业务优先,对业务影响最小;100%恢复优先,对业务影响最大;其他介于二者之间;

级别 osd_max_backfills osd_recovery_max_active osd_recovery_max_single_start osd_recovery_sleep osd_min_pg_log_entries osd_max_pg_log_entries
5% 1 1 1 1 1 2
25% 50 5 5 0.25 1 2
50% 50 5 5 0.15 1 2
75% 50 5 5 0 1 2
100% 50 5 5 0 1500 10000

osd_min_pg_log_entries 正常情况下PGLog的记录的条数,
osd_max_pg_log_entries 异常情况下pglog记录的条数,达到该限制会进行trim操作