2.7. Ceph 复制
与 Ceph 客户端一样,Ceph OSD 可以联系 Ceph 监视器,以检索 cluster map 的最新副本。Ceph OSD 也使用 CRUSH 算法,但它们使用它来计算对象副本的存储位置。在典型的写入场景中,Ceph 客户端使用 CRUSH 算法来计算对象的操作集合中的 PG ID 和 Primary OSD。当客户端将对象写入Primary OSD 时,Primary OSD 找到它应当存储的副本数。该值可在 osd_pool_default_size
设置中找到。然后,Primary OSD 采用对象 ID、池名称和 cluster map,并使用 CRUSH 算法计算执行集合的次要 OSD 的 ID。Primary OSD 将对象写入次要 OSD。当Primary OSD 从次要 OSD 收到确认,Primary OSD 本身完成其写操作时,它确认对 Ceph 客户端执行成功的写入操作。
Ceph OSD 守护进程可以代表 Ceph 客户端执行数据复制,从而减轻 Ceph 客户端不受这一职责影响,同时确保高可用性和数据安全性。
Primary OSD 和次要 OSD 通常配置为位于单独的故障域中。CRUSH 计算次要 OSD 的 ID,并考虑故障域。
数据复制
在复制存储池中,Ceph 需要对象的多个副本才能在降级状态下运行。理想情况下,Ceph 存储集群使得客户端能够读取和写入数据,即使操作的集合中的一个 OSD 出现故障。因此,Ceph 默认为对象制作三个副本,并且至少清理两个副本以进行写入操作。即使两个 OSD 出现故障,Ceph 仍然会保留数据。但是,它会中断写入操作。
在纠删代码池中,Ceph 需要在多个 OSD 之间存储对象的区块,以便它在降级状态下运行。与复制池类似,理想情况下,纠删代码池使得 Ceph 客户端能够在降级状态读取和写入。
红帽支持 k 和 m 的以下 jerasure 编码值:
- k=8 m=3
- k=8 m=4
- k=4 m=2