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 协议来建立主存储集群映射的共识。您必须有足够的监控器来建立仲裁。

其它资源

1.2.1. 准备新的 Ceph Monitor 节点

在向存储集群添加新 Ceph Monitor 时,请将它们部署到单独的节点上。节点硬件必须统一用于存储集群中的所有节点。

先决条件

步骤

  1. 将新节点添加到服务器机架。
  2. 将新节点连接到网络。
  3. 在新节点上安装 Red Hat Enterprise Linux 7 或 Ubuntu 16.04。
  4. 安装 NTP 并配置可靠的时间源:

    [root@monitor ~]# yum install ntp
  5. 如果使用防火墙,打开 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 访问权限。

步骤

  1. /etc/ansible/hosts Ansible 清单文件中添加新 Ceph Monitor 节点,位于 [mons] 部分:

    示例

    [mons]
    monitor01
    monitor02
    monitor03
    $NEW_MONITOR_NODE_NAME
    $NEW_MONITOR_NODE_NAME

  2. 验证 Ansible 是否可以联系 Ceph 节点:

    # ansible all -m ping
  3. 将目录改为 Ansible 配置目录:

    # cd /usr/share/ceph-ansible
  4. 运行 Ansible playbook:

    $ ansible-playbook site.yml

    如果在 Ceph 的容器化部署中添加新监控器,请运行 site-docker.yml playbook:

    $ ansible-playbook site-docker.yml
  5. 在 Ansible playbook 完成后,新的监控节点将位于存储集群中。

1.2.3. 使用命令行界面添加 Ceph Monitor

红帽建议一次添加两个 monitor,以维护奇数的 monitor。例如,如果您在存储集群中有三个监控器,红帽建议扩展太五个 monitor。

重要

红帽建议每个节点只运行一个 Ceph monitor 守护进程。

先决条件

  • 一个正在运行的 Red Hat Ceph Storage 集群。
  • 具有对正在运行的 Ceph 监控节点的 root 访问权限,以及对新的监控节点的访问权限。

步骤

  1. 添加 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 -'

  2. 在新的 Ceph Monitor 节点上安装 ceph-mon 软件包:

    Red Hat Enterprise Linux

    [root@monitor ~]# yum install ceph-mon

    Ubuntu

    [user@monitor ~]$ sudo apt-get install ceph-mon

  3. 为确保存储集群在启动时标识监控器或重启时,请将 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_membersmon_host 中设置,以确保高可用性。如果只有一个初始 monitor 的存储集群增加了两个监视器,但没有将它们添加到 mon_initial_membersmon_host,则初始监控器的故障会导致存储群集锁定。如果您要添加的监控器替换为 mon_initial_membersmon_host 的一部分的监控器,则必须将新监视器添加到 mon_initial_membersmon_host 中。

  4. 将更新的 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

  5. 在新监控节点上创建监控器的数据目录:

    Syntax

    mkdir /var/lib/ceph/mon/$CLUSTER_NAME-$MONITOR_ID

    示例

    [root@monitor ~]# mkdir /var/lib/ceph/mon/ceph-node4

  6. 在正在运行的监控节点上和新的监控节点上创建一个临时目录,以保留此过程需要的文件。该目录应该与上一步中创建的监控默认目录不同,并可在完成所有步骤后删除:

    Syntax

    mkdir $TEMP_DIRECTORY

    示例

    [root@monitor ~]# mkdir /tmp/ceph

  7. 将 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

  8. 从正在运行的监控器节点中,检索监控器密钥环:

    Syntax

    ceph auth get mon. -o /$TEMP_DIRECTORY/$KEY_FILE_NAME

    示例

    [root@monitor ~]# ceph auth get mon. -o /tmp/ceph/ceph_keyring.out

  9. 从正在运行的监控器节点中,检索 monitor 映射:

    Syntax

    ceph mon getmap -o /$TEMP_DIRECTORY/$MONITOR_MAP_FILE

    示例

    [root@monitor ~]# ceph mon getmap -o /tmp/ceph/ceph_mon_map.out

  10. 将收集的监控器数据复制到新监控节点上:

    Syntax

    scp /tmp/ceph $TARGET_NODE_NAME:/tmp/ceph

    示例

    [root@monitor ~]# scp /tmp/ceph node4:/tmp/ceph

  11. 从您之前收集的数据准备新的监控器数据目录。您必须指定 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

  12. 对于具有自定义名称的存储集群,请在 /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

  13. 更新新监控节点上的所有者和组权限:

    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

  14. 在新监控节点上启用并启动 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 存储集群。

