第 4 章 配置 Red Hat Ceph Storage 扩展集群
使用 cephadm
完全部署了红帽 Ceph 存储集群后,请使用以下步骤来配置扩展集群模式。新的扩展模式旨在处理两个站点情况。
步骤
使用 ceph mon dump 命令检查监视器所使用的当前选择策略。默认情况下,在 ceph 集群中,连接设置为经典。
ceph mon dump | grep election_strategy
输出示例:
dumped monmap epoch 9 election_strategy: 1
将 monitor 选举更改为连接性。
ceph mon set election_strategy connectivity
再次运行前面的 ceph mon dump 命令,以验证 election_strategy 值。
$ ceph mon dump | grep election_strategy
输出示例:
dumped monmap epoch 10 election_strategy: 3
要了解有关不同选择策略的更多信息,请参阅配置监控选举策略。
设置所有 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
验证每个监控器是否具有正确的位置。
$ 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}
通过安装
ceph-base
RPM 软件包来创建使用此 OSD 拓扑的 CRUSH 规则,以便使用crushtool
命令:$ dnf -y install ceph-base
要了解有关 CRUSH 规则集的更多信息,请参见 Ceph CRUSH 规则集。
从集群获取编译的 CRUSH map:
$ ceph osd getcrushmap > /etc/ceph/crushmap.bin
解译 CRUSH map,并将其转换为文本文件,以便能编辑它:
$ crushtool -d /etc/ceph/crushmap.bin -o /etc/ceph/crushmap.txt
编辑文件
/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: 输出当前的值并清除堆栈。通常在规则末尾使用,但也可用于从同一规则的不同树中选取。
从文件
/etc/ceph/crushmap.txt
中编译新的 CRUSH map,并将其转换为名为/etc/ceph/crushmap2.bin
的二进制文件:$ crushtool -c /etc/ceph/crushmap.txt -o /etc/ceph/crushmap2.bin
注入我们创建回集群的新 crushmap:
$ ceph osd setcrushmap -i /etc/ceph/crushmap2.bin
输出示例:
17
注意数字 17 是一个计数器,它将根据您对 crush 映射所做的更改来增加(18,19 等)。
验证创建的扩展规则现已可供使用。
ceph osd crush rule ls
输出示例:
replicated_rule stretch_rule
启用扩展群集模式。
$ ceph mon enable_stretch_mode ceph7 stretch_rule datacenter
在本例中,
ceph7
是仲裁节点,stretch_rule
是在上一步中创建的 crush 规则,datacenter
是分开的存储桶。验证我们的所有池正在使用我们在 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 存储扩展群集,现在具有仲裁模式。