8.3. 手动升级 Ceph OSD 节点及其操作系统

作为系统管理员,您可以手动将 Red Hat Ceph Storage 集群节点上的 Ceph OSD 软件和 Red Hat Enterprise Linux 操作系统同时升级到新的主版本。

重要

应当对 Ceph 集群中的每一 OSD 节点执行此步骤,但通常一次仅针对一个 OSD 节点执行此步骤。可以并行执行最多一个值得 OSD 节点的故障域。例如,如果正在使用每个机架复制,可以并行升级整个机架的 OSD 节点。为防止数据访问问题,请确保当前 OSD 节点的 OSD 已恢复正常运作,并且集群的所有 PG 在继续下一 OSD 之前处于 active+clean 状态。

重要

此流程不适用于加密的 OSD 分区,因为 Leapp 升级工具不支持使用 OSD 加密升级。

重要

如果 OSD 是使用 ceph-disk 创建的,并且仍然由 ceph-disk 管理,则必须使用 ceph-volume 接管它们的管理。下面的一个可选步骤将对此进行阐述。

先决条件

  • 一个正在运行的 Red Hat Ceph Storage 集群。
  • 节点正在运行 Red Hat Enterprise Linux 7 7.9。
  • 节点使用 Red Hat Ceph Storage 版本 3.3z6 或 4.0
  • 访问 Red Hat Enterprise Linux 8.3 的安装源。

