第 2 章 CRUSH 管理员概述
可扩展哈希下的受控复制(CRUSH)算法决定如何通过计算数据存储位置存储和检索数据。
任何足够高级的技术都与数字相比是不可区别的。 | ||
-- Arthur C. Clarke |
2.1. CRUSH 简介
存储集群的 CRUSH 映射描述了 CRUSH 层次结构中的设备位置,以及确定 Ceph 如何存储数据的层次结构的规则。
CRUSH map 至少包含一个节点层次结构并保留。Ceph 中的层次结构的节点称为"buckets",是其类型定义的任何存储位置聚合。例如,行、机架、机箱、主机和设备。层次结构的每个叶基本上由存储设备列表中的一个存储设备组成。leaf 始终包含在一个节点或 "bucket"。CRUSH map 也具有确定 CRUSH 存储和检索数据的规则列表。
将 OSD 添加到集群时,存储设备会添加到 CRUSH map。
CRUSH 算法根据每个设备的权重值将数据对象分布到存储设备中,从而达到统一性分布。CRUSH 根据管理员定义的层次结构集群映射,分发对象及其副本或纠删代码区块。CRUSH 映射代表可用的存储设备以及包含该规则的逻辑存储桶,并扩展使用该规则的每个池。
要将放置组映射到 OSD 跨故障域或性能域,CRUSH 映射定义了 bucket 类型的层次结构列表;即,在生成的 CRUSH 映射中的 类型
下。创建存储桶层次结构的目的是,通过其故障域或性能域来隔离叶节点。故障域包括主机、机箱、机架、电源分配单元、pod、行、房间和数据中心。安全域包括特定配置的故障域和 OSD。例如: SSD、SAS 驱动器以及 SSD 日志、SATA 驱动器等。设备具有 类
的概念,如 hdd
、ssd
和 nvme
,以更快速地构建具有类别设备的 CRUSH 层次结构。
除了代表 OSD 的叶节点外,层次结构的其余部分是任意的,如果默认类型不适合您的要求,您可以根据您自己的需求进行定义。我们推荐将您的 CRUSH 映射 bucket 类型调整为组织的硬件命名约定,并使用反映物理硬件名称的实例名称。通过良好的命名规则,您可以更轻松地管理集群,并在 OSD 或其他硬件故障时方便排除问题,并方便管理员远程或物理访问主机或其他硬件。
在以下示例中,bucket 层次结构有四个页存储桶(osd 1-4
)、两个节点存储桶(主机 1-2
)和一个机架节点(rack 1
)。
由于叶节点反映 CRUSH 映射开头的 devices
列表下声明的存储设备,因此不需要将它们声明为 bucket 实例。层次结构中第二个最低存储桶类型通常会聚合设备;即,通常是包含存储介质的计算机,并使用管理员喜欢描述它的任何术语,如 "node"、"computer"、"host"、"host"、"machine"等。在高密度的环境中,每个卡和每个机箱查看多个主机/节点越来越常见。确保考虑卡和机箱失败的情况,例如,如果在一个节点失败时需要拔出相关的卡或机箱时,可能会导致大量主机/节点及其 OSD 无法使用。
在声明存储桶实例时,指定其类型作为字符串的唯一名称,请为它分配一个可选的唯一 ID,以负整数表示,指定相对于其项目的总容量或能力的权重,指定存储桶算法,如 straw2
,以及哈希算法,它通常为 0
,代表 rjenkins1
哈希算法。bucket 可以有一个或多个项目。这些项目可由节点存储桶或保留组成。项目可以有一个权重,来反映项目的相对权重。
2.1.1. 动态数据放置
Ceph 客户端和 Ceph OSD 都使用 CRUSH map 和 CRUSH 算法。
- Ceph 客户端: 通过分发 CRUSH map 到 Ceph 客户端,CRUSH 允许 Ceph 客户端直接与 OSD 通信。这意味着 Ceph 客户端避免了中央对象查找表,它们可以充当单一故障点、性能瓶颈、集中查找服务器的连接限制以及存储集群可扩展性的物理限制。
- Ceph OSD: 通过将 CRUSH map 分发到 Ceph OSD,Ceph 允许 OSD 处理复制、回填和恢复。这意味着 Ceph OSD 代表 Ceph 客户端处理对象副本(或编码区块)的存储。它还意味着 Ceph OSD 知道集群足以重新平衡集群(重新填充),并从失败动态恢复。
2.1.2. CRUSH 故障域
有多个对象副本或 M
纠删代码区块有助于防止数据丢失,但无法解决高可用性。通过反映 Ceph Storage 集群的底层物理组织,CRUSH 可以建模,从而造成关联设备故障的潜在来源。通过将集群的拓扑编码到集群映射中,CRUSH 放置策略可在不同的故障域间分离对象副本或纠删代码区块,同时仍维护所需的伪随机分布。例如,为了解决并发故障的可能性,可能需要确保数据副本或纠删代码区块位于使用不同的 shelves、机架、电源、控制器或物理位置的设备上。这有助于防止数据丢失并允许集群以降级状态运行。
2.1.3. CRUSH 性能域
Ceph 可以支持多种层次结构,将一种类型的硬件性能配置集与其他类型的硬件性能配置集分隔开。例如,CRUSH 可以为硬盘和 SSD 的另一个层次结构创建一个层次结构。使用性能域 (考虑到底层硬件的性能特性的分级结构)变得非常流行 ,因此通常会需要满足不同的性能要求。在操作上,只有 CRUSH 映射具有多个 根
类型 bucket。用例示例包括:
- 对象存储: 用作 S3 和 Swift 接口的对象存储后端的 Ceph 主机可能会使用廉价的存储介质,如 SATA 驱动器,它们可能不适用于虚拟机,但对于对象存储可以降低增加额外 GB 存储空间的成本。这样,可以将廉价的存储主机与需要高性能的系统(例如用于在云平台中存储卷和镜像的系统)分离。HTTP 往往是对象存储系统中的瓶颈。
- 冷存储 :为冷存储设计的系统 - 经常访问数据,或使用放宽的性能要求实现数据检索 - 充分利用成本较低的存储介质和纠删代码。但是,擦除编码可能需要一些额外的 RAM 和 CPU,因此与用于对象存储或虚拟机的主机的 RAM 和 CPU 要求有所不同。
-
SSD 支持的池: SSD 非常昂贵,但它们比硬盘提供显著优势。SSD 没有查看时间,它们提供较高的吞吐量。除了使用 SSD 进行日志外,集群还可以支持由 SSD 支持的池。常见用例包括高性能 SSD 池。例如,可以将 Ceph 对象网关的
.rgw.buckets.index
池映射到 SSD,而不是 SATA 驱动器。
CRUSH map 支持 设备类
的概念。Ceph 可以发现存储设备的各个方面,并自动分配类,如 hdd
、ssd
或 nvme
。但是,CRUSH 不仅限于这些默认值。例如,CRUSH 层次结构还可用于分隔不同类型的工作负载。例如,SSD 可以用于日志或直写日志,bucket 索引或原始对象存储。CRUSH 可以支持不同的设备类,如 ssd-bucket-index
或 ssd-object-storage
,因此 Ceph 不会对不同的工作负载使用相同的存储介质 - 提高了性能的可预测性和一致性。
在后台后,Ceph 为各个设备类生成 CRUSH root。这些根应仅通过设置或更改 OSD 上的设备类来修改。您可以使用以下命令查看生成的 roots:
示例
[ceph: root@host01 /]# ceph osd crush tree --show-shadow ID CLASS WEIGHT TYPE NAME -24 ssd 4.54849 root default~ssd -19 ssd 0.90970 host ceph01~ssd 8 ssd 0.90970 osd.8 -20 ssd 0.90970 host ceph02~ssd 7 ssd 0.90970 osd.7 -21 ssd 0.90970 host ceph03~ssd 3 ssd 0.90970 osd.3 -22 ssd 0.90970 host ceph04~ssd 5 ssd 0.90970 osd.5 -23 ssd 0.90970 host ceph05~ssd 6 ssd 0.90970 osd.6 -2 hdd 50.94173 root default~hdd -4 hdd 7.27739 host ceph01~hdd 10 hdd 7.27739 osd.10 -12 hdd 14.55478 host ceph02~hdd 0 hdd 7.27739 osd.0 12 hdd 7.27739 osd.12 -6 hdd 14.55478 host ceph03~hdd 4 hdd 7.27739 osd.4 11 hdd 7.27739 osd.11 -10 hdd 7.27739 host ceph04~hdd 1 hdd 7.27739 osd.1 -8 hdd 7.27739 host ceph05~hdd 2 hdd 7.27739 osd.2 -1 55.49022 root default -3 8.18709 host ceph01 10 hdd 7.27739 osd.10 8 ssd 0.90970 osd.8 -11 15.46448 host ceph02 0 hdd 7.27739 osd.0 12 hdd 7.27739 osd.12 7 ssd 0.90970 osd.7 -5 15.46448 host ceph03 4 hdd 7.27739 osd.4 11 hdd 7.27739 osd.11 3 ssd 0.90970 osd.3 -9 8.18709 host ceph04 1 hdd 7.27739 osd.1 5 ssd 0.90970 osd.5 -7 8.18709 host ceph05 2 hdd 7.27739 osd.2 6 ssd 0.90970 osd.6