Ceph数据重平衡、数据重构的IO控制,业务优先与恢复优先

Ceph数据重平衡、数据重构的IO控制,业务优先与恢复优先

Deng YongJie's blog 656 2022-10-05

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
osd_min_pg_log_entries 正常情况下PGLog的记录的条数,
osd_max_pg_log_entries 异常情况下pglog记录的条数,达到该限制会进行trim操作