0

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

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

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

4

1 回答 1

1

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

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

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

于 2020-12-12T06:00:33.580 回答