流程

  1. 设置 OSD noout 标志,以防止 OSD 在迁移期间被标记为 down:

    ceph osd set noout
  2. 设置 OSD nobackfillnorecovernorrebalancenoscrubnodeep-scrub 标志,以避免集群出现不必要的负载,并在节点停机时避免任何数据被重新创建:

    ceph osd set nobackfill
    ceph osd set norecover
    ceph osd set norebalance
    ceph osd set noscrub
    ceph osd set nodeep-scrub
  3. 正常关闭节点上的所有 OSD 进程:

    [root@mon ~]# systemctl stop ceph-osd.target
  4. 如果使用 Red Hat Ceph Storage 3,请禁用 Red Hat Ceph Storage 3 存储库。

    1. 禁用工具存储库:

      [root@mon ~]# subscription-manager repos --disable=rhel-7-server-rhceph-3-tools-rpms
    2. 禁用 osd 存储库:

      [root@mon ~]# subscription-manager repos --disable=rhel-7-server-rhceph-3-osd-rpms
  5. 如果使用 Red Hat Ceph Storage 4,请禁用 Red Hat Ceph Storage 4 存储库。

    1. 禁用工具存储库:

      [root@mon ~]# subscription-manager repos --disable=rhel-7-server-rhceph-4-tools-rpms
    2. 禁用 osd 存储库:

      [root@mon ~]# subscription-manager repos --disable=rhel-7-server-rhceph-4-osd-rpms
  6. 安装 leapp 实用程序。请参阅从 Red Hat Enterprise Linux 7 升级到 Red Hat Enterprise Linux 8
  7. 通过 leapp preupgrade 检查运行。请参阅从命令行评估可升级性
  8. /etc/ssh/sshd_config 中设置 PermitRootLogin yes
  9. 重启 OpenSSH SSH 守护进程:

    [root@mon ~]# systemctl restart sshd.service
  10. 从 Linux 内核中删除 iSCSI 模块:

    [root@mon ~]# modprobe -r iscsi
  11. 执行 从 RHEL 7 升级到 RHEL 8 的内容,以执行升级。
  12. 重新引导节点。
  13. 为 Red Hat Enterprise Linux 8 启用 Red Hat Ceph Storage 4 的软件仓库。

    1. 启用工具存储库:

      [root@mon ~]# subscription-manager repos --enable=rhceph-4-tools-for-rhel-8-x86_64-rpms
    2. 启用 osd 存储库:

      [root@mon ~]# subscription-manager repos --enable=rhceph-4-osd-for-rhel-8-x86_64-rpms
  14. 安装 ceph-osd 软件包:

    [root@mon ~]# dnf install ceph-osd
  15. 安装 leveldb 软件包:

    [root@mon ~]# dnf install leveldb
  16. 从尚未升级的节点或已经恢复这些文件的节点恢复 ceph.conf 文件。
  17. 取消设置 nooutnobackfillnorecovernorebalancenoscrubnodeep-scrub 标志:

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

    # ceph osd getcrushmap -o backup-crushmap
    # ceph osd crush set-all-straw-buckets-to-straw2
  19. 可选:如果 OSD 是使用 ceph-disk 创建的,并且仍然由 ceph-disk 管理,则必须使用 ceph-volume 接管它们的管理。

    1. 挂载每个对象存储设备:

      语法

      /dev/DRIVE /var/lib/ceph/osd/ceph-OSD_ID

      使用存储设备名称和分区号替换 DRIVE

      OSD_ID 替换为 OSD ID。

      示例

      [root@mon ~]# mount /dev/sdb1 /var/lib/ceph/osd/ceph-0

      验证 ID_NUMBER 是否正确。

      语法

      cat /var/lib/ceph/osd/ceph-OSD_ID/whoami

      OSD_ID 替换为 OSD ID。

      示例

      [root@mon ~]# cat /var/lib/ceph/osd/ceph-0/whoami
      0

      对任何其他对象存储设备重复上述步骤。

    2. 扫描新挂载的设备:

      语法

      ceph-volume simple scan /var/lib/ceph/osd/ceph-OSD_ID

      OSD_ID 替换为 OSD ID。

      示例

      [root@mon ~]# ceph-volume simple scan /var/lib/ceph/osd/ceph-0
       stderr: lsblk: /var/lib/ceph/osd/ceph-0: not a block device
       stderr: lsblk: /var/lib/ceph/osd/ceph-0: not a block device
       stderr: Unknown device, --name=, --path=, or absolute path in /dev/ or /sys expected.
      Running command: /usr/sbin/cryptsetup status /dev/sdb1
      --> OSD 0 got scanned and metadata persisted to file: /etc/ceph/osd/0-0c9917f7-fce8-42aa-bdec-8c2cf2d536ba.json
      --> To take over management of this scanned OSD, and disable ceph-disk and udev, run:
      -->     ceph-volume simple activate 0 0c9917f7-fce8-42aa-bdec-8c2cf2d536ba

      对任何其他对象存储设备重复上述步骤。

    3. 激活该设备:

      语法

      ceph-volume simple activate OSD_ID UUID

      OSD_ID 替换为 OSD ID,UUID 替换为之前在扫描输出中输出的 UUID。

      示例

      [root@mon ~]# ceph-volume simple activate 0 0c9917f7-fce8-42aa-bdec-8c2cf2d536ba
      Running command: /usr/bin/ln -snf /dev/sdb2 /var/lib/ceph/osd/ceph-0/journal
      Running command: /usr/bin/chown -R ceph:ceph /dev/sdb2
      Running command: /usr/bin/systemctl enable ceph-volume@simple-0-0c9917f7-fce8-42aa-bdec-8c2cf2d536ba
       stderr: Created symlink /etc/systemd/system/multi-user.target.wants/ceph-volume@simple-0-0c9917f7-fce8-42aa-bdec-8c2cf2d536ba.service → /usr/lib/systemd/system/ceph-volume@.service.
      Running command: /usr/bin/ln -sf /dev/null /etc/systemd/system/ceph-disk@.service
      --> All ceph-disk systemd units have been disabled to prevent OSDs getting triggered by UDEV events
      Running command: /usr/bin/systemctl enable --runtime ceph-osd@0
       stderr: Created symlink /run/systemd/system/ceph-osd.target.wants/ceph-osd@0.service → /usr/lib/systemd/system/ceph-osd@.service.
      Running command: /usr/bin/systemctl start ceph-osd@0
      --> Successfully activated OSD 0 with FSID 0c9917f7-fce8-42aa-bdec-8c2cf2d536ba

      对任何其他对象存储设备重复上述步骤。

  20. 可选:如果您的 OSD 是使用 ceph-volume 创建的,并且您没有完成上一步,请立即启动 OSD 服务:

    [root@mon ~]# systemctl start ceph-osd.target
  21. 激活 OSD:

    BlueStore

    [root@mon ~]# ceph-volume lvm activate --all

  22. 验证 OSDs 为 upin,它们处于 active+clean 状态。

    [root@mon ~]# ceph -s

    services: 下的 osd: 行中,确定所有 OSDs 都为 upin

    示例

    osd: 3 osds: 3 up (since 8s), 3 in (since 3M)

  23. 在所有 OSD 节点上重复上述步骤,直到它们都已升级。
  24. 如果从 Red Hat Ceph Storage 3 升级,则不允许预先Nautilus OSD 并启用只有 Nautilus 的功能:

    [root@mon ~]# ceph osd require-osd-release nautilus
    注意

    未能执行此步骤会导致 OSD 在启用 msgrv2 后无法进行通信。

  25. 从 Red Hat Ceph Storage 3 升级到 Red Hat Ceph Storage 4 后,即可执行以下步骤:

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

      [root@mon ~]# ceph mon enable-msgr2

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

    2. 在每个节点上,将 ceph.conf 文件中的任何配置选项导入到存储集群的配置数据库中:

      示例

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

      注意

      当将配置填充到监控器时,例如,如果您为同一组选项设置了不同的配置值,则最终结果会取决于文件完成的顺序。

    3. 检查存储集群的配置数据库:

      示例

      [root@mon ~]# ceph config dump