第 4 章 处理数据中心失败


红帽 Ceph 存储可能会对基础架构出现灾难性故障,例如在扩展集群中丢失三个数据中心之一。对于标准对象存储用例,可将所有三个数据中心配置独立使用在它们之间进行复制设置。在这种情况下,每个数据中心的集群配置可能会有所不同,反映本地的功能和依赖项。

应考虑放置层次结构的逻辑结构。可以使用正确的 CRUSH map,反映基础架构中故障域的层次结构。使用逻辑层次定义可提高存储集群的可靠性,而不是使用标准的分层定义。故障域在 CRUSH map 中定义。默认的 CRUSH map 包含扁平层次结构中的所有节点。

在三个数据中心环境中,通过扩展集群,节点放置应以一个数据中心停止运行的方式进行管理,但存储集群会继续运行。当为数据使用三向复制时,请考虑节点所在的故障域,在一个数据中心的停机时,可能存在一些数据保留的。当发生这种情况时,有两个选项:

  • 将只读状态的数据保留为标准设置。
  • 在中断期间只有一个副本。

使用标准设置,由于数据在节点间的随机性,并非所有数据都会受到影响,但某些数据可能只有一个副本,而且存储集群将恢复为只读模式。

在下面的示例中,生成的 map 派生自具有 6 个 OSD 节点的集群的初始设置。在本例中,所有节点都只有一个磁盘,因此一个 OSD。所有节点都按照默认的 root 排列,这是层次结构树的标准根。由于这些 OSD 分配到两个 OSD 的权重,这些 OSD 收到比其他 OSD 更少的数据块。这些节点稍后引入,其磁盘比初始 OSD 磁盘大。这不会影响数据放置,以防出现一组节点故障。

标准 CRUSH map

$ sudo ceph osd tree
ID WEIGHT  TYPE NAME           UP/DOWN REWEIGHT PRIMARY-AFFINITY
-1 0.33554 root default
-2 0.04779     host ceph-node3
 0 0.04779         osd.0            up  1.00000          1.00000
-3 0.04779     host ceph-node2
 1 0.04779         osd.1            up  1.00000          1.00000
-4 0.04779     host ceph-node1
 2 0.04779         osd.2            up  1.00000          1.00000
-5 0.04779     host ceph-node4
 3 0.04779         osd.3            up  1.00000          1.00000
-6 0.07219     host ceph-node6
 4 0.07219         osd.4            up  0.79999          1.00000
-7 0.07219     host ceph-node5
 5 0.07219         osd.5            up  0.79999          1.00000

使用逻辑层次定义将节点分组到同一数据中心,以获得数据放置成熟度。可能的定义类型:数据中心机架、行和 主机 允许反映三个数据中心的故障域:

  • 节点 ceph-node1 和 ceph-node2 驻留在数据中心 1(DC1)
  • 节点 ceph-node3 和 ceph-node5 驻留在数据中心 2(DC2)
  • 节点 ceph-node4 和 ceph-node6 驻留在数据中心 3(DC3)中
  • 所有数据中心都属于相同的结构(allDC)

由于主机中的所有 OSD 都属于主机定义,因此无需更改。所有其他分配都可以在存储集群的运行时调整:

  • 使用以下命令 定义存储桶 结构:

    ceph osd crush add-bucket allDC root
    ceph osd crush add-bucket DC1 datacenter
    ceph osd crush add-bucket DC2 datacenter
    ceph osd crush add-bucket DC3 datacenter
  • 通过修改 CRUSH 映射,将节点移到这个结构中的相应位置:

    ceph osd crush move DC1 root=allDC
    ceph osd crush move DC2 root=allDC
    ceph osd crush move DC3 root=allDC
    ceph osd crush move ceph-node1 datacenter=DC1
    ceph osd crush move ceph-node2 datacenter=DC1
    ceph osd crush move ceph-node3 datacenter=DC2
    ceph osd crush move ceph-node5 datacenter=DC2
    ceph osd crush move ceph-node4 datacenter=DC3
    ceph osd crush move ceph-node6 datacenter=DC3

在此结构中,也可以添加任何新主机,以及新的磁盘。通过将 OSD 放置到层次结构中的正确位置,CRUSH 算法被更改为将冗余片段放入不同的故障域中。

以上示例会产生以下内容:

$ sudo ceph osd tree
ID  WEIGHT  TYPE NAME               UP/DOWN REWEIGHT PRIMARY-AFFINITY
 -8 6.00000 root allDC
 -9 2.00000     datacenter DC1
 -4 1.00000         host ceph-node1
  2 1.00000             osd.2            up  1.00000          1.00000
 -3 1.00000         host ceph-node2
  1 1.00000             osd.1            up  1.00000          1.00000
-10 2.00000     datacenter DC2
 -2 1.00000         host ceph-node3
  0 1.00000             osd.0            up  1.00000          1.00000
 -7 1.00000         host ceph-node5
  5 1.00000             osd.5            up  0.79999          1.00000
-11 2.00000     datacenter DC3
 -6 1.00000         host ceph-node6
  4 1.00000             osd.4            up  0.79999          1.00000
 -5 1.00000         host ceph-node4
  3 1.00000             osd.3            up  1.00000          1.00000
 -1       0 root default

以上列表通过显示 osd 树来显示生成的 CRUSH map。现在,易于查看是主机如何属于数据中心,所有数据中心都属于同一顶级结构,但可清楚地区分位置。

注意

根据 map 将数据放置到正确的位置,只能在健康的集群中正常工作。当某些 OSD 不可用时,可能会发生 Misplacement。这些错误替换会在可能的情况下自动更正。

其它资源

  • 如需更多信息,请参阅 Red Hat Ceph Storage 策略指南中的 CRUSH 管理 章节。
Red Hat logoGithubRedditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

通过我们的产品和服务,以及可以信赖的内容,帮助红帽用户创新并实现他们的目标。

让开源更具包容性

红帽致力于替换我们的代码、文档和 Web 属性中存在问题的语言。欲了解更多详情,请参阅红帽博客.

關於紅帽

我们提供强化的解决方案,使企业能够更轻松地跨平台和环境(从核心数据中心到网络边缘)工作。

© 2024 Red Hat, Inc.