ceph-关于-recovery-的理解

有时候,节点宕机或者osd daemon挂掉,会引发ceph集群的recovery,接下来具体聊一聊什么是recovery

什么是pg的recovery?

主要有两种场景:

  1. osd暂时下线,然后又上线
  2. osd硬件故障下线,更换硬盘重新上线
    无论哪种情况,osd上线后通常会发现,自己承载的pg有数据落后了,需要进入恢复模式,从其它osd上获取新的数据达到同步。这个过程就是recovery。
    recovery分为两种:
  3. log-based recovery: 是说osd故障时间不长,需要恢复的数据可以通过pg log回放找回来。
  4. backfill recovery: 是说无法通过pg log回放找全数据,只能通过全量回填(backfill)拷贝。

recovery相关参数

1
2
3
4
5
6
7
8
9
10
11
osd_max_backfills:默认值10. 一个osd上承载了多个pg。可能很多pg都需要做第二种recovery,即backfill。 设定这个参数来指明在一个osd上最多能有多少个pg同时做backfill。
osd_recovery_max_active:默认值15. 一个osd上可以承载多个pg, 可能好几个pg都需要recovery,这个值限定该osd最多同时有多少pg做recovery。
osd_recovery_max_single_start:默认值5. 这个值限定了每个pg可以启动recovery操作的最大数。
osd_recovery_max_chunk: 默认值8388608. 设置恢复数据块的大小,以防网络阻塞
osd_recovery_op_priority: 默认值10. osd修复操作的优先级, 可小于该值
osd_recovery_sleep: 默认值0. revocery的间隔

如果恢复过程中,会影响业务,那么可以把osd_max_backfills(1)、osd_recovery_max_active(1)、osd_recovery_max_single_start(1)调小

参考:[https://blog.csdn.net/guzyguzyguzy/article/details/50439621 “ceph pg recovery参数限流值研究小结”]