3.5. 部署 Red Hat Ceph Storage
3.5.1. 节点预部署步骤
在安装 Red Hat Ceph Storage Ceph 集群前,请执行以下步骤来满足所有必要的要求。
将所有节点注册到 Red Hat Network 或 Red Hat Satellite 中,并订阅到有效的池:
subscription-manager register subscription-manager subscribe --pool=8a8XXXXXX9e0
subscription-manager register subscription-manager subscribe --pool=8a8XXXXXX9e0
Copy to Clipboard Copied! 为以下软件仓库启用 Ceph 集群中的所有节点的访问权限:
-
rhel9-for-x86_64-baseos-rpms
rhel9-for-x86_64-appstream-rpms
subscription-manager repos --disable="*" --enable="rhel9-for-x86_64-baseos-rpms" --enable="rhel9-for-x86_64-appstream-rpms"
subscription-manager repos --disable="*" --enable="rhel9-for-x86_64-baseos-rpms" --enable="rhel9-for-x86_64-appstream-rpms"
Copy to Clipboard Copied!
-
如果需要,将操作系统 RPM 更新至最新版本并重新引导:
dnf update -y reboot
dnf update -y reboot
Copy to Clipboard Copied! 从集群中选择节点作为 bootstrap 节点。
ceph1
是本例中的 bootstrap 节点。仅在 bootstrap 节点
ceph1
上,启用ansible-2.9-for-rhel-9-x86_64-rpms
和rhceph-6-tools-for-rhel-9-x86_64-rpms
仓库:subscription-manager repos --enable="ansible-2.9-for-rhel-9-x86_64-rpms" --enable="rhceph-6-tools-for-rhel-9-x86_64-rpms"
subscription-manager repos --enable="ansible-2.9-for-rhel-9-x86_64-rpms" --enable="rhceph-6-tools-for-rhel-9-x86_64-rpms"
Copy to Clipboard Copied! 在所有主机中使用裸机/短主机名配置
主机名
。hostnamectl set-hostname <short_name>
hostnamectl set-hostname <short_name>
Copy to Clipboard Copied! 使用 cephadm 验证用于部署 Red Hat Ceph Storage 的主机名配置。
hostname
$ hostname
Copy to Clipboard Copied! 输出示例:
ceph1
ceph1
Copy to Clipboard Copied! 使用 DNS 域名设置 DOMAIN 变量,修改 /etc/hosts 文件并将 fqdn 条目添加到 127.0.0.1 IP。
DOMAIN="example.domain.com" cat <<EOF >/etc/hosts 127.0.0.1 $(hostname).${DOMAIN} $(hostname) localhost localhost.localdomain localhost4 localhost4.localdomain4 ::1 $(hostname).${DOMAIN} $(hostname) localhost6 localhost6.localdomain6 EOF
DOMAIN="example.domain.com" cat <<EOF >/etc/hosts 127.0.0.1 $(hostname).${DOMAIN} $(hostname) localhost localhost.localdomain localhost4 localhost4.localdomain4 ::1 $(hostname).${DOMAIN} $(hostname) localhost6 localhost6.localdomain6 EOF
Copy to Clipboard Copied! 使用
hostname -f
选项通过fqdn
检查长主机名。hostname -f
$ hostname -f
Copy to Clipboard Copied! 输出示例:
ceph1.example.domain.com
ceph1.example.domain.com
Copy to Clipboard Copied! 注意要了解更多有关需要这些更改的信息,请参阅完全限定域名和裸机主机名。
在 bootstrap 节点上执行以下步骤。在我们的示例中,bootstrap 节点为
ceph1
。安装
cephadm-ansible
RPM 软件包:sudo dnf install -y cephadm-ansible
$ sudo dnf install -y cephadm-ansible
Copy to Clipboard Copied! 重要要运行 ansible playbook,您必须有
ssh
免密码访问配置 Red Hat Ceph Storage 集群的所有节点。确保配置的用户(如deployment-user
)具有可调用sudo
命令的 root 特权,而无需输入密码。要使用自定义密钥,请配置所选用户(如
deployment-user
)ssh 配置文件以指定将用于通过 ssh 连接到节点的 id/key:cat <<EOF > ~/.ssh/config Host ceph* User deployment-user IdentityFile ~/.ssh/ceph.pem EOF
cat <<EOF > ~/.ssh/config Host ceph* User deployment-user IdentityFile ~/.ssh/ceph.pem EOF
Copy to Clipboard Copied! 构建 ansible 清单
cat <<EOF > /usr/share/cephadm-ansible/inventory ceph1 ceph2 ceph3 ceph4 ceph5 ceph6 ceph7 [admin] ceph1 ceph4 EOF
cat <<EOF > /usr/share/cephadm-ansible/inventory ceph1 ceph2 ceph3 ceph4 ceph5 ceph6 ceph7 [admin] ceph1 ceph4 EOF
Copy to Clipboard Copied! 注意此处,属于两个不同的数据中心的主机 (
Ceph1
andCeph4
) 配置为清单文件中的 [admin] 组的一部分,并使用cephadm
标记为_admin
。每个管理节点都会在 bootstrap 过程中收到 admin ceph 密钥环,以便在一个数据中心停机时,我们都可以使用其他可用的管理节点进行检查。在运行 pre-flight playbook 前,验证
ansible
是否可以使用 ping 模块访问所有节点。ansible -i /usr/share/cephadm-ansible/inventory -m ping all -b
$ ansible -i /usr/share/cephadm-ansible/inventory -m ping all -b
Copy to Clipboard Copied! 输出示例:
ceph6 | SUCCESS => { "ansible_facts": { "discovered_interpreter_python": "/usr/libexec/platform-python" }, "changed": false, "ping": "pong" } ceph4 | SUCCESS => { "ansible_facts": { "discovered_interpreter_python": "/usr/libexec/platform-python" }, "changed": false, "ping": "pong" } ceph3 | SUCCESS => { "ansible_facts": { "discovered_interpreter_python": "/usr/libexec/platform-python" }, "changed": false, "ping": "pong" } ceph2 | SUCCESS => { "ansible_facts": { "discovered_interpreter_python": "/usr/libexec/platform-python" }, "changed": false, "ping": "pong" } ceph5 | SUCCESS => { "ansible_facts": { "discovered_interpreter_python": "/usr/libexec/platform-python" }, "changed": false, "ping": "pong" } ceph1 | SUCCESS => { "ansible_facts": { "discovered_interpreter_python": "/usr/libexec/platform-python" }, "changed": false, "ping": "pong" } ceph7 | SUCCESS => { "ansible_facts": { "discovered_interpreter_python": "/usr/libexec/platform-python" }, "changed": false, "ping": "pong" }
ceph6 | SUCCESS => { "ansible_facts": { "discovered_interpreter_python": "/usr/libexec/platform-python" }, "changed": false, "ping": "pong" } ceph4 | SUCCESS => { "ansible_facts": { "discovered_interpreter_python": "/usr/libexec/platform-python" }, "changed": false, "ping": "pong" } ceph3 | SUCCESS => { "ansible_facts": { "discovered_interpreter_python": "/usr/libexec/platform-python" }, "changed": false, "ping": "pong" } ceph2 | SUCCESS => { "ansible_facts": { "discovered_interpreter_python": "/usr/libexec/platform-python" }, "changed": false, "ping": "pong" } ceph5 | SUCCESS => { "ansible_facts": { "discovered_interpreter_python": "/usr/libexec/platform-python" }, "changed": false, "ping": "pong" } ceph1 | SUCCESS => { "ansible_facts": { "discovered_interpreter_python": "/usr/libexec/platform-python" }, "changed": false, "ping": "pong" } ceph7 | SUCCESS => { "ansible_facts": { "discovered_interpreter_python": "/usr/libexec/platform-python" }, "changed": false, "ping": "pong" }
Copy to Clipboard Copied! -
进入
/usr/share/cephadm-ansible
目录。 使用相对文件路径运行 ansible-playbook。
ansible-playbook -i /usr/share/cephadm-ansible/inventory /usr/share/cephadm-ansible/cephadm-preflight.yml --extra-vars "ceph_origin=rhcs"
$ ansible-playbook -i /usr/share/cephadm-ansible/inventory /usr/share/cephadm-ansible/cephadm-preflight.yml --extra-vars "ceph_origin=rhcs"
Copy to Clipboard Copied! preflight playbook Ansible playbook 配置 RHCS
dnf
存储库,并为引导准备存储集群。它还安装 podman、lvm2、chronyd 和 cephadm。cephadm-ansible
和cephadm-preflight.yml
的默认位置为/usr/share/cephadm-ansible
。如需更多信息,请参阅 运行 preflight playbook
3.5.2. 使用 cephadm 实用程序进行集群引导和服务部署
cephadm 实用程序将安装并启动一个单独的 Ceph Monitor 守护进程,以及运行 cephadm bootstrap 命令本地节点上的新 Red Hat Ceph Storage 集群的 Ceph 管理器守护进程。
在本指南中,我们将使用集群规格 yaml 文件,在一个步骤中使用集群规格 yaml 来部署所有需要的 Red Hat Ceph Storage 服务。
如果您在部署过程中发现问题,通过将部署分成两个步骤来更加轻松地对错误进行故障排除:
- bootstrap
- 服务部署
有关 bootstrap 过程的更多信息 ,请参阅引导新存储集群。
步骤
使用 json 文件创建 json 文件以针对容器 registry 进行身份验证,如下所示:
cat <<EOF > /root/registry.json { "url":"registry.redhat.io", "username":"User", "password":"Pass" } EOF
$ cat <<EOF > /root/registry.json { "url":"registry.redhat.io", "username":"User", "password":"Pass" } EOF
Copy to Clipboard Copied! 创建一个
cluster-spec.yaml
,将节点添加到 Red Hat Ceph Storage 集群,并为服务设置应当运行下表 3.1 的特定标签。cat <<EOF > /root/cluster-spec.yaml service_type: host addr: 10.0.40.78 ## <XXX.XXX.XXX.XXX> hostname: ceph1 ## <ceph-hostname-1> location: root: default datacenter: DC1 labels: - osd - mon - mgr --- service_type: host addr: 10.0.40.35 hostname: ceph2 location: datacenter: DC1 labels: - osd - mon --- service_type: host addr: 10.0.40.24 hostname: ceph3 location: datacenter: DC1 labels: - osd - mds - rgw --- service_type: host addr: 10.0.40.185 hostname: ceph4 location: root: default datacenter: DC2 labels: - osd - mon - mgr --- service_type: host addr: 10.0.40.88 hostname: ceph5 location: datacenter: DC2 labels: - osd - mon --- service_type: host addr: 10.0.40.66 hostname: ceph6 location: datacenter: DC2 labels: - osd - mds - rgw --- service_type: host addr: 10.0.40.221 hostname: ceph7 labels: - mon --- service_type: mon placement: label: "mon" --- service_type: mds service_id: cephfs placement: label: "mds" --- service_type: mgr service_name: mgr placement: label: "mgr" --- service_type: osd service_id: all-available-devices service_name: osd.all-available-devices placement: label: "osd" spec: data_devices: all: true --- service_type: rgw service_id: objectgw service_name: rgw.objectgw placement: count: 2 label: "rgw" spec: rgw_frontend_port: 8080 EOF
cat <<EOF > /root/cluster-spec.yaml service_type: host addr: 10.0.40.78 ## <XXX.XXX.XXX.XXX> hostname: ceph1 ## <ceph-hostname-1> location: root: default datacenter: DC1 labels: - osd - mon - mgr --- service_type: host addr: 10.0.40.35 hostname: ceph2 location: datacenter: DC1 labels: - osd - mon --- service_type: host addr: 10.0.40.24 hostname: ceph3 location: datacenter: DC1 labels: - osd - mds - rgw --- service_type: host addr: 10.0.40.185 hostname: ceph4 location: root: default datacenter: DC2 labels: - osd - mon - mgr --- service_type: host addr: 10.0.40.88 hostname: ceph5 location: datacenter: DC2 labels: - osd - mon --- service_type: host addr: 10.0.40.66 hostname: ceph6 location: datacenter: DC2 labels: - osd - mds - rgw --- service_type: host addr: 10.0.40.221 hostname: ceph7 labels: - mon --- service_type: mon placement: label: "mon" --- service_type: mds service_id: cephfs placement: label: "mds" --- service_type: mgr service_name: mgr placement: label: "mgr" --- service_type: osd service_id: all-available-devices service_name: osd.all-available-devices placement: label: "osd" spec: data_devices: all: true --- service_type: rgw service_id: objectgw service_name: rgw.objectgw placement: count: 2 label: "rgw" spec: rgw_frontend_port: 8080 EOF
Copy to Clipboard Copied! 使用从 bootstrap 节点配置的 Red Hat Ceph Storage 公共网络,检索 NIC 的 IP。将
10.0.40.0
替换为您在 ceph 公共网络中定义的子网后,执行以下命令。ip a | grep 10.0.40
$ ip a | grep 10.0.40
Copy to Clipboard Copied! 输出示例:
10.0.40.78
10.0.40.78
Copy to Clipboard Copied! 以 root 用户身份在将作为集群中初始 monitor 节点的节点运行
Cephadm
bootstrap 命令。IP_ADDRESS
选项是您用于运行cephadm bootstrap
命令的节点 IP 地址。注意如果您配置了不同的用户而不是
root
进行免密码 SSH 访问,则使用带有cepadm bootstrap
命令的--ssh-user=
标志。如果您使用非 default/id_rsa ssh 密钥名称,请使用
--ssh-private-key
和--ssh-public-key
选项及cephadm
命令。cephadm bootstrap --ssh-user=deployment-user --mon-ip 10.0.40.78 --apply-spec /root/cluster-spec.yaml --registry-json /root/registry.json
$ cephadm bootstrap --ssh-user=deployment-user --mon-ip 10.0.40.78 --apply-spec /root/cluster-spec.yaml --registry-json /root/registry.json
Copy to Clipboard Copied! 重要如果本地节点使用完全限定域名 (FQDN),则将
--allow-fqdn-hostname
选项添加到命令行上的cephadm bootstrap
。bootstrap 完成后,您将看到来自之前 cephadm bootstrap 命令的以下输出:
You can access the Ceph CLI with: sudo /usr/sbin/cephadm shell --fsid dd77f050-9afe-11ec-a56c-029f8148ea14 -c /etc/ceph/ceph.conf -k /etc/ceph/ceph.client.admin.keyring Consider enabling telemetry to help improve Ceph: ceph telemetry on For more information see: https://docs.ceph.com/docs/pacific/mgr/telemetry/
You can access the Ceph CLI with: sudo /usr/sbin/cephadm shell --fsid dd77f050-9afe-11ec-a56c-029f8148ea14 -c /etc/ceph/ceph.conf -k /etc/ceph/ceph.client.admin.keyring Consider enabling telemetry to help improve Ceph: ceph telemetry on For more information see: https://docs.ceph.com/docs/pacific/mgr/telemetry/
Copy to Clipboard Copied! 使用 ceph1 中的 ceph cli 客户端,验证 Red Hat Ceph Storage 集群部署的状态:
ceph -s
$ ceph -s
Copy to Clipboard Copied! 输出示例:
cluster: id: 3a801754-e01f-11ec-b7ab-005056838602 health: HEALTH_OK services: mon: 5 daemons, quorum ceph1,ceph2,ceph4,ceph5,ceph7 (age 4m) mgr: ceph1.khuuot(active, since 5m), standbys: ceph4.zotfsp osd: 12 osds: 12 up (since 3m), 12 in (since 4m) rgw: 2 daemons active (2 hosts, 1 zones) data: pools: 5 pools, 107 pgs objects: 191 objects, 5.3 KiB usage: 105 MiB used, 600 GiB / 600 GiB avail 105 active+clean
cluster: id: 3a801754-e01f-11ec-b7ab-005056838602 health: HEALTH_OK services: mon: 5 daemons, quorum ceph1,ceph2,ceph4,ceph5,ceph7 (age 4m) mgr: ceph1.khuuot(active, since 5m), standbys: ceph4.zotfsp osd: 12 osds: 12 up (since 3m), 12 in (since 4m) rgw: 2 daemons active (2 hosts, 1 zones) data: pools: 5 pools, 107 pgs objects: 191 objects, 5.3 KiB usage: 105 MiB used, 600 GiB / 600 GiB avail 105 active+clean
Copy to Clipboard Copied! 注意启动所有服务可能需要几分钟时间。
在您未配置任何 OSD 时,获取全局恢复事件是正常的。
您可以使用
ceph orch ps
和ceph orch ls
来进一步检查服务的状态。验证所有节点是否是
cephadm
集群的一部分。ceph orch host ls
$ ceph orch host ls
Copy to Clipboard Copied! 输出示例:
HOST ADDR LABELS STATUS ceph1 10.0.40.78 _admin osd mon mgr ceph2 10.0.40.35 osd mon ceph3 10.0.40.24 osd mds rgw ceph4 10.0.40.185 osd mon mgr ceph5 10.0.40.88 osd mon ceph6 10.0.40.66 osd mds rgw ceph7 10.0.40.221 mon
HOST ADDR LABELS STATUS ceph1 10.0.40.78 _admin osd mon mgr ceph2 10.0.40.35 osd mon ceph3 10.0.40.24 osd mds rgw ceph4 10.0.40.185 osd mon mgr ceph5 10.0.40.88 osd mon ceph6 10.0.40.66 osd mds rgw ceph7 10.0.40.221 mon
Copy to Clipboard Copied! 注意您可以直接从主机运行 Ceph 命令,因为
ceph1
在cephadm-ansible
清单中配置,作为 [admin] 组的一部分。Ceph 管理密钥在cephadm bootstrap
过程中复制到主机。检查数据中心的 Ceph 监控服务的当前位置。
ceph orch ps | grep mon | awk '{print $1 " " $2}'
$ ceph orch ps | grep mon | awk '{print $1 " " $2}'
Copy to Clipboard Copied! 输出示例:
mon.ceph1 ceph1 mon.ceph2 ceph2 mon.ceph4 ceph4 mon.ceph5 ceph5 mon.ceph7 ceph7
mon.ceph1 ceph1 mon.ceph2 ceph2 mon.ceph4 ceph4 mon.ceph5 ceph5 mon.ceph7 ceph7
Copy to Clipboard Copied! 检查数据中心的 Ceph 管理器服务的当前位置。
ceph orch ps | grep mgr | awk '{print $1 " " $2}'
$ ceph orch ps | grep mgr | awk '{print $1 " " $2}'
Copy to Clipboard Copied! 输出示例:
mgr.ceph2.ycgwyz ceph2 mgr.ceph5.kremtt ceph5
mgr.ceph2.ycgwyz ceph2 mgr.ceph5.kremtt ceph5
Copy to Clipboard Copied! 检查 ceph osd crush map 布局,以确保每个主机都配置了 OSD,其状态为
UP
。此外,再次检查每个节点在表 3.1 中指定的右侧数据中心 bucket 下。ceph osd tree
$ ceph osd tree
Copy to Clipboard Copied! 输出示例:
ID CLASS WEIGHT TYPE NAME STATUS REWEIGHT PRI-AFF -1 0.87900 root default -16 0.43950 datacenter DC1 -11 0.14650 host ceph1 2 ssd 0.14650 osd.2 up 1.00000 1.00000 -3 0.14650 host ceph2 3 ssd 0.14650 osd.3 up 1.00000 1.00000 -13 0.14650 host ceph3 4 ssd 0.14650 osd.4 up 1.00000 1.00000 -17 0.43950 datacenter DC2 -5 0.14650 host ceph4 0 ssd 0.14650 osd.0 up 1.00000 1.00000 -9 0.14650 host ceph5 1 ssd 0.14650 osd.1 up 1.00000 1.00000 -7 0.14650 host ceph6 5 ssd 0.14650 osd.5 up 1.00000 1.00000
ID CLASS WEIGHT TYPE NAME STATUS REWEIGHT PRI-AFF -1 0.87900 root default -16 0.43950 datacenter DC1 -11 0.14650 host ceph1 2 ssd 0.14650 osd.2 up 1.00000 1.00000 -3 0.14650 host ceph2 3 ssd 0.14650 osd.3 up 1.00000 1.00000 -13 0.14650 host ceph3 4 ssd 0.14650 osd.4 up 1.00000 1.00000 -17 0.43950 datacenter DC2 -5 0.14650 host ceph4 0 ssd 0.14650 osd.0 up 1.00000 1.00000 -9 0.14650 host ceph5 1 ssd 0.14650 osd.1 up 1.00000 1.00000 -7 0.14650 host ceph6 5 ssd 0.14650 osd.5 up 1.00000 1.00000
Copy to Clipboard Copied! 创建并启用新的 RDB 块池。
ceph osd pool create 32 32 ceph osd pool application enable rbdpool rbd
$ ceph osd pool create 32 32 $ ceph osd pool application enable rbdpool rbd
Copy to Clipboard Copied! 注意命令末尾的数字 32 是分配给这个池的 PG 数量。PG 数量可能会因集群中的 OSD 数量、使用池的预期%的不同而有所不同。您可以使用以下计算器来确定所需的 PG 数量:Ceph Placement Groups(PG)per Pool Calculator。
验证 RBD 池已创建好。
ceph osd lspools | grep rbdpool
$ ceph osd lspools | grep rbdpool
Copy to Clipboard Copied! 输出示例:
3 rbdpool
3 rbdpool
Copy to Clipboard Copied! 验证 MDS 服务是否处于活动状态,并且每个数据中心上有一个服务。
ceph orch ps | grep mds
$ ceph orch ps | grep mds
Copy to Clipboard Copied! 输出示例:
mds.cephfs.ceph3.cjpbqo ceph3 running (17m) 117s ago 17m 16.1M - 16.2.9 mds.cephfs.ceph6.lqmgqt ceph6 running (17m) 117s ago 17m 16.1M - 16.2.9
mds.cephfs.ceph3.cjpbqo ceph3 running (17m) 117s ago 17m 16.1M - 16.2.9 mds.cephfs.ceph6.lqmgqt ceph6 running (17m) 117s ago 17m 16.1M - 16.2.9
Copy to Clipboard Copied! 创建 CephFS 卷。
ceph fs volume create cephfs
$ ceph fs volume create cephfs
Copy to Clipboard Copied! 注意ceph fs volume create
命令还会创建所需的数据和 meta CephFS 池。有关更多信息,请参阅配置和挂载 Ceph 文件系统。检查
Ceph
状态,以验证 MDS 守护进程的部署方式。确保状态为 active,其中ceph6
是这个文件系统的主 MDS,ceph3
是次 MDS。ceph fs status
$ ceph fs status
Copy to Clipboard Copied! 输出示例:
cephfs - 0 clients ====== RANK STATE MDS ACTIVITY DNS INOS DIRS CAPS 0 active cephfs.ceph6.ggjywj Reqs: 0 /s 10 13 12 0 POOL TYPE USED AVAIL cephfs.cephfs.meta metadata 96.0k 284G cephfs.cephfs.data data 0 284G STANDBY MDS cephfs.ceph3.ogcqkl
cephfs - 0 clients ====== RANK STATE MDS ACTIVITY DNS INOS DIRS CAPS 0 active cephfs.ceph6.ggjywj Reqs: 0 /s 10 13 12 0 POOL TYPE USED AVAIL cephfs.cephfs.meta metadata 96.0k 284G cephfs.cephfs.data data 0 284G STANDBY MDS cephfs.ceph3.ogcqkl
Copy to Clipboard Copied! 验证 RGW 服务是否处于活动状态。
ceph orch ps | grep rgw
$ ceph orch ps | grep rgw
Copy to Clipboard Copied! 输出示例:
rgw.objectgw.ceph3.kkmxgb ceph3 *:8080 running (7m) 3m ago 7m 52.7M - 16.2.9 rgw.objectgw.ceph6.xmnpah ceph6 *:8080 running (7m) 3m ago 7m 53.3M - 16.2.9
rgw.objectgw.ceph3.kkmxgb ceph3 *:8080 running (7m) 3m ago 7m 52.7M - 16.2.9 rgw.objectgw.ceph6.xmnpah ceph6 *:8080 running (7m) 3m ago 7m 53.3M - 16.2.9
Copy to Clipboard Copied!
3.5.3. 配置 Red Hat Ceph Storage 扩展模式
使用 cephadm
完全部署了红帽 Ceph 存储集群后,请使用以下步骤来配置扩展集群模式。新的扩展模式旨在处理 2 个站点的情况。
步骤
使用 ceph mon dump 命令检查监视器所使用的当前选择策略。默认情况下,在 ceph 集群中,连接设置为经典。
ceph mon dump | grep election_strategy
ceph mon dump | grep election_strategy
Copy to Clipboard Copied! 输出示例:
dumped monmap epoch 9 election_strategy: 1
dumped monmap epoch 9 election_strategy: 1
Copy to Clipboard Copied! 将 monitor 选举更改为连接性。
ceph mon set election_strategy connectivity
ceph mon set election_strategy connectivity
Copy to Clipboard Copied! 再次运行前面的 ceph mon dump 命令,以验证 election_strategy 值。
ceph mon dump | grep election_strategy
$ ceph mon dump | grep election_strategy
Copy to Clipboard Copied! 输出示例:
dumped monmap epoch 10 election_strategy: 3
dumped monmap epoch 10 election_strategy: 3
Copy to Clipboard Copied! 要了解有关不同选择策略的更多信息,请参阅配置监控选择策略。
设置所有 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 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
Copy to Clipboard Copied! 验证每个监控器是否具有正确的位置。
ceph mon dump
$ ceph mon dump
Copy to Clipboard Copied! 输出示例:
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}
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}
Copy to Clipboard Copied! 通过安装
ceph-base
RPM 软件包来创建使用此 OSD 拓扑的 CRUSH 规则,以便使用crushtool
命令:dnf -y install ceph-base
$ dnf -y install ceph-base
Copy to Clipboard Copied! 要了解有关 CRUSH 规则集的更多信息,请参阅 Ceph CRUSH 规则集。
从集群获取编译的 CRUSH map:
ceph osd getcrushmap > /etc/ceph/crushmap.bin
$ ceph osd getcrushmap > /etc/ceph/crushmap.bin
Copy to Clipboard Copied! 解译 CRUSH map,并将其转换为文本文件,以便能编辑它:
crushtool -d /etc/ceph/crushmap.bin -o /etc/ceph/crushmap.txt
$ crushtool -d /etc/ceph/crushmap.bin -o /etc/ceph/crushmap.txt
Copy to Clipboard Copied! 编辑文件
/etc/ceph/crushmap.txt
,将以下规则添加到 CRUSH map。vim /etc/ceph/crushmap.txt
$ vim /etc/ceph/crushmap.txt
Copy to Clipboard Copied! rule stretch_rule { id 1 type replicated min_size 1 max_size 10 step take default step choose firstn 0 type datacenter step chooseleaf firstn 2 type host step emit } # end crush map
rule stretch_rule { id 1 type replicated min_size 1 max_size 10 step take default step choose firstn 0 type datacenter step chooseleaf firstn 2 type host step emit } # end crush map
Copy to Clipboard Copied! 本例适用于所有 OpenShift Container Platform 集群中的活动应用程序。
注意规则
ID
必须是唯一的。在示例中,我们只有一个带有 id 0 的 crush 规则,因此我们正在使用 id 1。如果您的部署创建了更多规则,则使用下一个可用 ID。声明的 CRUSH 规则包含以下信息:
运行名称
- Description: 用于标识规则的唯一名称。
-
Value:
stretch_rule
id
- Description:用于标识规则的唯一整数。
-
Value:
1
type
- Description:描述存储驱动器复制或纠删代码的规则。
-
Value:
replicated
min_size
- Description: 如果池制作的副本数少于这个数字,CRUSH 不会选择这一规则。
- 值 :1
max_size
- Description: 如果池制作的副本数多于这个数字,CRUSH 不会选择这一规则。
- 值 :10
步骤需要默认
-
描述:获取名为
default
的根存储桶,并开始迭代树。
-
描述:获取名为
步骤选择第 0 类型数据中心
- Description:选择数据中心存储桶,并放入它的子树中。
step chooseleaf firstn 2 type host
- Description:选择给定类型的存储桶数量。在本例中,两个不同的主机位于其在上一级别输入的数据中心。
step emit
- Description: 输出当前的值并清除堆栈。通常在规则末尾使用,但也可用于从同一规则的不同树中选取。
从文件
/etc/ceph/crushmap.txt
中编译新的 CRUSH map,并将其转换为名为/etc/ceph/crushmap2.bin
的二进制文件:crushtool -c /etc/ceph/crushmap.txt -o /etc/ceph/crushmap2.bin
$ crushtool -c /etc/ceph/crushmap.txt -o /etc/ceph/crushmap2.bin
Copy to Clipboard Copied! 注入我们创建回集群的新 crushmap:
ceph osd setcrushmap -i /etc/ceph/crushmap2.bin
$ ceph osd setcrushmap -i /etc/ceph/crushmap2.bin
Copy to Clipboard Copied! 输出示例:
17
17
Copy to Clipboard Copied! 注意数字 17 是一个计数器,它将根据您对 crush 映射所做的更改来增加(18,19 等)。
验证创建的扩展规则现已可供使用。
ceph osd crush rule ls
ceph osd crush rule ls
Copy to Clipboard Copied! 输出示例:
replicated_rule stretch_rule
replicated_rule stretch_rule
Copy to Clipboard Copied! 启用扩展群集模式。
ceph mon enable_stretch_mode ceph7 stretch_rule datacenter
$ ceph mon enable_stretch_mode ceph7 stretch_rule datacenter
Copy to Clipboard Copied! 在本例中,
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
$ for pool in $(rados lspools);do echo -n "Pool: ${pool}; ";ceph osd pool get ${pool} crush_rule;done
Copy to Clipboard Copied! 输出示例:
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
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
Copy to Clipboard Copied! 这表明正在运行的红帽 Ceph 存储扩展群集,现在具有仲裁模式。