知识卡片

AsyncReserver用优先级队列限制并发修复规模

专业/工作 · 515.e

内容

数据修复不是想修就修,每个 OSD 能同时参与修复的 PG 数量有上限(默认 1),主从两端都要先申请到资源配额才能开始。AsyncReserver 把所有待修复的资源请求按优先级放入队列,一旦有空闲配额,就从优先级最高的请求开始逐个授权,请求方通过注册回调异步得知”轮到我了”;某个修复完成释放配额后,会立刻重新扫描队列把配额让给下一个排队者。这是资源节流思想在修复场景的具体应用:如果不限制并发修复的 PG 数量,大规模故障时所有受影响的 PG 会同时抢占 IO 和网络带宽,反而拖慢整体恢复速度甚至影响正常读写,用配额把并发修复压到可控范围内,靠优先级排序保证重要的修复不会被无限期饿死。

参考来源

《Ceph源码分析》第11章《Ceph数据修复》