1.2. Ceph Monitors
Ceph 监控器是维护 cluster map 主节点副本的轻量级进程。所有 Ceph 客户端都联系 Ceph 监控器并检索 cluster map 的当前副本,使客户端能够绑定到池以及读取和写入数据。
Ceph 监视器使用 Paxos 协议的变体来建立关于集群中映射和其他重要信息的共识。由于 Paxos 的性质,Ceph 需要大多数监视器正在运行才能建立仲裁,从而建立共识。
红帽至少需要三个监视器在独立的主机上接受对生产环境集群的支持。
红帽建议部署奇数个 monitor。奇数的监控器数量比监视器数要高到故障的弹性。例如,若要在两个监控部署中维护仲裁,Ceph 无法容忍任何错误;具有三个监视器,一个故障;四个监视器故障;一个故障,有五个 monitor,两个失败。这就是为什么推荐奇数个数字。Ceph 总结需要大部分的监控器正在运行,而且能够相互通信,另外两个(共三个三个),共三个(共 4 个),等等。
对于多节点 Ceph 存储集群的初始部署,红帽需要三个监视器,当存在超过三个监视器的有效需求时,红帽需要三个监视器。
由于监控器是轻量级的,因此可以在与 OpenStack 节点相同的主机上运行。但是,红帽建议在单独的主机上运行 monitor。
红帽不支持在同一个节点上并定位 Ceph Monitor 和 OSD。这样做可能会对存储集群性能造成负面影响。
红帽仅支持在容器化环境中找到 Ceph 服务。
当您从存储集群中移除监控器时,请考虑 Ceph 监视器使用 Paxos 协议来建立主存储集群映射的共识。您必须有足够的监控器来建立仲裁。
其它资源
- 有关所有支持的 Ceph 配置,请参阅 Red Hat Ceph Storage 支持的配置 知识库文章。
1.2.1. 准备新的 Ceph Monitor 节点
在向存储集群添加新 Ceph Monitor 时,请将它们部署到单独的节点上。节点硬件必须统一用于存储集群中的所有节点。
先决条件
- 网络连接。
-
有到新节点的
root
访问权限。 - 请参阅《 红帽企业 Linux 或 Ubuntu 安装指南》中的安装红帽 Ceph 存储 章节的要求。
步骤
- 将新节点添加到服务器机架。
- 将新节点连接到网络。
- 在新节点上安装 Red Hat Enterprise Linux 7 或 Ubuntu 16.04。
安装 NTP 并配置可靠的时间源:
[root@monitor ~]# yum install ntp
如果使用防火墙,打开 TCP 端口 6789:
Red Hat Enterprise Linux
[root@monitor ~]# firewall-cmd --zone=public --add-port=6789/tcp [root@monitor ~]# firewall-cmd --zone=public --add-port=6789/tcp --permanent
Ubuntu
iptables -I INPUT 1 -i $NIC_NAME -p tcp -s $IP_ADDR/$NETMASK_PREFIX --dport 6789 -j ACCEPT
Ubuntu 示例
[user@monitor ~]$ sudo iptables -I INPUT 1 -i enp6s0 -p tcp -s 192.168.0.11/24 --dport 6789 -j ACCEPT
1.2.2. 使用 Ansible 添加 Ceph Monitor
红帽建议一次添加两个 monitor,以维护奇数的 monitor。例如,如果您在存储集群中有三个监控器,红帽建议将其扩展为五个监控器。
先决条件
- 一个正在运行的 Red Hat Ceph Storage 集群。
-
有到新节点的
root
访问权限。
步骤
在
/etc/ansible/hosts
Ansible 清单文件中添加新 Ceph Monitor 节点,位于[mons]
部分:示例
[mons] monitor01 monitor02 monitor03 $NEW_MONITOR_NODE_NAME $NEW_MONITOR_NODE_NAME
验证 Ansible 是否可以联系 Ceph 节点:
# ansible all -m ping
将目录改为 Ansible 配置目录:
# cd /usr/share/ceph-ansible
运行 Ansible playbook:
$ ansible-playbook site.yml
如果在 Ceph 的容器化部署中添加新监控器,请运行
site-docker.yml
playbook:$ ansible-playbook site-docker.yml
- 在 Ansible playbook 完成后,新的监控节点将位于存储集群中。
1.2.3. 使用命令行界面添加 Ceph Monitor
红帽建议一次添加两个 monitor,以维护奇数的 monitor。例如,如果您在存储集群中有三个监控器,红帽建议扩展太五个 monitor。
红帽建议每个节点只运行一个 Ceph monitor 守护进程。
先决条件
- 一个正在运行的 Red Hat Ceph Storage 集群。
-
具有对正在运行的 Ceph 监控节点的
root
访问权限,以及对新的监控节点的访问权限。
步骤
添加 Red Hat Ceph Storage 3 监控软件仓库。
Red Hat Enterprise Linux
[root@monitor ~]# subscription-manager repos --enable=rhel-7-server-rhceph-3-mon-els-rpms
Ubuntu
[user@monitor ~]$ sudo bash -c 'umask 0077; echo deb https://$CUSTOMER_NAME:$CUSTOMER_PASSWORD@rhcs.download.redhat.com/3-updates/Tools $(lsb_release -sc) main | tee /etc/apt/sources.list.d/Tools.list' [user@monitor ~]$ sudo bash -c 'wget -O - https://www.redhat.com/security/fd431d51.txt | apt-key add -'
在新的 Ceph Monitor 节点上安装
ceph-mon
软件包:Red Hat Enterprise Linux
[root@monitor ~]# yum install ceph-mon
Ubuntu
[user@monitor ~]$ sudo apt-get install ceph-mon
为确保存储集群在启动时标识监控器或重启时,请将 monitor 的 IP 地址添加到 Ceph 配置文件。
将新监控器添加到存储集群中现有监控节点上的 Ceph 配置文件的
[mon]
或[global]
部分。mon_host
设置,这是可解析的主机名或 IP 地址列表,由 "," 或 "; 或 "; 分隔。另外,您还可以在 Ceph 配置文件中为新的监控节点创建特定的部分:Syntax
[mon] mon host = $MONITOR_IP:$PORT $MONITOR_IP:$PORT ... $NEW_MONITOR_IP:$PORT
或
[mon.$MONITOR_ID] host = $MONITOR_ID mon addr = $MONITOR_IP
要使监视器成为初始仲裁组的一部分,还必须将主机名添加到 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
重要生产存储集群 REQUIRE 至少三个 monitor 在
mon_initial_members
和mon_host
中设置,以确保高可用性。如果只有一个初始 monitor 的存储集群增加了两个监视器,但没有将它们添加到mon_initial_members
和mon_host
,则初始监控器的故障会导致存储群集锁定。如果您要添加的监控器替换为mon_initial_members
和mon_host
的一部分的监控器,则必须将新监视器添加到mon_initial_members
和mon_host
中。将更新的 Ceph 配置文件复制到所有 Ceph 节点和 Ceph 客户端:
Syntax
scp /etc/ceph/$CLUSTER_NAME.conf $TARGET_NODE_NAME:/etc/ceph
示例
[root@monitor ~]# scp /etc/ceph/ceph.conf node4:/etc/ceph
在新监控节点上创建监控器的数据目录:
Syntax
mkdir /var/lib/ceph/mon/$CLUSTER_NAME-$MONITOR_ID
示例
[root@monitor ~]# mkdir /var/lib/ceph/mon/ceph-node4
在正在运行的监控节点上和新的监控节点上创建一个临时目录,以保留此过程需要的文件。该目录应该与上一步中创建的监控默认目录不同,并可在完成所有步骤后删除:
Syntax
mkdir $TEMP_DIRECTORY
示例
[root@monitor ~]# mkdir /tmp/ceph
将 admin 密钥从正在运行的监控节点复制到新的监控节点,以便运行
ceph
命令:Syntax
scp /etc/ceph/$CLUSTER_NAME.client.admin.keyring $TARGET_NODE_NAME:/etc/ceph
示例
[root@monitor ~]# scp /etc/ceph/ceph.client.admin.keyring node4:/etc/ceph
从正在运行的监控器节点中,检索监控器密钥环:
Syntax
ceph auth get mon. -o /$TEMP_DIRECTORY/$KEY_FILE_NAME
示例
[root@monitor ~]# ceph auth get mon. -o /tmp/ceph/ceph_keyring.out
从正在运行的监控器节点中,检索 monitor 映射:
Syntax
ceph mon getmap -o /$TEMP_DIRECTORY/$MONITOR_MAP_FILE
示例
[root@monitor ~]# ceph mon getmap -o /tmp/ceph/ceph_mon_map.out
将收集的监控器数据复制到新监控节点上:
Syntax
scp /tmp/ceph $TARGET_NODE_NAME:/tmp/ceph
示例
[root@monitor ~]# scp /tmp/ceph node4:/tmp/ceph
从您之前收集的数据准备新的监控器数据目录。您必须指定 monitor 映射的路径,以从监控器检索仲裁信息,以及它们的
fsid
。您还必须指定到监控器密钥环的路径:Syntax
ceph-mon -i $MONITOR_ID --mkfs --monmap /$TEMP_DIRECTORY/$MONITOR_MAP_FILE --keyring /$TEMP_DIRECTORY/$KEY_FILE_NAME
示例
[root@monitor ~]# ceph-mon -i node4 --mkfs --monmap /tmp/ceph/ceph_mon_map.out --keyring /tmp/ceph/ceph_keyring.out
对于具有自定义名称的存储集群,请在
/etc/sysconfig/ceph
文件中添加以下行:Red Hat Enterprise Linux
[root@monitor ~]# echo "CLUSTER=<custom_cluster_name>" >> /etc/sysconfig/ceph
Ubuntu
[user@monitor ~]$ sudo echo "CLUSTER=<custom_cluster_name>" >> /etc/default/ceph
更新新监控节点上的所有者和组权限:
Syntax
chown -R $OWNER:$GROUP $DIRECTORY_PATH
示例
[root@monitor ~]# chown -R ceph:ceph /var/lib/ceph/mon [root@monitor ~]# chown -R ceph:ceph /var/log/ceph [root@monitor ~]# chown -R ceph:ceph /var/run/ceph [root@monitor ~]# chown -R ceph:ceph /etc/ceph
在新监控节点上启用并启动
ceph-mon
进程:Syntax
systemctl enable ceph-mon.target systemctl enable ceph-mon@$MONITOR_ID systemctl start ceph-mon@$MONITOR_ID
示例
[root@monitor ~]# systemctl enable ceph-mon.target [root@monitor ~]# systemctl enable ceph-mon@node4 [root@monitor ~]# systemctl start ceph-mon@node4
1.2.4. 使用 Ansible 删除 Ceph Monitor
要使用 Ansible 删除 Ceph Monitor,请使用 shrink-mon.yml
playbook。
先决条件
- Ansible 管理节点.
- 由 Ansible 部署的正在运行的红帽 Ceph 存储集群。
步骤
更改到
/usr/share/ceph-ansible/
目录。[user@admin ~]$ cd /usr/share/ceph-ansible
将
infrastructure-playbooks
目录中的shrink-mon.yml
playbook 复制到当前目录。[root@admin ceph-ansible]# cp infrastructure-playbooks/shrink-mon.yml .
为 Red Hat Ceph Storage 的普通或容器化部署运行
shrink-mon.yml
playbook:[user@admin ceph-ansible]$ ansible-playbook shrink-mon.yml -e mon_to_kill=<hostname> -u <ansible-user>
替换:
-
<hostname>
带有 monitor 节点的短主机名。要删除更多监视器,请使用逗号分隔其主机名。 -
<ansible-user>
带有 Ansible 用户的名称
例如,要删除位于带有
monitor1
主机名的节点上的 monitor:[user@admin ceph-ansible]$ ansible-playbook shrink-mon.yml -e mon_to_kill=monitor1 -u user
-
- 从集群中的所有 Ceph 配置文件删除 Monitor 条目。
确保 monitor 已成功移除。
[root@monitor ~]# ceph -s
其它资源
- 有关安装 Red Hat Ceph Storage 的更多信息,请参见 Red Hat Enterprise Linux 或 Ubuntu 的安装指南。
1.2.5. 使用命令行界面删除 Ceph Monitor
删除 Ceph Monitor 涉及从存储集群中移除 ceph-mon
守护进程,并更新存储集群映射。
先决条件
- 一个正在运行的 Red Hat Ceph Storage 集群。
-
具有对监控节点的
root
访问权限。
步骤
停止 monitor 服务:
Syntax
systemctl stop ceph-mon@$MONITOR_ID
示例
[root@monitor ~]# systemctl stop ceph-mon@node3
从存储集群中移除该监控器:
Syntax
ceph mon remove $MONITOR_ID
示例
[root@monitor ~]# ceph mon remove node3
-
默认情况下,从 Ceph 配置文件中删除 monitor 条目,默认为
/etc/ceph/ceph.conf
。 将 Ceph 配置文件重新分发到存储集群中所有剩余的 Ceph 节点:
Syntax
scp /etc/ceph/$CLUSTER_NAME.conf $USER_NAME@$TARGET_NODE_NAME:/etc/ceph/
示例
[root@monitor ~]# scp /etc/ceph/ceph.conf root@$node1:/etc/ceph/
仅限容器。禁用监控器服务:
注意仅在使用容器时执行第 5-9 步。
Syntax
systemctl disable ceph-mon@$MONITOR_ID
示例
[root@monitor ~]# systemctl disable ceph-mon@node3
仅限容器。从 systemd 中删除服务:
[root@monitor ~]# rm /etc/systemd/system/ceph-mon@.service
仅限容器。重新载入 systemd Manager 配置:
[root@monitor ~]# systemctl daemon-reload
仅限容器。重置失败 monitor 单元的状态:
[root@monitor ~]# systemctl reset-failed
仅限容器。删除
ceph-mon
RPM:[root@monitor ~]# docker exec node3 yum remove ceph-mon
归档监控器数据:
Syntax
mv /var/lib/ceph/mon/$CLUSTER_NAME-$MONITOR_ID /var/lib/ceph/mon/removed-$CLUSTER_NAME-$MONITOR_ID
示例
[root@monitor ~]# mv /var/lib/ceph/mon/ceph-node3 /var/lib/ceph/mon/removed-ceph-node3
删除监控器数据:
Syntax
rm -r /var/lib/ceph/mon/$CLUSTER_NAME-$MONITOR_ID
示例
[root@monitor ~]# rm -r /var/lib/ceph/mon/ceph-node3
其它资源
1.2.6. 从不健康的存储集群中移除 Ceph Monitor
此流程从不健康的存储集群中移除 ceph-mon
守护进程。具有放置组的不健康存储集群永久不 激活 + clean
。
先决条件
- 一个正在运行的 Red Hat Ceph Storage 集群。
-
具有对监控节点的
root
访问权限。 - 至少一个正在运行的 Ceph Monitor 节点。
步骤
确定 Surviving monitor 并登录到该节点:
[root@monitor ~]# ceph mon dump [root@monitor ~]# ssh $MONITOR_HOST_NAME
停止
ceph-mon
守护进程并提取monmap
文件的副本:Syntax
systemctl stop ceph-mon@$MONITOR_ID ceph-mon -i $MONITOR_ID --extract-monmap $TEMPORARY_PATH
示例
[root@monitor ~]# systemctl stop ceph-mon@node1 [root@monitor ~]# ceph-mon -i node1 --extract-monmap /tmp/monmap
删除非演示监控器:
Syntax
monmaptool $TEMPORARY_PATH --rm $MONITOR_ID
示例
[root@monitor ~]# monmaptool /tmp/monmap --rm node2
将 Surviving monitor map 以及 remove monitor(s)注入到 Surviving monitor 中:
Syntax
ceph-mon -i $MONITOR_ID --inject-monmap $TEMPORARY_PATH
示例
[root@monitor ~]# ceph-mon -i node1 --inject-monmap /tmp/monmap