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_sleep: 出队列后先Sleep一段时间,拉长两个Recovery的时间间隔;
以下二个参数,网上解释大多有误导,结合代码以及官方材料分析为: osd_recovery_max_active: 每个OSD上同时进行的所有PG的恢复操作(active recovery)的最大数量; osd_recovery_max_single_start: OSD在某个时刻会为一个PG启动恢复操作数; 这两个参数需要结合在一起分析: a.假设我们配置osd_recovery_max_single_start为1,osd_recovery_max_active为3,那么,这意味着OSD在某个时刻会为一个PG最多启动1个恢复操作,而且最多可以有3个恢复操作同时处于活动状态。 b.假设我们配置osd_recovery_max_single_start为2,osd_recovery_max_active为3,那么,这意味着OSD在某个时刻会为一个PG最多启动2个恢复操作,而且最多可以有3个恢复操作同时处于活动状态。例如第一个pg启动2个恢复操作,第二个pg启动1个恢复操作,第三个pg等待前两个pg 恢复操作完进行新的恢复。
默认配置参数:
"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 | 1 | 2 | |
100% | 50 | 5 | 5 | 1500 | 10000 |
osd_min_pg_log_entries 正常情况下PGLog的记录的条数, osd_max_pg_log_entries 异常情况下pglog记录的条数,达到该限制会进行trim操作