1.9. 升级过程
作为存储管理员,您可以使用 Ansible playbook 将 Red Hat Ceph Storage 4 存储集群升级到 Red Hat Ceph Storage 5。rolling_update.yml Ansible playbook 为部署Red Hat Ceph Storage 执行升级。ceph-ansible 按照以下顺序升级 Ceph 节点:
- Ceph monitor
- Ceph Manager
- Ceph OSD 节点
- MDS 节点
- Ceph 对象网关(RGW)节点
- Ceph RBD-mirror 节点
- Ceph NFS 节点
- Ceph iSCSI 网关节点
- Ceph 客户端节点
- Ceph-crash 守护进程
- 所有节点上的 node-exporter
- Ceph 仪表板
在存储集群从 Red Hat Ceph Storage 4 升级到 Red Hat Ceph Storage 5 后,Grafana UI 会显示两个仪表板。这是因为 Red Hat Ceph Storage 4 中的 Prometheus 端口为 9092,而 Red Hat Ceph Storage 5 为 9095。您可以删除 grafana。cephadm 重新部署服务和守护进程,并在 Grafana UI 上删除旧的仪表板。
Red Hat Ceph Storage 5 仅支持容器化部署。
Red Hat Ceph Storage 5 目前不支持 ceph-ansible。这意味着,当您将存储集群迁移到 Red Hat Ceph Storage 5 后,您必须使用 cephadm 来执行后续更新。
若要部署具有单一域和多个域的多站点 Ceph 对象网关,请编辑 all.yml 文件。有关更多信息,请参阅 Red Hat Ceph Storage 4 安装指南中的配置多站点 Ceph 对象网关。
Red Hat Ceph Storage 5 还包括一个健康检查功能,如果它检测到存储集群中的任何守护进程正在运行多个版本的 Red Hat Ceph Storage,它会返回 DAEMON_OLD_VERSION 警告。当守护进程继续运行多个版本的 Red Hat Ceph Storage 时,会触发警告,超过 mon_warn_older_version_delay 选项中设置的时间值。默认情况下,mon_warn_older_version_delay 选项设置为一周。此设置允许大多数升级进行,而不会看到警告。如果升级过程暂停了较长的时间,您可以屏蔽健康警告:
ceph health mute DAEMON_OLD_VERSION --sticky
ceph health mute DAEMON_OLD_VERSION --sticky
升级完成后,取消健康警告:
ceph health unmute DAEMON_OLD_VERSION
ceph health unmute DAEMON_OLD_VERSION
先决条件
- 一个正在运行的 Red Hat Ceph Storage 集群。
- 对存储集群中所有主机的根级别访问权限。
- 有效的客户订阅。
- 对 Ansible 管理节点的根级别访问权限.
-
Red Hat Ceph Storage 5 提供的最新版本的 Ansible 和
ceph-ansible。 -
用于 Ansible 应用的
ansible用户帐户。 - 存储集群的节点已升级到 Red Hat Enterprise Linux 8.4 EUS 或更高版本。
Ansible 清单文件必须位于 ceph-ansible 目录中。
流程
在 Ansible 管理节点上启用 Ceph 和 Ansible 存储库:
Red Hat Enterprise Linux 8
subscription-manager repos --enable=rhceph-5-tools-for-rhel-8-x86_64-rpms --enable=ansible-2.9-for-rhel-8-x86_64-rpms
subscription-manager repos --enable=rhceph-5-tools-for-rhel-8-x86_64-rpms --enable=ansible-2.9-for-rhel-8-x86_64-rpmsCopy to Clipboard Copied! Toggle word wrap Toggle overflow Red Hat Enterprise Linux 9
subscription-manager repos --enable=rhceph-5-tools-for-rhel-9-x86_64-rpms
subscription-manager repos --enable=rhceph-5-tools-for-rhel-9-x86_64-rpmsCopy to Clipboard Copied! Toggle word wrap Toggle overflow 在 Ansible 管理节点上,确保安装了最新版本的
ansible和ceph-ansible软件包。语法
dnf update ansible ceph-ansible
dnf update ansible ceph-ansibleCopy to Clipboard Copied! Toggle word wrap Toggle overflow 进入
/usr/share/ceph-ansible/目录:示例
cd /usr/share/ceph-ansible
[root@admin ~]# cd /usr/share/ceph-ansibleCopy to Clipboard Copied! Toggle word wrap Toggle overflow 如果从 Red Hat Ceph Storage 4 升级到 Red Hat Ceph Storage 5,请分别将它们重命名为
group_vars/osds.yml.sample和group_vars/clients.yml.sample文件,并将它们重命名为group_vars/osds.yml,并分别重命名为group_vars/clients.yml。示例
cp group_vars/osds.yml.sample group_vars/osds.yml cp group_vars/mdss.yml.sample group_vars/mdss.yml cp group_vars/rgws.yml.sample group_vars/rgws.yml cp group_vars/clients.yml.sample group_vars/clients.yml
[root@admin ceph-ansible]# cp group_vars/osds.yml.sample group_vars/osds.yml [root@admin ceph-ansible]# cp group_vars/mdss.yml.sample group_vars/mdss.yml [root@admin ceph-ansible]# cp group_vars/rgws.yml.sample group_vars/rgws.yml [root@admin ceph-ansible]# cp group_vars/clients.yml.sample group_vars/clients.ymlCopy to Clipboard Copied! Toggle word wrap Toggle overflow -
如果从 Red Hat Ceph Storage 4 升级到 Red Hat Ceph Storage 5,请编辑
group_vars/all.yml文件来添加 Red Hat Ceph Storage 5 详情。 完成上述两个步骤后,将旧
yaml文件中的设置复制到新的yaml文件中。不要更改ceph_rhcs_version、ceph_docker_image和grafana_container_image的值,因为这些配置参数的值适用于 Red Hat Ceph Storage 5。这样可确保当前yaml文件中存在与集群相关的所有设置。示例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 注意确保将 Red Hat Ceph Storage 5 容器镜像设置为默认值。
编辑
group_vars/osds.yml文件。添加并设置以下选项:语法
nb_retry_wait_osd_up: 50 delay_wait_osd_up: 30
nb_retry_wait_osd_up: 50 delay_wait_osd_up: 30Copy to Clipboard Copied! Toggle word wrap Toggle overflow 打开
group_vars/all.yml文件,并验证旧的all.yml文件中是否存在以下值:使用来自旧
all.yml文件中的值相同的值设置fetch_directory选项:语法
fetch_directory: FULL_DIRECTORY_PATH
fetch_directory: FULL_DIRECTORY_PATHCopy to Clipboard Copied! Toggle word wrap Toggle overflow 将 FULL_DIRECTORY_PATH 替换为可写入位置,如 Ansible 用户的主目录。
如果要升级的集群包含任何 Ceph 对象网关节点,请添加
radosgw_interface选项:radosgw_interface: INTERFACE
radosgw_interface: INTERFACECopy to Clipboard Copied! Toggle word wrap Toggle overflow 将 INTERFACE 替换为 Ceph 对象网关节点侦听的接口。
如果您的当前设置配置了 SSL 证书,请编辑以下内容:
语法
radosgw_frontend_ssl_certificate: /etc/pki/ca-trust/extracted/CERTIFICATE_NAME radosgw_frontend_port: 443
radosgw_frontend_ssl_certificate: /etc/pki/ca-trust/extracted/CERTIFICATE_NAME radosgw_frontend_port: 443Copy to Clipboard Copied! Toggle word wrap Toggle overflow 取消注释
upgrade_ceph_packages选项并将其设置为True:语法
upgrade_ceph_packages: True
upgrade_ceph_packages: TrueCopy to Clipboard Copied! Toggle word wrap Toggle overflow 如果存储集群每个节点有多个 Ceph 对象网关实例,请取消注释
radosgw_num_instances设置并将其设置为集群中每个节点的实例数量:语法
radosgw_num_instances : NUMBER_OF_INSTANCES_PER_NODE
radosgw_num_instances : NUMBER_OF_INSTANCES_PER_NODECopy to Clipboard Copied! Toggle word wrap Toggle overflow 示例
radosgw_num_instances : 2
radosgw_num_instances : 2Copy to Clipboard Copied! Toggle word wrap Toggle overflow -
如果存储集群定义了 Ceph 对象网关多站点,请检查
all.yml中的多站点设置,以确保它们包含与旧all.yml文件中相同的值。
如果创建存储桶或具有
num_shards = 0, 请在规划升级到 Red Hat Ceph Storage 5.3 前手动重新划分存储桶:警告当
bucket_index_max_shards为0时,从旧版本升级到 Red Hat Ceph Storage 5.3 可能会导致 Ceph 对象网关存储桶的元数据丢失,从而导致存储桶在尝试访问它时不可用。因此,请确保bucket_index_max_shards设置为11个分片。如果没有,在 zonegroup 级别修改此配置。语法
radosgw-admin bucket reshard --num-shards 11 --bucket BUCKET_NAME
radosgw-admin bucket reshard --num-shards 11 --bucket BUCKET_NAMECopy to Clipboard Copied! Toggle word wrap Toggle overflow 示例
[ceph: root@host01 /]# radosgw-admin bucket reshard --num-shards 11 --bucket mybucket
[ceph: root@host01 /]# radosgw-admin bucket reshard --num-shards 11 --bucket mybucketCopy to Clipboard Copied! Toggle word wrap Toggle overflow -
在 Ansible 管理节点上,以
ansible-user身份登录。 使用
--extra-vars选项更新infrastructure-playbooks/rolling_update.ymlplaybook,并将health_osd_check_retries和health_osd_check_delay值分别更改为50和30:示例
ansible-playbook -i hosts infrastructure-playbooks/rolling_update.yml --extra-vars "health_osd_check_retries=50 health_osd_check_delay=30"
[root@admin ceph-ansible]# ansible-playbook -i hosts infrastructure-playbooks/rolling_update.yml --extra-vars "health_osd_check_retries=50 health_osd_check_delay=30"Copy to Clipboard Copied! Toggle word wrap Toggle overflow 对于每个 OSD 节点,这些值可使
ceph-ansible每 30 秒检查存储集群运行状况,最多 50 次。这意味着ceph-ansible会等待每个 OSD 最多 25 分钟。根据存储集群的已用存储容量,调整
health_osd_check_retries选项的值。例如,如果您使用了 436 TB 中的 218 TB(或 50% 的存储容量),则将health_osd_check_retries选项设置为50。/etc/ansible/hosts是 Ansible 清单文件的默认位置。运行
rolling_update.ymlplaybook,将存储集群从 Red Hat Ceph Storage 4 转换为 Red Hat Ceph Storage 5:语法
ansible-playbook -vvvv infrastructure-playbooks/rolling_update.yml -i INVENTORY_FILE
ansible-playbook -vvvv infrastructure-playbooks/rolling_update.yml -i INVENTORY_FILECopy to Clipboard Copied! Toggle word wrap Toggle overflow vvvv 选项收集升级过程的详细日志。
示例
ansible-playbook -vvvv infrastructure-playbooks/rolling_update.yml -i hosts
[ceph-admin@admin ceph-ansible]$ ansible-playbook -vvvv infrastructure-playbooks/rolling_update.yml -i hostsCopy to Clipboard Copied! Toggle word wrap Toggle overflow 重要不支持将
--limitAnsible 选项与rolling_update.ymlplaybook 搭配使用。- 查看 Ansible playbook 日志输出,以验证升级的状态。
验证
列出所有正在运行的容器:
示例
podman ps
[root@mon ~]# podman psCopy to Clipboard Copied! Toggle word wrap Toggle overflow 检查集群的健康状况。将 MONITOR_ID 替换为上一步中找到的 Ceph Monitor 容器的名称:
语法
podman exec ceph-mon-MONITOR_ID ceph -s
podman exec ceph-mon-MONITOR_ID ceph -sCopy to Clipboard Copied! Toggle word wrap Toggle overflow 示例
podman exec ceph-mon-mon01 ceph -s
[root@mon ~]# podman exec ceph-mon-mon01 ceph -sCopy to Clipboard Copied! Toggle word wrap Toggle overflow 验证 Ceph 集群守护进程版本,以确认升级所有守护进程。将 MONITOR_ID 替换为上一步中找到的 Ceph Monitor 容器的名称:
语法
podman exec ceph-mon-MONITOR_ID ceph --cluster ceph versions
podman exec ceph-mon-MONITOR_ID ceph --cluster ceph versionsCopy to Clipboard Copied! Toggle word wrap Toggle overflow 示例
podman exec ceph-mon-mon01 ceph --cluster ceph versions
[root@mon ~]# podman exec ceph-mon-mon01 ceph --cluster ceph versionsCopy to Clipboard Copied! Toggle word wrap Toggle overflow