1.2. Ceph Monitor
Ceph Monitor 是轻量型进程,维护存储集群映射的主副本。所有 Ceph 客户端都会联系 Ceph 监控器,并检索存储集群映射的当前副本,使客户端能够绑定到池并读写数据。
Ceph 监控程序使用 Paxos 协议的一种变体来就存储集群之间的映射和其他重要信息建立共识。由于 Paxos 的性质,Ceph 需要大多数 monitor 能够建立仲裁,从而建立共识。
对于生产环境集群,需要在独立的主机上至少有三个监控器才能获得红帽的支持。
红帽建议部署奇数个监控器。Ceph 监控器的数量如果是奇数,则比带有偶数个监控器对故障有更高的抗压性。例如,若要在双监视器部署上维护仲裁,Ceph 无法容忍任何故障;对于四个监视器,可以容忍一个失败,对于五个监视器,可以容忍两个失败。这就是建议为奇数的原因。总结一下,Ceph 需要大多数监控器正在运行,并能够相互通信,另外两个是三个,共三,共 4 个,以此类推。
对于多节点 Ceph 存储集群的初始部署,红帽需要至少三个监视器,当需要多于三个 monitor 的情况,每次需要增加 2 个。
由于 Ceph 监控是轻量级的,因此可以在与 OpenStack 节点相同的主机上运行。但是,红帽建议在独立主机上运行 monitor。
红帽不支持在同一节点上并置 Ceph 监控和 OSD。这样做会对存储集群性能造成负面影响。
红帽仅在容器化环境中支持并置 Ceph 服务。
从存储集群中移除 monitor 时,请考虑 Ceph Monitor 使用 Paxos 协议来建立关于主存储集群映射的共识。您必须有足够的数量的 Ceph 监控器来建立仲裁。
其它资源
- 有关所有支持的 Ceph 配置,请参阅 Red Hat Ceph Storage 支持的配置知识库文章。
1.2.1. 准备新的 Ceph 监控节点
在为部署准备新的 Ceph 监控节点前,请查看 Red Hat Ceph Storage 安装指南中的安装 Red Hat Ceph Storage 的要求。
在单独的节点上部署每个新的 Ceph 监控器,存储集群中的所有 Ceph 监控节点必须在同一硬件上运行。
先决条件
- 网络连接。
- 对新节点的根级访问。
流程
- 将新节点添加到服务器机架。
- 将新节点连接到网络。
安装最新版本的 Red Hat Enterprise Linux 7 或 Red Hat Enterprise Linux 8。
对于 Red Hat Enterprise Linux 7,安装
ntp
并配置可靠的时间源:[root@mon ~]# yum install ntp
对于 Red Hat Enterprise Linux 8,安装
chrony
并配置可靠的时间源:[root@mon ~]# dnf install chrony
如果使用防火墙,打开 TCP 端口 6789:
[root@mon ~]# firewall-cmd --zone=public --add-port=6789/tcp [root@mon ~]# firewall-cmd --zone=public --add-port=6789/tcp --permanent
其它资源
-
有关
chrony
的详情,请参考 Red Hat Enterprise Linux 8 配置基本系统设置。
1.2.2. 使用 Ansible 添加 Ceph Monitor
红帽建议一次添加两个 Ceph monitor,以维护奇数个 monitor。例如,如果您在存储集群中有三个 Ceph monitor,红帽建议您将 monitor 数量扩展到 5。
先决条件
- 对新节点的根级访问。
- Ansible 管理节点.
- 一个由 Ansible 部署的、正在运行的 Red Hat Ceph Storage 集群。
流程
将新的 Ceph Monitor 节点添加到
/etc/ansible/hosts
Ansible 清单文件的[mons]
部分下:示例
[mons] monitor01 monitor02 monitor03 NEW_MONITOR_NODE_NAME NEW_MONITOR_NODE_NAME
验证 Ansible 是否可以联系 Ceph 节点:
[root@admin ~]# ansible all -m ping
将目录改为 Ansible 配置目录:
[root@admin ~]# cd /usr/share/ceph-ansible
您可以使用以下任一步骤添加 Ceph Monitor:
对于裸机和容器部署 ,请运行
infrastructure-playbook
:[root@admin ceph-ansible]# ansible-playbook -vvvv -i hosts infrastructure-playbooks/add-mon.yml
以 ansible 用户身份,运行
site
playbook 或site-container
playbook:裸机部署:
示例
[ansible@admin ceph-ansible]$ ansible-playbook -vvvv -i hosts site.yml --limit mons
容器部署:
示例
[ansible@admin ceph-ansible]$ ansible-playbook -vvvv -i hosts site-container.yml --limit mons
在 Ansible playbook 运行后,新的 Ceph Monitor 节点将出现在存储集群中。
更新配置文件:
裸机部署:
示例
[user@admin ceph-ansible]$ ansible-playbook -vvvv -i hosts site.yml --tags ceph_update_config
容器部署:
示例
[user@admin ceph-ansible]$ ansible-playbook -vvvv -i hosts site-container.yml --tags ceph_update_config
其它资源
- 如需了解有关 Ansible 清单配置的更多详细信息,请参阅 {storage_product} 安装指南中的配置 Ansible 清单位置 部分。
1.2.3. 使用命令行界面添加 Ceph monitor
红帽建议一次添加两个 Ceph monitor,以维护奇数个 monitor。例如,如果您在存储集群中有三个 Ceph monitor,红帽建议您将 monitor 数量扩展到 5。
红帽建议每个节点只运行一个 Ceph Monitor 守护进程。
先决条件
- 一个正在运行的 Red Hat Ceph Storage 集群。
- 对正在运行的 Ceph 监控节点以及新的监控节点的 root 级别访问。
流程
添加 Red Hat Ceph Storage 4 监控软件仓库。
Red Hat Enterprise Linux 7
[root@mon ~]# subscription-manager repos --enable=rhel-7-server-rhceph-4-mon-rpms
Red Hat Enterprise Linux 8
[root@mon ~]# subscription-manager repos --enable=rhceph-4-mon-for-rhel-8-x86_64-rpms
在新的 Ceph 监控节点上安装
ceph-mon
软件包:Red Hat Enterprise Linux 7
[root@mon ~]# yum install ceph-mon
Red Hat Enterprise Linux 8
[root@mon ~]# dnf install ceph-mon
编辑存储集群中正在运行的节点上 Ceph 配置文件的
[mon]
部分中的mon_host
设置列表。将新 Ceph Monitor 节点的 IP 地址添加到
mon_host
设置列表中:语法
[mon] mon_host = MONITOR_IP : PORT MONITOR_IP : PORT ... NEW_MONITOR_IP : PORT
您可以将新的 Ceph Monitor 的 IP 地址添加到 Ceph 配置文件的 [mon] 部分,而是为新监控器节点创建一个特定部分:
语法
[mon.MONITOR_ID] host = MONITOR_ID mon_addr = MONITOR_IP
注意mon_host
设置列表是 DNS 可解析的主机名或 IP 地址的列表,由 "," 或 ";" 分隔。此列表可确保存储集群在启动或停止期间标识新的 monitor 节点。重要mon_initial_members
设置列出了 Ceph 监控节点的初始仲裁组。如果该组的成员出现故障,则该组中的另一节点将变成初始监控节点。为确保生产环境存储集群的高可用性,请在 Ceph 配置文件的mon_initial_members
和mon_host
部分中至少列出三个监控节点。这可防止存储集群在初始监控节点失败时锁定。如果您要添加的 monitor 节点会替换属于mon_initial_members
和mon_host
的监控器,还要向这两个部分添加新的监控器。
要使 monitor 成为初始仲裁组的成员,请将主机名添加到 Ceph 配置文件的
[global]
部分中的mon_initial_members
参数。示例
[global] mon_initial_members = node1 node2 node3 node4 node5 ... [mon] mon_host = 192.168.0.1:6789 192.168.0.2:6789 192.168.0.3:6789 192.168.0.4:6789 192.168.0.5:6789 ... [mon.node4] host = node4 mon_addr = 192.168.0.4 [mon.node5] host = node5 mon_addr = 192.168.0.5
将更新的 Ceph 配置文件复制到所有 Ceph 节点和 Ceph 客户端中:
语法
scp /etc/ceph/CLUSTER_NAME.conf TARGET_NODE_NAME:/etc/ceph
示例
[root@mon ~]# scp /etc/ceph/ceph.conf node4:/etc/ceph
在新监控节点上创建 monitor 的数据目录:
语法
mkdir /var/lib/ceph/mon/CLUSTER_NAME - MONITOR_ID
示例
[root@mon ~]# mkdir /var/lib/ceph/mon/ceph-node4
在运行中的 Ceph 监控节点上和新建监控节点上创建临时目录,并将这个过程所需的文件保留在这些目录中。每个节点上的临时目录应该与节点的默认目录不同。可在所有步骤完成后删除:
语法
mkdir TEMP_DIRECTORY_PATH_NAME
示例
[root@mon ~]# mkdir /tmp/ceph
将 admin 密钥从正在运行的 Ceph Monitor 节点复制到新的 Ceph 监控节点,以便您可以运行
ceph
命令:语法
scp /etc/ceph/CLUSTER_NAME.client.admin.keyring TARGET_NODE_NAME:/etc/ceph
示例
[root@mon ~]# scp /etc/ceph/ceph.client.admin.keyring node4:/etc/ceph
从正在运行的 Ceph 监控节点中,检索 monitor 密钥环:
语法
ceph auth get mon. -o TEMP_DIRECTORY_PATH_NAME/KEY_FILE_NAME
示例
[root@mon ~]# ceph auth get mon. -o /tmp/ceph/ceph_keyring.out
从正在运行的 Ceph 监控节点中,检索 monitor 映射:
语法
ceph mon getmap -o TEMP_DIRECTORY_PATH_NAME/MONITOR_MAP_FILE
示例
[root@mon ~]# ceph mon getmap -o /tmp/ceph/ceph_mon_map.out
将收集的 Ceph Monitor 数据复制到新的 Ceph Monitor 节点:
语法
scp /tmp/ceph TARGET_NODE_NAME:/tmp/ceph
示例
[root@mon ~]# scp /tmp/ceph node4:/tmp/ceph
为您之前收集的数据准备数据目录。指定 monitor map 的路径,以便从监控器检索仲裁信息,以及它们的 'fsid'。指定 monitor keyring 的路径:
语法
ceph-mon -i MONITOR_ID --mkfs --monmap TEMP_DIRECTORY_PATH_NAME/MONITOR_MAP_FILE --keyring TEMP_DIRECTORY_PATH_NAME/KEY_FILE_NAME
示例
[root@mon ~]# ceph-mon -i node4 --mkfs --monmap /tmp/ceph/ceph_mon_map.out --keyring /tmp/ceph/ceph_keyring.out
对于具有自定义名称的存储集群,请在
/etc/sysconfig/ceph
文件中添加以下行:语法
echo "CLUSTER=CUSTOM_CLUSTER_NAME" >> /etc/sysconfig/ceph
示例
[root@mon ~]# echo "CLUSTER=example" >> /etc/sysconfig/ceph
更新新监控节点上的所有者和组权限:
语法
chown -R OWNER : GROUP DIRECTORY_PATH
示例
[root@mon ~]# chown -R ceph:ceph /var/lib/ceph/mon [root@mon ~]# chown -R ceph:ceph /var/log/ceph [root@mon ~]# chown -R ceph:ceph /var/run/ceph [root@mon ~]# chown -R ceph:ceph /etc/ceph
在新监控节点上启用并启动
ceph-mon
进程:语法
systemctl enable ceph-mon.target systemctl enable ceph-mon@MONITOR_ID systemctl start ceph-mon@MONITOR_ID
示例
[root@mon ~]# systemctl enable ceph-mon.target [root@mon ~]# systemctl enable ceph-mon@node4 [root@mon ~]# systemctl start ceph-mon@node4
其它资源
- 请参阅 Red Hat Ceph Storage 安装指南中的启用 Red Hat Ceph Storage 仓库 部分。
1.2.4. 配置 monitor 选择策略
monitor 选择策略标识了网络分割并处理失败。您可以使用三种不同模式配置选择监控策略:
-
classic
- 默认默认,它是最低等级的监控,根据两个站点之间的选举模块进行投票。 -
disallow
- 此模式可让您将 monitor 标记为禁止,在这种情况下,他们会参与仲裁并服务客户端,但不能是选择的领导者。这样,您可以将 monitor 添加到禁止的领导列表中。如果 monitor 在 disallowed 列表中,它将始终被推迟到另一个 monitor。 -
connectivity
- 这个模式主要用于解决网络差异。它会为对等点评估由每个监控器提供的连接分数,并选出最佳连接的可靠的监控器作为领导。这个模式旨在处理网络分割,如果您的集群在多个数据中心间扩展或存在影响,则可能会出现这种情况。这个模式包含连接分数评级,并以最佳分数选择监控器。
红帽建议保持在 经典(classic)
模式,除非您需要其他模式的功能。
在构造集群前,将以下命令的 election_strategy
更改为 classic
, disallow
, 或 connectivity
:
语法
ceph mon set election_strategy {classic|disallow|connectivity}
1.2.5. 使用 Ansible 删除 Ceph Monitor
要使用 Ansible 删除 Ceph Monitor,请使用 shrink-mon.yml
playbook。
先决条件
- Ansible 管理节点.
- 一个由 Ansible 部署的、正在运行的 Red Hat Ceph Storage 集群。
流程
检查 monitor 是否为
ok-to-stop
:语法
ceph mon ok-to-stop MONITOR_ID
示例
[root@mon ~]# ceph mon ok-to-stop node03
进入到
/usr/share/ceph-ansible/
目录。[user@admin ~]$ cd /usr/share/ceph-ansible
对于裸机和容器部署,请运行
shrink-mon.yml
Ansible playbook:语法
ansible-playbook infrastructure-playbooks/shrink-mon.yml -e mon_to_kill=NODE_NAME -u ANSIBLE_USER_NAME -i hosts
替换:
-
NODE_NAME
,其 Ceph 监控节点的短主机名。每次 playbook 运行时只能删除一个 Ceph Monitor。 -
ANSIBLE_USER_NAME
,Ansible 用户的名称
示例
[user@admin ceph-ansible]$ ansible-playbook infrastructure-playbooks/shrink-mon.yml -e mon_to_kill=node03 -u user -i hosts
-
-
从 ansible 清单主机
/etc/ansible/hosts
中手动删除对应的条目。 运行
ceph-ansible
playbook。裸机部署 :
示例
[user@admin ceph-ansible]$ ansible-playbook site.yml --tags ceph_update_config -i hosts
容器部署 :
示例
[user@admin ceph-ansible]$ ansible-playbook site-container.yml --tags ceph_update_config -i hosts
确保 Ceph Monitor 已被成功移除:
[root@mon ~]# ceph -s
其它资源
- 有关安装 Red Hat Ceph Storage 的更多信息,请参阅 Red Hat Ceph Storage 安装指南。
- 如需了解有关 Ansible 清单配置的更多详细信息,请参阅 {storage_product} 安装指南中的配置 Ansible 清单位置 部分。
1.2.6. 使用命令行界面删除 Ceph Monitor
删除 Ceph Monitor 涉及从存储集群中移除 ceph-mon
守护进程并更新存储集群映射。
先决条件
- 一个正在运行的 Red Hat Ceph Storage 集群。
- 监控节点的 root 级别访问权限。
流程
检查 monitor 是否为
ok-to-stop
:语法
ceph mon ok-to-stop HOSTNAME
示例
[root@mon ~]# ceph mon ok-to-stop node03
停止 Ceph Monitor 服务:
语法
systemctl stop ceph-mon@MONITOR_ID
示例
[root@mon ~]# systemctl stop ceph-mon@node3
从存储集群中移除 Ceph Monitor:
语法
ceph mon remove MONITOR_ID
示例
[root@mon ~]# ceph mon remove node3
-
从 Ceph 配置文件移除 Ceph Monitor 条目。配置文件的默认位置为
/etc/ceph/ceph.conf
。 将 Ceph 配置文件重新分发到存储集群中的所有剩余的 Ceph 节点:
语法
scp /etc/ceph/CLUSTER_NAME.conf USER_NAME @ TARGET_NODE_NAME :/etc/ceph/
示例
[root@mon ~]# scp /etc/ceph/ceph.conf root@node3:/etc/ceph/
对于容器部署,禁用并删除 Ceph 监控服务:
禁用 Ceph Monitor 服务:
语法
systemctl disable ceph-mon@MONITOR_ID
示例
[root@mon ~]# systemctl disable ceph-mon@node3
从
systemd
中删除服务:[root@mon ~]# rm /etc/systemd/system/ceph-mon@.service
重新加载
systemd
管理器配置:[root@mon ~]# systemctl daemon-reload
重置故障 Ceph Monitor 节点的状态:
[root@mon ~]# systemctl reset-failed
可选:归档 Ceph 监控数据:
语法
mv /var/lib/ceph/mon/CLUSTER_NAME - MONITOR_ID /var/lib/ceph/mon/removed- CLUSTER_NAME - MONITOR_ID
示例
[root@mon ~]# mv /var/lib/ceph/mon/ceph-node3 /var/lib/ceph/mon/removed-ceph-node3
可选:删除 Ceph Monitor 数据:
语法
rm -r /var/lib/ceph/mon/CLUSTER_NAME - MONITOR_ID
示例
[root@mon ~]# rm -r /var/lib/ceph/mon/ceph-node3
1.2.7. 从不健康的存储集群中移除 Ceph Monitor
您可以从不健康存储集群中删除 ceph-mon
守护进程,该集群的放置组一直处于不是 active + clean
的状态。
先决条件
- 一个正在运行的 Red Hat Ceph Storage 集群。
- Ceph 监控节点的根级别访问权限.
- 至少一个运行 Ceph Monitor 节点。
流程
登录到一个 surviving Ceph Monitor 节点:
语法
ssh root@MONITOR_NODE_NAME
示例
[root@admin ~]# ssh root@mon2
停止
ceph-mon
守护进程并提取monmap
文件的副本。语法
systemctl stop ceph-mon@MONITOR_ID ceph-mon -i SHORT_HOSTNAME --extract-monmap TEMP_PATH
示例
[root@mon2 ~]# systemctl stop ceph-mon@mon1 [root@mon2 ~]# ceph-mon -i mon1 --extract-monmap /tmp/monmap
删除非可见的 Ceph 监控器:
语法
monmaptool TEMPORARY_PATH --rm _MONITOR_ID
示例
[root@mon2 ~]# monmaptool /tmp/monmap --rm mon1
将 surviving monitor map 与已删除 monitor 注入 surviving Ceph Monitor:
语法
ceph-mon -i SHORT_HOSTNAME --inject-monmap TEMP_PATH
示例
[root@mon2 ~]# ceph-mon -i mon2 --inject-monmap /tmp/monmap
仅启动 Surviving monitor,并验证 monitor 是否形成仲裁:
示例
[root@mon2 ~]# ceph -s
-
可选:归档在
/var/lib/ceph/mon
目录中删除的 Ceph Monitor 的数据目录。