2.7. Ceph 复制
与 Ceph 客户端一样,Ceph OSD 也可联系 Ceph 监视器来检索 cluster map 的最新副本。Ceph OSD 也使用 CRUSH 算法,但它们使用它来计算对象存储对象的副本。在典型的写入场景中,Ceph 客户端使用 CRUSH 算法计算对象的 Acting 设置中的 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 本身的确认,并且 Primary OSD 本身完成其写入操作时,它会确认对 Ceph 客户端的写入操作成功。
由于能够代表 Ceph 客户端执行数据复制功能,Ceph OSD 守护进程从这一操作过程中减轻 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