知识卡片

PG作为中间寻址层

专业/工作 · 237.d.2

内容

如果对象直接映射到 OSD,集群拓扑一变就得重算所有对象的位置。Ceph 插入了 PG(Placement Group)作为中间层来切断这种耦合:先用一个静态 Hash 函数把对象 ID 映射到 PG(PG 总数在建池时固定,映射近似均匀且此后不变),再由 CRUSH 算法把 PG 映射到一组 OSD,只有这一步会随 OSD 的增删而重新计算。两次映射彼此独立、各自确定,把”数据怎么分”和”数据存在哪个物理节点”解耦成了两层坐标系。发散:这和 Kafka 的分区、一致性 Hash 里的虚拟节点是同一个套路——插入一层稳定的中间抽象,把拓扑变化的影响范围限制在其中一层。

参考来源

《Ceph分布式存储实战》第3章《智能分布CRUSH》