4.3. 为守护进程设置 CRUSH 位置
在进入扩展模式之前,您需要通过将 CRUSH 位置设置为 Red Hat Ceph Storage 集群中的守护进程来准备集群。有两种方法可以做到这一点:
- 通过服务配置文件引导集群,其中位置作为部署的一部分添加到主机中。
-
在部署集群后,通过
ceph osd crush add-bucket和ceph osd crush move命令手动设置位置。
方法 1:引导集群
先决条件
- 对节点的根级别访问权限。
流程
如果要引导新存储集群,您可以创建服务配置
.yaml文件,该文件将节点添加到 Red Hat Ceph Storage 集群,并为应该运行该服务设置特定的标签:示例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 使用
--apply-spec选项引导存储集群:语法
cephadm bootstrap --apply-spec CONFIGURATION_FILE_NAME --mon-ip MONITOR_IP_ADDRESS --ssh-private-key PRIVATE_KEY --ssh-public-key PUBLIC_KEY --registry-url REGISTRY_URL --registry-username USER_NAME --registry-password PASSWORD
cephadm bootstrap --apply-spec CONFIGURATION_FILE_NAME --mon-ip MONITOR_IP_ADDRESS --ssh-private-key PRIVATE_KEY --ssh-public-key PUBLIC_KEY --registry-url REGISTRY_URL --registry-username USER_NAME --registry-password PASSWORDCopy to Clipboard Copied! Toggle word wrap Toggle overflow 示例
cephadm bootstrap --apply-spec initial-config.yaml --mon-ip 10.10.128.68 --ssh-private-key /home/ceph/.ssh/id_rsa --ssh-public-key /home/ceph/.ssh/id_rsa.pub --registry-url registry.redhat.io --registry-username myuser1 --registry-password mypassword1
[root@host01 ~]# cephadm bootstrap --apply-spec initial-config.yaml --mon-ip 10.10.128.68 --ssh-private-key /home/ceph/.ssh/id_rsa --ssh-public-key /home/ceph/.ssh/id_rsa.pub --registry-url registry.redhat.io --registry-username myuser1 --registry-password mypassword1Copy to Clipboard Copied! Toggle word wrap Toggle overflow 重要您可以在
cephadm bootstrap命令中使用不同的命令选项。但是,始终包含 use-apply-spec选项以使用服务配置文件并配置主机位置。
方法 2:在部署后设置位置
先决条件
- 对节点的根级别访问权限。
流程
添加两个存储桶,将非tiebreaker 监视器的位置设置为 CRUSH map,将 bucket 类型指定为
datacenter:语法
ceph osd crush add-bucket BUCKET_NAME BUCKET_TYPE
ceph osd crush add-bucket BUCKET_NAME BUCKET_TYPECopy to Clipboard Copied! Toggle word wrap Toggle overflow 示例
[ceph: root@host01 /]# ceph osd crush add-bucket DC1 datacenter [ceph: root@host01 /]# ceph osd crush add-bucket DC2 datacenter
[ceph: root@host01 /]# ceph osd crush add-bucket DC1 datacenter [ceph: root@host01 /]# ceph osd crush add-bucket DC2 datacenterCopy to Clipboard Copied! Toggle word wrap Toggle overflow 将存储桶移到
root=default下:语法
ceph osd crush move BUCKET_NAME root=default
ceph osd crush move BUCKET_NAME root=defaultCopy to Clipboard Copied! Toggle word wrap Toggle overflow 示例
[ceph: root@host01 /]# ceph osd crush move DC1 root=default [ceph: root@host01 /]# ceph osd crush move DC2 root=default
[ceph: root@host01 /]# ceph osd crush move DC1 root=default [ceph: root@host01 /]# ceph osd crush move DC2 root=defaultCopy to Clipboard Copied! Toggle word wrap Toggle overflow 根据所需的 CRUSH 放置移动 OSD 主机:
语法
ceph osd crush move HOST datacenter=DATACENTER
ceph osd crush move HOST datacenter=DATACENTERCopy to Clipboard Copied! Toggle word wrap Toggle overflow 示例
[ceph: root@host01 /]# ceph osd crush move host01 datacenter=DC1
[ceph: root@host01 /]# ceph osd crush move host01 datacenter=DC1Copy to Clipboard Copied! Toggle word wrap Toggle overflow
4.3.1. 进入扩展模式 复制链接链接已复制到粘贴板!
新的扩展模式旨在处理两个站点。在 2 个站点集群中,组件可用性中断的风险较低。
先决条件
- 对节点的根级别访问权限。
- CRUSH 位置设置为主机。
流程
设置每个 monitor 的位置,与 CRUSH map 匹配:
语法
ceph mon set_location HOST datacenter=DATACENTER
ceph mon set_location HOST datacenter=DATACENTERCopy to Clipboard Copied! Toggle word wrap Toggle overflow 示例
[ceph: root@host01 /]# ceph mon set_location host01 datacenter=DC1 [ceph: root@host01 /]# ceph mon set_location host02 datacenter=DC1 [ceph: root@host01 /]# ceph mon set_location host04 datacenter=DC2 [ceph: root@host01 /]# ceph mon set_location host05 datacenter=DC2 [ceph: root@host01 /]# ceph mon set_location host07 datacenter=DC3
[ceph: root@host01 /]# ceph mon set_location host01 datacenter=DC1 [ceph: root@host01 /]# ceph mon set_location host02 datacenter=DC1 [ceph: root@host01 /]# ceph mon set_location host04 datacenter=DC2 [ceph: root@host01 /]# ceph mon set_location host05 datacenter=DC2 [ceph: root@host01 /]# ceph mon set_location host07 datacenter=DC3Copy to Clipboard Copied! Toggle word wrap Toggle overflow 生成 CRUSH 规则,它将两个副本放在每个数据中心上:
语法
ceph osd getcrushmap > COMPILED_CRUSHMAP_FILENAME crushtool -d COMPILED_CRUSHMAP_FILENAME -o DECOMPILED_CRUSHMAP_FILENAME
ceph osd getcrushmap > COMPILED_CRUSHMAP_FILENAME crushtool -d COMPILED_CRUSHMAP_FILENAME -o DECOMPILED_CRUSHMAP_FILENAMECopy to Clipboard Copied! Toggle word wrap Toggle overflow 示例
[ceph: root@host01 /]# ceph osd getcrushmap > crush.map.bin [ceph: root@host01 /]# crushtool -d crush.map.bin -o crush.map.txt
[ceph: root@host01 /]# ceph osd getcrushmap > crush.map.bin [ceph: root@host01 /]# crushtool -d crush.map.bin -o crush.map.txtCopy to Clipboard Copied! Toggle word wrap Toggle overflow 编辑 decompiled CRUSH map 文件以添加新规则:
示例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 注意此规则使集群对数据中心
DC1具有 read-affinity。因此,所有读取或写入都通过放置在DC1中的 Ceph OSD 进行。如果这不是理想的要求,并在区间平均分配读取或写入,CRUSH 规则如下:
示例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 在此规则中,数据中心会随机选择,并自动选择。
如需有关
firstn和indep选项的更多信息,请参阅 CRUSH 规则。
注入 CRUSH map,使规则可供集群使用:
语法
crushtool -c DECOMPILED_CRUSHMAP_FILENAME -o COMPILED_CRUSHMAP_FILENAME ceph osd setcrushmap -i COMPILED_CRUSHMAP_FILENAME
crushtool -c DECOMPILED_CRUSHMAP_FILENAME -o COMPILED_CRUSHMAP_FILENAME ceph osd setcrushmap -i COMPILED_CRUSHMAP_FILENAMECopy to Clipboard Copied! Toggle word wrap Toggle overflow 示例
[ceph: root@host01 /]# crushtool -c crush.map.txt -o crush2.map.bin [ceph: root@host01 /]# ceph osd setcrushmap -i crush2.map.bin
[ceph: root@host01 /]# crushtool -c crush.map.txt -o crush2.map.bin [ceph: root@host01 /]# ceph osd setcrushmap -i crush2.map.binCopy to Clipboard Copied! Toggle word wrap Toggle overflow 如果您没有以连接模式运行 monitor,请将选择策略设置为
connectivity:示例
[ceph: root@host01 /]# ceph mon set election_strategy connectivity
[ceph: root@host01 /]# ceph mon set election_strategy connectivityCopy to Clipboard Copied! Toggle word wrap Toggle overflow 通过将 tiebreaker 监控的位置设置为在数据中心间分割,进入扩展模式:
语法
ceph mon set_location HOST datacenter=DATACENTER ceph mon enable_stretch_mode HOST stretch_rule datacenter
ceph mon set_location HOST datacenter=DATACENTER ceph mon enable_stretch_mode HOST stretch_rule datacenterCopy to Clipboard Copied! Toggle word wrap Toggle overflow 示例
[ceph: root@host01 /]# ceph mon set_location host07 datacenter=DC3 [ceph: root@host01 /]# ceph mon enable_stretch_mode host07 stretch_rule datacenter
[ceph: root@host01 /]# ceph mon set_location host07 datacenter=DC3 [ceph: root@host01 /]# ceph mon enable_stretch_mode host07 stretch_rule datacenterCopy to Clipboard Copied! Toggle word wrap Toggle overflow 在本例中,监控器
mon.host07是 tiebreaker。重要tiebreaker monitor 的位置应该与您之前设置非tiebreaker 监视器的数据中心不同。在上例中,它是数据中心
DC3。重要当您尝试进入扩展模式时,不要将此数据中心添加到 CRUSH map 中,因为它会产生以下错误:
Error EINVAL: there are 3 datacenters in the cluster but stretch mode currently only works with 2!
Error EINVAL: there are 3 datacenters in the cluster but stretch mode currently only works with 2!Copy to Clipboard Copied! Toggle word wrap Toggle overflow 注意如果要编写用于部署 Ceph 的工具,您可以在引导监控器时使用 new
-set-crush-location选项,而不是运行ceph mon set_location命令。此选项只接受单个bucket=location对,如ceph-mon --set-crush-location 'datacenter=DC1',它必须与运行enable_stretch_mode命令时指定的 bucket 类型匹配。验证扩展模式是否已成功启用:
示例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow stretch_mode_enabled应设为true。您还可以查看扩展存储桶的数量、扩展模式存储桶以及扩展模式是否降级或恢复。验证监控器是否在适当的位置:
示例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 您还可以看到哪个 monitor 是 tiebreaker,以及 monitor 选择策略。
4.3.2. 为扩展模式配置 CRUSH map 复制链接链接已复制到粘贴板!
使用此信息为扩展模式配置 CRUSH map。
先决条件
在开始前,请确保您有以下先决条件:
- 对节点的根级别访问权限。
- CRUSH 位置设置为主机。
流程
通过安装 ceph-base RPM 软件包来创建使用此 OSD crush 拓扑的 CRUSH 规则,以便使用
crushtool命令。语法
dnf -y install ceph-base
dnf -y install ceph-baseCopy to Clipboard Copied! Toggle word wrap Toggle overflow 从集群获取编译的 CRUSH map。
语法
ceph osd getcrushmap > /etc/ceph/crushmap.bin
ceph osd getcrushmap > /etc/ceph/crushmap.binCopy to Clipboard Copied! Toggle word wrap Toggle overflow 解译 CRUSH map,并将它转换为文本文件以对其进行编辑。
语法
crushtool -d /etc/ceph/crushmap.bin -o /etc/ceph/crushmap.txt
crushtool -d /etc/ceph/crushmap.bin -o /etc/ceph/crushmap.txtCopy to Clipboard Copied! Toggle word wrap Toggle overflow 通过编辑文件末尾的
/etc/ceph/crushmap.txt,将以下规则添加到 CRUSH map。此规则在数据中心中平均分配读取和写入。语法
Copy to Clipboard Copied! Toggle word wrap Toggle overflow (可选)使集群与数据中心 1 具有读/写关联性。
语法
Copy to Clipboard Copied! Toggle word wrap Toggle overflow Copy to Clipboard Copied! Toggle word wrap Toggle overflow
从
/etc/ceph/crushmap.txt编译新的 CRUSH map,并将其转换为二进制文件/etc/ceph/crushmap2.bin。语法
crushtool -c /path/to/crushmap.txt -o /path/to/crushmap2.bin
crushtool -c /path/to/crushmap.txt -o /path/to/crushmap2.binCopy to Clipboard Copied! Toggle word wrap Toggle overflow 示例
[ceph: root@host01 /]# crushtool -c /etc/ceph/crushmap.txt -o /etc/ceph/crushmap2.bin
[ceph: root@host01 /]# crushtool -c /etc/ceph/crushmap.txt -o /etc/ceph/crushmap2.binCopy to Clipboard Copied! Toggle word wrap Toggle overflow 将新创建的 CRUSH map 重新注入集群。
语法
ceph osd setcrushmap -i /path/to/compiled_crushmap
ceph osd setcrushmap -i /path/to/compiled_crushmapCopy to Clipboard Copied! Toggle word wrap Toggle overflow 示例
[ceph: root@host01 /]# ceph osd setcrushmap -i /path/to/compiled_crushmap 17
[ceph: root@host01 /]# ceph osd setcrushmap -i /path/to/compiled_crushmap 17Copy to Clipboard Copied! Toggle word wrap Toggle overflow 注意根据对 CRUSH 映射所做的更改,数字 17 是一个计数器,增加(18、19 等)。
验证
验证新创建的 stretch_rule 可供使用。
语法
ceph osd crush rule ls
ceph osd crush rule ls
示例
[ceph: root@host01 /]# ceph osd crush rule ls replicated_rule stretch_rule
[ceph: root@host01 /]# ceph osd crush rule ls
replicated_rule
stretch_rule
4.3.2.1. 进入扩展模式 复制链接链接已复制到粘贴板!
扩展模式旨在处理两个站点。对于带有 2 个站点集群的组件可用性中断,存在更小的风险。
先决条件
在开始前,请确保您有以下先决条件:
- 对节点的根级别访问权限。
- CRUSH 位置设置为主机。
- 配置为包含扩展规则的 CRUSH map。
- 集群中没有纠删代码池。
- 两个站点的权重是相同的。
流程
检查监视器所使用的当前选择策略。
语法
ceph mon dump | grep election_strategy
ceph mon dump | grep election_strategyCopy to Clipboard Copied! Toggle word wrap Toggle overflow 注意默认情况下,Ceph 集群
election_strategy设置为1。示例
[ceph: root@host01 /]# ceph mon dump | grep election_strategy dumped monmap epoch 9 election_strategy: 1
[ceph: root@host01 /]# ceph mon dump | grep election_strategy dumped monmap epoch 9 election_strategy: 1Copy to Clipboard Copied! Toggle word wrap Toggle overflow 将选择策略更改为
连接。语法
ceph mon set election_strategy connectivity
ceph mon set election_strategy connectivityCopy to Clipboard Copied! Toggle word wrap Toggle overflow 有关配置选择策略的更多信息,请参阅配置监控选择策略。
使用
ceph mon dump命令,验证选择策略是否已更新为3。示例
[ceph: root@host01 /]# ceph mon dump | grep election_strategy dumped monmap epoch 22 election_strategy: 3
[ceph: root@host01 /]# ceph mon dump | grep election_strategy dumped monmap epoch 22 election_strategy: 3Copy to Clipboard Copied! Toggle word wrap Toggle overflow 设置 tiebreaker 监视器的位置,使其划分到数据中心。
语法
ceph mon set_location TIEBREAKER_HOST datacenter=DC3
ceph mon set_location TIEBREAKER_HOST datacenter=DC3Copy to Clipboard Copied! Toggle word wrap Toggle overflow 示例
[ceph: root@host01 /]# ceph mon set_location host07 datacenter=DC3
[ceph: root@host01 /]# ceph mon set_location host07 datacenter=DC3Copy to Clipboard Copied! Toggle word wrap Toggle overflow 验证 tiebreaker 监控器是否如预期设置。
语法
ceph mon dump
ceph mon dumpCopy to Clipboard Copied! Toggle word wrap Toggle overflow 示例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 进入扩展模式。
语法
ceph mon enable_stretch_mode TIEBREAKER_HOST STRETCH_RULE STRETCH_BUCKET
ceph mon enable_stretch_mode TIEBREAKER_HOST STRETCH_RULE STRETCH_BUCKETCopy to Clipboard Copied! Toggle word wrap Toggle overflow 在以下示例中:
- tiebreaker 节点设置为 host07。
- 扩展规则为 stretch_rule,如 中创建的。
- 扩展存储桶被设置为数据中心。
[ceph: root@host01 /]# ceph mon enable_stretch_mode host07 stretch_rule datacenter
[ceph: root@host01 /]# ceph mon enable_stretch_mode host07 stretch_rule datacenter
验证
通过继续 CROSREF 来验证扩展模式是否已正确实现。
4.3.2.2. 验证扩展模式 复制链接链接已复制到粘贴板!
使用此信息来验证扩展模式是否使用实施的 CRUSH 规则正确创建。
流程
验证所有池正在使用 Ceph 集群中创建的 CRUSH 规则。在这些示例中,CRUSH 规则设置为
stretch_rule,具体根据 在为扩展模式 配置 CRUSH 映射 时创建的设置。语法
for pool in $(rados lspools);do echo -n "Pool: ${pool}; ";ceph osd pool get ${pool} crush_rule;donefor pool in $(rados lspools);do echo -n "Pool: ${pool}; ";ceph osd pool get ${pool} crush_rule;doneCopy to Clipboard Copied! Toggle word wrap Toggle overflow 示例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 验证是否启用了扩展模式。确保
stretch_mode_enabled设置为true。语法
ceph osd dump
ceph osd dumpCopy to Clipboard Copied! Toggle word wrap Toggle overflow 输出包括以下信息:
- stretch_mode_enabled
-
如果启用了扩展模式,则设置为
true。 - stretch_bucket_count
- 使用 OSD 的数据中心数量。
- degraded_stretch_mode
-
如果没有降级,则输出 0。
如果扩展模式降级,这会输出 up 站点的数量。 - recovering_stretch_mode
-
如果没有恢复,则输出 0。
如果扩展模式正在恢复,则输出为1。 - stretch_mode_bucket
为每个 CRUSH bucket 类型设置的唯一值。对于数据中心,这个值通常设置为
8。示例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
使用
ceph mon dump来验证扩展模式是否使用 mon map。确保以下内容:
-
stretch_mode_enabled设置为1 -
正确的 mon 主机被设置为
tiebreaker_mon 将正确的 mon 主机设置为
disallowed_leaders语法
ceph mon dump
ceph mon dumpCopy to Clipboard Copied! Toggle word wrap Toggle overflow 示例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
-