7.4. 使用命令行界面升级存储集群

您可以在存储集群运行时从 Red Hat Ceph Storage 3.3 升级到 Red Hat Ceph Storage 4。这些版本之间的重要区别在于,Red Hat Ceph Storage 4 默认使用 msgr2 协议,该协议使用端口 3300。如果没有打开,集群将发出 HEALTH_WARN 错误。

升级存储集群时需要考虑以下限制:

  • 默认情况下,Red Hat Ceph Storage 4 使用 msgr2 协议。确保 Ceph 监控节点上打开了端口 3300
  • ceph-monitor 守护进程从 Red Hat Ceph Storage 3 升级到 Red Hat Ceph Storage 4 后,Red Hat Ceph Storage 3 ceph-osd 守护进程无法创建新 OSD,直到您将它们升级到 Red Hat Ceph Storage 4。
  • 不要在升级进行时创建任何池。

先决条件

  • Ceph 监控器、OSD 和对象网关节点的根级别访问权限。

流程

  1. 在运行 Red Hat Ceph Storage 3 时,确保集群至少完成了所有 PG 的完全清理。如果不这样做,会导致 monitor 守护进程在启动时拒绝加入仲裁,从而使它们无法运行。要确保集群至少完成所有 PG 的一个完整清理,请执行以下操作:

    # ceph osd dump | grep ^flags

    要从 Red Hat Ceph Storage 3 升级到 Red Hat Ceph Storage 4,OSD map 必须包含 restore_deletespurged_snapdirs 标志。

  2. 确保集群处于健康而干净的状态。

    ceph health
    HEALTH_OK
  3. 对于运行 ceph-monceph-manager 的节点,请执行:

    # subscription-manager repos --enable=rhel-7-server-rhceph-4-mon-rpms

    启用 Red Hat Ceph Storage 4 软件包后,在每个 ceph-monceph-manager 节点上执行下列操作:

    # firewall-cmd --add-port=3300/tcp
    # firewall-cmd --add-port=3300/tcp --permanent
    # yum update -y
    # systemctl restart ceph-mon@<mon-hostname>
    # systemctl restart ceph-mgr@<mgr-hostname>

    <mon-hostname><mgr-hostname> 替换为目标主机的主机名。

  4. 在升级 OSD 之前,请在 Ceph 监控节点上设置 nooutnodeep-scrub 标志,以防止在升级过程中重新平衡 OSD。

    # ceph osd set noout
    # ceph osd det nodeep-scrub
  5. 在每个 OSD 节点上执行:

    # subscription-manager repos --enable=rhel-7-server-rhceph-4-osd-rpms

    启用 Red Hat Ceph Storage 4 软件包后,更新 OSD 节点:

    # yum update -y

    对于节点上运行的每个 OSD 守护进程,执行:

    # systemctl restart ceph-osd@<osd-num>

    <osd-num> 替换为要重启的 osd 号。在继续下一 OSD 节点之前,确保节点上的所有 OSD 都已重启。

  6. 如果存储集群中有任何 OSD 使用 ceph-disk 部署,指示 ceph-volume 启动守护进程。

    # ceph-volume simple scan
    # ceph-volume simple activate --all
  7. 仅启用 Nautilus 功能:

    # ceph osd require-osd-release nautilus
    重要

    如果无法执行此步骤,OSD 将无法在启用 msgr2 后进行通信。

  8. 升级所有 OSD 节点后,取消设置 Ceph 监控节点上的 nooutnodeep-scrub 标志。

    # ceph osd unset noout
    # ceph osd unset nodeep-scrub
  9. 将任何现有的 CRUSH bucket 切换到最新的 bucket 类型 straw2

    # ceph osd getcrushmap -o backup-crushmap
    # ceph osd crush set-all-straw-buckets-to-straw2
  10. 从 Red Hat Ceph Storage 3 升级到 Red Hat Ceph Storage 4 后,即可执行以下步骤:

    1. 启用消息传递 v2 协议 msgr2

      ceph mon enable-msgr2

      这将指示绑定到 6789 的旧默认端口的所有 Ceph 监控器也绑定到 3300 的新端口。

    2. 验证 monitor 的状态:

      ceph mon dump
      注意

      运行 nautilus OSD 不会自动绑定到其 v2 地址。必须重启它们。

  11. 对于从 Red Hat Ceph Storage 3 升级到 Red Hat Ceph Storage 4 的每个主机,将 ceph.conf 文件更新为没有指定任何监控端口,或引用 v2 和 v1 地址和端口。
  12. ceph.conf 文件中的任何配置选项导入到存储集群的配置数据库中。

    示例

    [root@mon ~]# ceph config assimilate-conf -i /etc/ceph/ceph.conf

    1. 检查存储集群的配置数据库。

      示例

      [root@mon ~]# ceph config dump

    2. 可选:升级到 Red Hat Ceph Storage 4 后,为每个主机创建一个最小的 ceph.conf 文件:

      示例

      [root@mon ~]# ceph config generate-minimal-conf > /etc/ceph/ceph.conf.new
      [root@mon ~]# mv /etc/ceph/ceph.conf.new /etc/ceph/ceph.conf

  13. 在 Ceph 对象网关节点上执行:

    # subscription-manager repos --enable=rhel-7-server-rhceph-4-tools-rpms

    启用 Red Hat Ceph Storage 4 软件包后,更新节点并重启 ceph-rgw 守护进程:

    # yum update -y
    # systemctl restart ceph-rgw@<rgw-target>

    <rgw-target> 替换为要重启的 rgw 目标。

  14. 对于管理节点,执行:

    # subscription-manager repos --enable=rhel-7-server-rhceph-4-tools-rpms
    # yum update -y
  15. 确保集群处于健康而干净的状态。

    # ceph health
    HEALTH_OK
  16. 可选:在客户端节点上,重新启动依赖于 Ceph 客户端侧库的任何应用。

    注意

    如果您要升级运行 QEMU 或 KVM 实例的 OpenStack Nova 计算节点,或使用专用 QEMU 或 KVM 客户端,请停止并启动 QEMU 或 KVM 实例,因为在此情况下重启实例不起作用。