第 3 章 使用 cephadm 升级 Red Hat Ceph Storage 集群
作为存储管理员,您可以使用 cephadm
Orchestrator 升级 Red Hat Ceph Storage 5.0 及更高版本。
自动化升级流程遵循 Ceph 最佳实践。例如:
- 升级顺序从 Ceph 管理器、Ceph 监控器开始,然后是其他守护进程。
- 只有在 Ceph 指示集群可用后,每一守护进程才会重新启动。
存储集群健康状态可能会在升级过程中切换到 HEALTH_WARNING
。升级完成后,健康状态应该切回到 HEALTH_OK。
支持直接从 Red Hat Ceph Storage 5 升级到 Red Hat Ceph Storage 7。
在 Ceph Object Gateway 存储集群中(单站点或多站点)升级到 Red Hat Ceph Storage 5.2 被支持,但在升级您的存储集群前需要设置 ceph config set mgr mgr/cephadm/no_five_one_rgw true --force
选项。
如需更多信息,请参阅 Red Hat Ceph Storage 5.2 发行注记中的Red Hat Red Hat Ceph Storage 5.2 中的 RADOS Gateway (RGW) 升级支持限制和已知问题部分。
Red Hat Ceph Storage 5 目前不支持 ceph-ansible
。这意味着,当您将存储集群迁移到 Red Hat Ceph Storage 5 后,您必须使用 cephadm
和 cephadm-ansible
执行后续更新。
Red Hat Enterprise Linux 9 及更新的版本不支持 cephadm-ansible
playbook。
升级成功后,您不会收到消息。运行 ceph versions
和 ceph orch ps
命令,以验证新的镜像 ID 和存储集群的版本。
3.1. 升级 Red Hat Ceph Storage 集群
您可以使用 ceph orch upgrade
命令升级 Red Hat Ceph Storage 5.0 集群。
先决条件
- 正在运行的 Red Hat Ceph Storage 集群 5。
- Red Hat Enterprise Linux 8.4 EUS 或更高版本。
- 所有节点的根级别访问权限。
-
具有 sudo 的 Ansible 用户,对存储集群中所有节点的
ssh
访问和免密码访问。 - 存储集群中至少有两个 Ceph 管理器节点:一个活跃节点和一个备用节点。
Red Hat Ceph Storage 5 还包括一个健康检查功能,如果它检测到存储集群中的任何守护进程正在运行多个版本的 RHCS,它会返回 DAEMON_OLD_VERSION 警告。当守护进程继续运行多个版本的 Red Hat Ceph Storage 时,会触发警告,超过 mon_warn_older_version_delay
选项中设置的时间值。默认情况下,mon_warn_older_version_delay
选项设置为 1 周。此设置允许大多数升级进行,而不会看到警告。如果升级过程暂停了较长的时间,您可以屏蔽健康警告:
ceph health mute DAEMON_OLD_VERSION --sticky
升级完成后,取消健康警告:
ceph health unmute DAEMON_OLD_VERSION
流程
更新
cephadm
和cephadm-ansible
软件包:示例
[root@admin ~]# dnf update cephadm [root@admin ~]# dnf update cephadm-ansible
进入
/usr/share/cephadm-ansible/
目录:示例
[root@admin ~]# cd /usr/share/cephadm-ansible
如果创建存储桶或具有
num_shards = 0
, 请在规划升级到 Red Hat Ceph Storage 5.3 前手动重新划分存储桶:语法
radosgw-admin bucket reshard --num-shards 11 --bucket BUCKET_NAME
示例
[ceph: root@host01 /]# radosgw-admin bucket reshard --num-shards 11 --bucket mybucket
在存储集群的 bootstrap 主机上,运行 preflight playbook,并将
upgrade_ceph_packages
参数设置为true
:语法
ansible-playbook -i INVENTORY_FILE cephadm-preflight.yml --extra-vars "ceph_origin=rhcs upgrade_ceph_packages=true"
示例
[ceph-admin@admin cephdm-ansible]$ ansible-playbook -i /etc/ansible/hosts cephadm-preflight.yml --extra-vars "ceph_origin=rhcs upgrade_ceph_packages=true"
此软件包升级所有节点上的
cephadm
。登录
cephadm
shell:示例
[root@host01 ~]# cephadm shell
确定所有主机都在线,并且存储集群处于健康状态:
示例
[ceph: root@host01 /]# ceph -s
设置 OSD
noout
、noscrub
、和nodeep-scrub
标记,以防止 OSD 在升级过程中被标记为 out,并避免对集群造成不必要的负载:示例
[ceph: root@host01 /]# ceph osd set noout [ceph: root@host01 /]# ceph osd set noscrub [ceph: root@host01 /]# ceph osd set nodeep-scrub
检查服务版本和可用目标容器:
语法
ceph orch upgrade check IMAGE_NAME
示例
[ceph: root@host01 /]# ceph orch upgrade check registry.redhat.io/rhceph/rhceph-5-rhel8:latest
注意镜像名称适用于 Red Hat Enterprise Linux 8 和 Red Hat Enterprise Linux 9。
升级存储集群:
语法
ceph orch upgrade start IMAGE_NAME
示例
[ceph: root@host01 /]# ceph orch upgrade start registry.redhat.io/rhceph/rhceph-5-rhel8:latest
注意要执行交错升级,请参阅执行交错升级。
在升级过程中,
ceph status
输出中会出现一个进度条。示例
[ceph: root@host01 /]# ceph status [...] progress: Upgrade to 16.2.0-146.el8cp (1s) [............................]
验证 Ceph 集群的新 IMAGE_ID 和 VERSION :
示例
[ceph: root@host01 /]# ceph versions [ceph: root@host01 /]# ceph orch ps
注意在升级 Ceph 集群后如果不使用
cephadm-ansible
playbook,则必须升级客户端节点上的ceph-common
软件包和客户端库。示例
[root@client01 ~] dnf update ceph-common
验证您是否具有最新版本:
示例
[root@client01 ~] ceph --version
升级完成后,取消设置
noout
、noscrub
和nodeep-scrub
标记:示例
[ceph: root@host01 /]# ceph osd unset noout [ceph: root@host01 /]# ceph osd unset noscrub [ceph: root@host01 /]# ceph osd unset nodeep-scrub