知识卡片
acting set与up set分离应对新OSD无法立即服务
内容
一个 PG 正常情况下 acting set(实际负责该 PG 读写的 OSD 列表,有序,第一个是主)和 up set([[对象寻址的两级映射设计|CRUSH]] 当前算出的目标 OSD 列表)完全相同。但当某个 OSD 故障、CRUSH 重新算出一个新的 OSD 顶替时,这个新 OSD 手头还没有任何数据、无法立刻承担主副本的读服务职责——于是 PG 向 Monitor 申请一个”临时 PG”:up set 里用一个仍持有旧数据的老 OSD 顶替担任临时主,acting set 却已经指向新的目标列表,两者从此不同,直到新 OSD 完成 [[Recovery与Backfill的适用场景区别|Backfill]] 补齐数据后临时 PG 撤销、二者重新一致。这是”目标状态”和”当前可用状态”分离建模的典型例子:CRUSH 算出的是终态,但系统需要一个额外的字段去表达”过渡期间谁真正能干活”。
参考来源
《Ceph源码分析》第10章《Ceph Peering机制》