2.5. 开发 CRUSH 层次结构
作为存储管理员,在部署 Ceph 存储集群和对象网关时,Ceph 对象网关通常具有默认 zone group 和 zone。Ceph 存储群集将具有默认的池,后者使用 CRUSH 层次结构和默认 CRUSH 规则的 CRUSH map。
默认 rbd
池可以使用默认的 CRUSH 规则。如果 Ceph 客户端已使用它们存储客户端数据,请不要 删除 默认规则或层次结构。
生产网关通常使用自定义域、zone group 和 zone,具体取决于网关的使用和地理位置。此外,Ceph 存储群集将具有具有多个 CRUSH 层次结构的 CRUSH map。
-
服务池: 至少一个 CRUSH 层次结构将用于服务池,并且可能用于数据。服务池包含
.rgw.root
以及与区域关联的服务池。服务池通常位于单个 CRUSH 层次结构下,并使用复制来实现数据持久性。数据池也可能使用 CRUSH 层次结构,但池通常配置有纠删代码以实现数据持久性。 - 索引: 至少有一个 CRUSH 层次结构 SHOULD 用于索引池,其中 CRUSH 层次结构映射到高性能介质,如 SSD 或 NVMe 驱动器。bucket 索引可能会成为性能瓶颈。红帽建议在 CRUSH 层次结构中使用 SSD 或 NVMe 驱动器。在用于 Ceph OSD 日志的 SSD 或 NVMe 驱动器上创建索引分区。另外,索引应该配置有存储桶分片。
- 放置池 : 每个放置目标的放置池包括存储桶索引、数据存储桶和 bucket 额外内容。这些池可以属于单独的 CRUSH 层次结构。由于 Ceph 对象网关可以支持多种存储策略,存储策略的 bucket 池可能与不同的 CRUSH 层次结构关联,反映了不同的用例,如 IOPS 优化、吞吐量优化和容量优化。bucket 索引池 SHOULD 使用自己的 CRUSH 层次结构将存储桶索引池映射到更高的性能存储介质,如 SSD 或 NVMe 驱动器。
2.5.1. 创建 CRUSH roots 复制链接链接已复制到粘贴板!
从管理节点上的命令行,为各个 CRUSH 层次结构在 CRUSH map 中创建 CRUSH roots。必须 至少有一个 CRUSH 层次结构,用于可能也提供数据存储池的服务池。SHOULD 至少有一个 CRUSH 层次结构用于 bucket 索引池,映射到 SSD 或 NVMe 驱动器等高性能存储介质。
如需有关 CRUSH 层次结构的详细信息,请参见 Red Hat Ceph Storage 指南 6 中的 CRUSH 层次结构章节。
若要手动编辑 CRUSH map,请参阅 Red Hat Ceph Storage 策略指南 6 中的编辑 CRUSH map 部分。
在以下示例中,名为 data0
、data1
和 data2
的主机使用扩展逻辑名称,如 data0-sas-ssd
、data0-index
等,因为 CRUSH 层次结构有多种指向同一物理主机的 CRUSH 层次结构。
典型的 CRUSH root 可能代表具有 SAS 驱动器和 SSD 的节点(用于日志)。例如:
用于 bucket 的 CRUSH root 索引 SHOULD 代表高性能介质,如 SSD 或 NVMe 驱动器。考虑在存储 OSD 日志的 SSD 或 NVMe 介质上创建分区。例如:
2.5.2. 创建 CRUSH 规则 复制链接链接已复制到粘贴板!
与默认的 CRUSH 层次结构一样,CRUSH map 也包含默认的 CRUSH 规则。
默认 rbd
池可能使用此规则。如果其他池已使用它存储客户数据,请不要删除默认规则。
有关 CRUSH 规则的常规详细信息,请参见 Red Hat Ceph Storage 6 的 Red Hat Ceph Storage 策略指南中的 CRUSH 规则 部分。要手动编辑 CRUSH map,请参阅 Red Hat Ceph Storage 6 的 Red Hat Ceph Storage 策略指南中的 编辑 CRUSH map 部分。
对于每一 CRUSH 层次结构,创建一个 CRUSH 规则。下例演示了 CRUSH 层次结构的规则,该层次结构将存储服务池,包括 .rgw.root
。在本例中,根 sas-ssd
充当 CRUSH 主层次结构。它使用名称 rgw-service
来区分其自身和默认规则。步骤采用 sas-ssd
行告诉池,使用在 Creating CRUSH roots 中创建的 sas-ssd
root,其子 bucket 包含带有 SAS 驱动器的 OSD 和高性能存储介质,如 SSD 或 NVMe 驱动器,用于高吞吐量硬件配置中的日志。step chooseleaf
的 type rack
部分是故障域。在以下示例中,这是一个机架。
在示例中,如果数据被复制三次,集群中的至少应该有三个机架,其中包含相似数量的 OSD 节点。
type replicated
设置与数据持久性、副本数或纠删代码 无关。仅支持 replicated
。
下例演示了将存储数据池的 CRUSH 层次结构的规则。在本例中,根 sas-ssd
充当 CRUSH 主层次结构- 与服务规则相同的 CRUSH 层次结构。它使用 rgw-throughput
来区分其自身与默认规则和 rgw-service
。步骤采用 sas-ssd
行告诉池,使用在 Creating CRUSH roots 中创建的 sas-ssd
root,其子 bucket 包含带有 SAS 驱动器的 OSD 和高性能存储介质,如 SSD 或 NVMe 驱动器,在高吞吐量硬件配置中。step chooseleaf
的 type host
部分是故障域。在以下示例中,这是主机。注意该规则使用相同的 CRUSH 层次结构,但使用了不同的故障realm。
在示例中,如果池将纠删代码与更多的数据进行纠删代码,且编码区块数超过默认值,则集群中的机架应至少包含数量相似的 OSD 节点,以便于纠删代码区块。对于较小的集群,这可能不实际,因此,示例中使用 host
作为 CRUSH 故障realm。
下例演示了 CRUSH 层次结构的规则,该规则将存储索引池。在本例中,根 index
充当 CRUSH 主层次结构。它使用 rgw-index
将自身与 rgw-service
和 rgw-throughput
区分开来。step take index
行告知池使用 Creating CRUSH Roots 创建 index
root,其子存储桶包含高性能存储介质,如 SSD 或 NVMe 驱动器或 SSD 上存储 OSD 日志的 NVMe 驱动器或 NVMe 驱动器上。step chooseleaf
的 type rack
部分是故障域。在以下示例中,这是一个机架。