第 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-baseRPM 软件包来创建使用此 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.txtrule 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_ruleCRUSH 规则:$ 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 存储扩展群集,现在具有仲裁模式。