【问题标题】:Why Ceph calculate PG ID by object hash rather than CRUSH algorithm?为什么 Ceph 使用对象哈希而不是 CRUSH 算法计算 PG ID?
【发布时间】:2025-11-22 11:00:02
【问题描述】:

Ceph 使用 CRUSH 算法进行 PG->OSD 映射,它适用于增加/减少 OSD 节点。

但是对于 obj->PG 映射,Ceph 仍然使用传统的哈希,即pgid = hash(obj_name) % pg_num。如果我们改变 PG 的数量,这种方法可能会导致大量的数据迁移,甚至会降低系统的可用性。

为什么 Ceph 不使用 CRUSH algirhtm(比如稻草 2)进行 obj->PG 映射,当 PG 的数量发生变化时,它可能具有最佳的数据迁移量?

【问题讨论】:

    标签: ceph cephfs radosgw crush


    【解决方案1】:

    有不同的场景,我认为 CRUSH 不是灵丹妙药。

    1. PG->OSD 是一对多函数,而 obj->PG 是一对一函数 功能。
    2. OSD 的添加和删除相当频繁,而 PG 被认为相当稳定。
    3. OSD 组可能部分不可用,而 PG 不会。

    这是我的看法,欢迎批评或讨论。

    【讨论】:

      最近更新 更多