1. recoery与backfill的区别
Recovery:通过副本之间的日志差异进行修复,属于增量修复;
Backfill:副本之间的日志有断层,无法从日志修复,只能对比副本之间的数据差异进行修复,属于全量恢复。
2. 判断PG是走增量修复(recovery)还是全量修复(backfill)
根据log日志判断的,一般默认一个pg保存3000条日志。
当加入集群OSD的log日志与权威OSD的log日志有交集时,增量恢复;
当加入集群OSD的log日志与权威OSD的log日志无交集时,全量恢复;
如图:osd.3重启后,日志记录的末尾序列号为3000,权威osd.1在场景一记录的起始序列号1000,那么osd.1与osd.3的日志有交集[1000,3000],此时recovery修复;权威osd.1在场景二记录的起始序列号为4000,那么osd.1与osd.3无交集,此时backfill修复。
3. 数据修复会消耗带宽、cpu资源,影响客户端IO,那么如何控制速度?
osd_recovery_op_priority:是控制数据迁移的op的优先级,一般为了降低对客户端op的影响,优先级低于客户端op;
osd_recovery_max_active:当PG修复是recovery时,调节该参数,可以控制PG的并发数,调节迁移速度的快慢;
osd_max_backfills:当PG修复是backfill时,调节该参数,可以控制PG的并发数,调节迁移速度的快慢。