2.6. 开发 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 层次结构,但池通常配置有纠删代码以实现数据持久性。 - index : 至少将一个 CRUSH 层次结构 SHOULD 用于索引池,其中 CRUSH 层次结构映射到高性能介质,如 SSD 或 NVMe 驱动器。bucket 索引可能会成为性能瓶颈。红帽建议在 CRUSH 层次结构中使用 SSD 或 NVMe 驱动器。在用于 Ceph OSD 日志的 SSD 或 NVMe 驱动器上创建索引分区。另外,索引应该配置有存储桶分片。
- placement Pools: 每个放置目标的池包括存储桶索引、数据存储桶和 bucket 额外。这些池可以属于单独的 CRUSH 层次结构。由于 Ceph 对象网关可以支持多个存储策略,因此存储策略的存储桶池可能与不同的 CRUSH 层次结构关联,反映不同的用例,如 IOPS 优化、吞吐量和容量优化等。bucket 索引池 SHOULD 使用自己的 CRUSH 层次结构将 bucket 索引池映射到更高的性能存储介质,如 SSD 或 NVMe 驱动器。
2.6.1. 创建 CRUSH root
从管理节点上的命令行,为各个 CRUSH 层次结构在 CRUSH map 中创建 CRUSH roots。必须 至少有一个 CRUSH 层次结构,用于可能也提供数据存储池的服务池。bucket 索引池的 SHOULD 至少是一个 CRUSH 层次结构,映射到高性能存储介质,如 SSD 或 NVMe 驱动器。
如需有关 CRUSH 层次结构的详细信息,请参见 Red Hat Ceph Storage 指南 5 中的 CRUSH 层次结构章节。
若要手动编辑 CRUSH map,请参阅 Red Hat Ceph Storage 策略指南 5 中的编辑 CRUSH map 部分。
在以下示例中,名为 data0
、data1
和 data2
的主机使用扩展的逻辑名称,如 data0-sas
-sd、data0-index
等等,因为有多个 CRUSH 层次结构指向同一物理主机。
典型的 CRUSH root 可能代表具有 SAS 驱动器和 SSD 的节点(用于日志)。例如:
## # SAS-SSD ROOT DECLARATION ## root sas-ssd { id -1 # do not change unnecessarily # weight 0.000 alg straw hash 0 # rjenkins1 item data2-sas-ssd weight 4.000 item data1-sas-ssd weight 4.000 item data0-sas-ssd weight 4.000 }
用于 bucket 的 CRUSH root 索引 SHOULD 代表高性能介质,如 SSD 或 NVMe 驱动器。考虑在存储 OSD 日志的 SSD 或 NVMe 介质上创建分区。例如:
## # INDEX ROOT DECLARATION ## root index { id -2 # do not change unnecessarily # weight 0.000 alg straw hash 0 # rjenkins1 item data2-index weight 1.000 item data1-index weight 1.000 item data0-index weight 1.000 }
2.6.2. 创建 CRUSH 规则
与默认的 CRUSH 层次结构一样,CRUSH map 也包含默认的 CRUSH 规则。
默认 rbd
池可能使用此规则。如果其他池已使用它存储客户数据,请不要删除默认规则。
有关 CRUSH 规则的常规详情,请参见 Red Hat Ceph Storage 5 的 Red Hat Ceph Storage 策略指南中的 CRUSH 规则 部分。要手动编辑 CRUSH 映射,请参见 Red Hat Ceph Storage 5 的 Red Hat Ceph Storage Storage 策略指南中的 编辑 CRUSH map 部分。
对于每一 CRUSH 层次结构,创建一个 CRUSH 规则。下例演示了 CRUSH 层次结构的规则,该层次结构将存储服务池,包括 .rgw.root
。在本例中,根 sas-ssd
充当 CRUSH 主层次结构。它使用名称 rgw-service
来区分其自身和默认规则。步骤取 sas-
sd 行告知池使用在 Creating CRUSH roots 中创建的 sas-ssd
root,其子存储桶包含带有 SAS 驱动器和高性能存储介质的 OSD,如 SSD 或 NVMe 驱动器(如 SSD 或 NVMe 驱动器)。step chooseleaf
的 type rack
部分是故障域。在以下示例中,这是一个机架。
## # SERVICE RULE DECLARATION ## rule rgw-service { type replicated min_size 1 max_size 10 step take sas-ssd step chooseleaf firstn 0 type rack step emit }
在示例中,如果数据被复制三次,集群中的至少应该有三个机架,其中包含相似数量的 OSD 节点。
type replicated
设置与数据持久性、副本数或纠删代码 无关。仅支持 replicated
。
下例演示了将存储数据池的 CRUSH 层次结构的规则。在本例中,根 sas-ssd
充当 CRUSH 主层次结构- 与服务规则相同的 CRUSH 层次结构。它使用 rgw-throughput
来区分其自身与默认规则和 rgw-service
。步骤取 sas-
sd 行告知池使用在 Creating CRUSH roots 中创建的 sas-ssd
root,其子存储桶包含带有 SAS 驱动器和高性能存储介质的 OSD,如 SSD 或 NVMe 驱动器(如 SSD 或 NVMe 驱动器)。step chooseleaf
的 type host
部分是故障域。在以下示例中,这是主机。注意该规则使用相同的 CRUSH 层次结构,但使用了不同的故障realm。
## # THROUGHPUT RULE DECLARATION ## rule rgw-throughput { type replicated min_size 1 max_size 10 step take sas-ssd step chooseleaf firstn 0 type host step emit }
在示例中,如果池将纠删代码与更多的数据进行纠删代码,且编码区块数超过默认值,则集群中的机架应至少包含数量相似的 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
部分是故障域。在以下示例中,这是一个机架。
## # INDEX RULE DECLARATION ## rule rgw-index { type replicated min_size 1 max_size 10 step take index step chooseleaf firstn 0 type rack step emit }
2.6.3. 其它资源
- 有关 CRUSH 层次结构的常规详细信息,请参阅 Red Hat Ceph Storage Storage 策略指南中的 CRUSH 管理 部分。