第 4 章 配置 Red Hat Ceph Storage 扩展集群


使用 cephadm 完全部署了红帽 Ceph 存储集群后,请使用以下步骤来配置扩展集群模式。新的扩展模式旨在处理两个站点情况。

步骤

  1. 使用 ceph mon dump 命令检查监视器所使用的当前选择策略。默认情况下,在 ceph 集群中,连接设置为经典。

    ceph mon dump | grep election_strategy

    输出示例:

    dumped monmap epoch 9
    election_strategy: 1
  2. 将 monitor 选举更改为连接性。

    ceph mon set election_strategy connectivity
  3. 再次运行前面的 ceph mon dump 命令,以验证 election_strategy 值。

    $ ceph mon dump | grep election_strategy

    输出示例:

    dumped monmap epoch 10
    election_strategy: 3

    要了解有关不同选择策略的更多信息,请参阅配置监控选举策略

  4. 设置所有 Ceph 监视器的位置:

    ceph mon set_location ceph1 datacenter=DC1
    ceph mon set_location ceph2 datacenter=DC1
    ceph mon set_location ceph4 datacenter=DC2
    ceph mon set_location ceph5 datacenter=DC2
    ceph mon set_location ceph7 datacenter=DC3
  5. 验证每个监控器是否具有正确的位置。

    $ ceph mon dump

    输出示例:

    epoch 17
    fsid dd77f050-9afe-11ec-a56c-029f8148ea14
    last_changed 2022-03-04T07:17:26.913330+0000
    created 2022-03-03T14:33:22.957190+0000
    min_mon_release 16 (pacific)
    election_strategy: 3
    0: [v2:10.0.143.78:3300/0,v1:10.0.143.78:6789/0] mon.ceph1; crush_location {datacenter=DC1}
    1: [v2:10.0.155.185:3300/0,v1:10.0.155.185:6789/0] mon.ceph4; crush_location {datacenter=DC2}
    2: [v2:10.0.139.88:3300/0,v1:10.0.139.88:6789/0] mon.ceph5; crush_location {datacenter=DC2}
    3: [v2:10.0.150.221:3300/0,v1:10.0.150.221:6789/0] mon.ceph7; crush_location {datacenter=DC3}
    4: [v2:10.0.155.35:3300/0,v1:10.0.155.35:6789/0] mon.ceph2; crush_location {datacenter=DC1}
  6. 通过安装 ceph-base RPM 软件包来创建使用此 OSD 拓扑的 CRUSH 规则,以便使用 crushtool 命令:

    $ dnf -y install ceph-base

    要了解有关 CRUSH 规则集的更多信息,请参见 Ceph CRUSH 规则集

  7. 从集群获取编译的 CRUSH map:

    $ ceph osd getcrushmap > /etc/ceph/crushmap.bin
  8. 解译 CRUSH map,并将其转换为文本文件,以便能编辑它:

    $ crushtool -d /etc/ceph/crushmap.bin -o /etc/ceph/crushmap.txt
  9. 编辑文件 /etc/ceph/crushmap.txt,将以下规则添加到 CRUSH map。

    $ vim /etc/ceph/crushmap.txt
    rule stretch_rule {
            id 1
            type replicated
            min_size 1
            max_size 10
            step take DC1
            step chooseleaf firstn 2 type host
            step emit
            step take DC2
            step chooseleaf firstn 2 type host
            step emit
    }
    
    # end crush map
    注意

    规则 ID 必须是唯一的。在示例中,我们只有一个带有 id 0 的 crush 规则,因此我们正在使用 id 1。如果您的部署创建了更多规则,则使用下一个可用 ID。

    声明的 CRUSH 规则包含以下信息:

    • 规则名称

      • Description: 用于标识规则的唯一名称。
      • Value: stretch_rule
    • id:

      • Description:用于标识规则的唯一整数。
      • Value: 1
    • type

      • Description:描述存储驱动器复制或纠删代码的规则。
      • Value: replicated
    • min_size

      • Description: 如果池制作的副本数少于这个数字,CRUSH 不会选择这一规则。
      • Value: 1
    • max_size

      • Description: 如果池制作的副本数多于这个数字,CRUSH 不会选择这一规则。
      • Value: 10
    • step take DC1

      • Description:获取存储桶名称(DC1),并开始迭代树。
    • step chooseleaf firstn 2 type host

      • Description:选择给定类型的存储桶数量,本例中为位于 DC1 中的两个不同的主机。
    • step emit

      • Description: 输出当前的值并清除堆栈。通常在规则末尾使用,但也可用于从同一规则的不同树中选取。
    • step take DC2

      • Description:获取存储桶名称(DC2),并开始迭代树。
    • step chooseleaf firstn 2 type host

      • Description:选择给定类型的存储桶数量,本例中为两个位于 DC2 的不同主机。
    • step emit

      • Description: 输出当前的值并清除堆栈。通常在规则末尾使用,但也可用于从同一规则的不同树中选取。
  10. 从文件 /etc/ceph/crushmap.txt 中编译新的 CRUSH map,并将其转换为名为 /etc/ceph/crushmap2.bin 的二进制文件:

    $ crushtool -c /etc/ceph/crushmap.txt -o /etc/ceph/crushmap2.bin
  11. 注入我们创建回集群的新 crushmap:

    $ ceph osd setcrushmap -i /etc/ceph/crushmap2.bin

    输出示例:

    17
    注意

    数字 17 是一个计数器,它将根据您对 crush 映射所做的更改来增加(18,19 等)。

  12. 验证创建的扩展规则现已可供使用。

    ceph osd crush rule ls

    输出示例:

    replicated_rule
    stretch_rule
  13. 启用扩展群集模式。

    $ ceph mon enable_stretch_mode ceph7 stretch_rule datacenter

    在本例中,ceph7 是仲裁节点,stretch_rule 是在上一步中创建的 crush 规则,datacenter 是分开的存储桶。

  14. 验证我们的所有池正在使用我们在 Ceph 集群中创建的 stretch_rule CRUSH 规则:

    $ for pool in $(rados lspools);do echo -n "Pool: ${pool}; ";ceph osd pool get ${pool} crush_rule;done

    输出示例:

    Pool: device_health_metrics; crush_rule: stretch_rule
    Pool: cephfs.cephfs.meta; crush_rule: stretch_rule
    Pool: cephfs.cephfs.data; crush_rule: stretch_rule
    Pool: .rgw.root; crush_rule: stretch_rule
    Pool: default.rgw.log; crush_rule: stretch_rule
    Pool: default.rgw.control; crush_rule: stretch_rule
    Pool: default.rgw.meta; crush_rule: stretch_rule
    Pool: rbdpool; crush_rule: stretch_rule

    这表明正在运行的红帽 Ceph 存储扩展群集,现在具有仲裁模式。

Red Hat logoGithubRedditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

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

让开源更具包容性

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

關於紅帽

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

© 2024 Red Hat, Inc.