Ceph配置数据重平衡、数据重构的IO控制,业务优先与恢复优先
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 16 --osd-recovery-max-active 8 --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 | 0 | 1 | 2 |
100% | 50 | 5 | 5 | 0 | 1500 | 10000 |