步骤

  1. 更改到 /usr/share/ceph-ansible/ 目录。

    [user@admin ~]$ cd /usr/share/ceph-ansible
  2. infrastructure-playbooks 目录中的 shrink-mon.yml playbook 复制到当前目录。

    [root@admin ceph-ansible]# cp infrastructure-playbooks/shrink-mon.yml .
  3. 为 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
  4. 从集群中的所有 Ceph 配置文件删除 Monitor 条目。
  5. 确保 monitor 已成功移除。

    [root@monitor ~]# ceph -s

其它资源

1.2.5. 使用命令行界面删除 Ceph Monitor

删除 Ceph Monitor 涉及从存储集群中移除 ceph-mon 守护进程,并更新存储集群映射。

先决条件

  • 一个正在运行的 Red Hat Ceph Storage 集群。
  • 具有对监控节点的 root 访问权限。

步骤

  1. 停止 monitor 服务:

    Syntax

    systemctl stop ceph-mon@$MONITOR_ID

    示例

    [root@monitor ~]# systemctl stop ceph-mon@node3

  2. 从存储集群中移除该监控器:

    Syntax

    ceph mon remove $MONITOR_ID

    示例

    [root@monitor ~]# ceph mon remove node3

  3. 默认情况下,从 Ceph 配置文件中删除 monitor 条目,默认为 /etc/ceph/ceph.conf
  4. 将 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. 仅限容器。禁用监控器服务:

    注意

    仅在使用容器时执行第 5-9 步。

    Syntax

    systemctl disable ceph-mon@$MONITOR_ID

    示例

    [root@monitor ~]# systemctl disable ceph-mon@node3

  6. 仅限容器。从 systemd 中删除服务:

    [root@monitor ~]# rm /etc/systemd/system/ceph-mon@.service
  7. 仅限容器。重新载入 systemd Manager 配置:

    [root@monitor ~]# systemctl daemon-reload
  8. 仅限容器。重置失败 monitor 单元的状态:

    [root@monitor ~]# systemctl reset-failed
  9. 仅限容器。删除 ceph-mon RPM:

    [root@monitor ~]# docker exec node3 yum remove ceph-mon
  10. 归档监控器数据:

    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

  11. 删除监控器数据:

    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 节点。

步骤

  1. 确定 Surviving monitor 并登录到该节点:

    [root@monitor ~]# ceph mon dump
    [root@monitor ~]# ssh $MONITOR_HOST_NAME
  2. 停止 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

  3. 删除非演示监控器:

    Syntax

    monmaptool $TEMPORARY_PATH --rm $MONITOR_ID

    示例

    [root@monitor ~]# monmaptool /tmp/monmap --rm node2

  4. 将 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

Red Hat logoGithubRedditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

通过我们的产品和服务,以及可以信赖的内容,帮助红帽用户创新并实现他们的目标。

让开源更具包容性

红帽致力于替换我们的代码、文档和 Web 属性中存在问题的语言。欲了解更多详情,请参阅红帽博客.

關於紅帽

我们提供强化的解决方案,使企业能够更轻松地跨平台和环境(从核心数据中心到网络边缘)工作。

© 2024 Red Hat, Inc.