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 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
Red Hat Enterprise Linux 9
subscription-manager repos --enable=rhceph-5-tools-for-rhel-9-x86_64-rpms
在 Ansible 管理节点上,确保安装了最新版本的
ansible
和ceph-ansible
软件包。语法
dnf update ansible ceph-ansible
进入
/usr/share/ceph-ansible/
目录:示例
[root@admin ~]# cd /usr/share/ceph-ansible
如果从 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
。示例
[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.yml
-
如果从 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
文件中存在与集群相关的所有设置。示例
fetch_directory: ~/ceph-ansible-keys monitor_interface: eth0 public_network: 192.168.0.0/24 ceph_docker_registry_auth: true ceph_docker_registry_username: SERVICE_ACCOUNT_USER_NAME ceph_docker_registry_password: TOKEN dashboard_admin_user: DASHBOARD_ADMIN_USERNAME dashboard_admin_password: DASHBOARD_ADMIN_PASSWORD grafana_admin_user: GRAFANA_ADMIN_USER grafana_admin_password: GRAFANA_ADMIN_PASSWORD radosgw_interface: eth0 ceph_docker_image: "rhceph/rhceph-5-rhel8" ceph_docker_image_tag: "latest" ceph_docker_registry: "registry.redhat.io" node_exporter_container_image: registry.redhat.io/openshift4/ose-prometheus-node-exporter:v4.6 grafana_container_image: registry.redhat.io/rhceph/rhceph-5-dashboard-rhel8:5 prometheus_container_image: registry.redhat.io/openshift4/ose-prometheus:v4.6 alertmanager_container_image: registry.redhat.io/openshift4/ose-prometheus-alertmanager:v4.6
注意确保将 Red Hat Ceph Storage 5 容器镜像设置为默认值。
编辑
group_vars/osds.yml
文件。添加并设置以下选项:语法
nb_retry_wait_osd_up: 50 delay_wait_osd_up: 30
打开
group_vars/all.yml
文件,并验证旧的all.yml
文件中是否存在以下值:使用来自旧
all.yml
文件中的值相同的值设置fetch_directory
选项:语法
fetch_directory: FULL_DIRECTORY_PATH
将 FULL_DIRECTORY_PATH 替换为可写入位置,如 Ansible 用户的主目录。
如果要升级的集群包含任何 Ceph 对象网关节点,请添加
radosgw_interface
选项:radosgw_interface: INTERFACE
将 INTERFACE 替换为 Ceph 对象网关节点侦听的接口。
如果您的当前设置配置了 SSL 证书,请编辑以下内容:
语法
radosgw_frontend_ssl_certificate: /etc/pki/ca-trust/extracted/CERTIFICATE_NAME radosgw_frontend_port: 443
取消注释
upgrade_ceph_packages
选项并将其设置为True
:语法
upgrade_ceph_packages: True
如果存储集群每个节点有多个 Ceph 对象网关实例,请取消注释
radosgw_num_instances
设置并将其设置为集群中每个节点的实例数量:语法
radosgw_num_instances : NUMBER_OF_INSTANCES_PER_NODE
示例
radosgw_num_instances : 2
-
如果存储集群定义了 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
示例
[ceph: root@host01 /]# radosgw-admin bucket reshard --num-shards 11 --bucket mybucket
-
在 Ansible 管理节点上,以
ansible-user
身份登录。 使用
--extra-vars
选项更新infrastructure-playbooks/rolling_update.yml
playbook,并将health_osd_check_retries
和health_osd_check_delay
值分别更改为50
和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"
对于每个 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.yml
playbook,将存储集群从 Red Hat Ceph Storage 4 转换为 Red Hat Ceph Storage 5:语法
ansible-playbook -vvvv infrastructure-playbooks/rolling_update.yml -i INVENTORY_FILE
vvvv 选项收集升级过程的详细日志。
示例
[ceph-admin@admin ceph-ansible]$ ansible-playbook -vvvv infrastructure-playbooks/rolling_update.yml -i hosts
重要不支持将
--limit
Ansible 选项与rolling_update.yml
playbook 搭配使用。- 查看 Ansible playbook 日志输出,以验证升级的状态。
验证
列出所有正在运行的容器:
示例
[root@mon ~]# podman ps
检查集群的健康状况。将 MONITOR_ID 替换为上一步中找到的 Ceph Monitor 容器的名称:
语法
podman exec ceph-mon-MONITOR_ID ceph -s
示例
[root@mon ~]# podman exec ceph-mon-mon01 ceph -s
验证 Ceph 集群守护进程版本,以确认升级所有守护进程。将 MONITOR_ID 替换为上一步中找到的 Ceph Monitor 容器的名称:
语法
podman exec ceph-mon-MONITOR_ID ceph --cluster ceph versions
示例
[root@mon ~]# podman exec ceph-mon-mon01 ceph --cluster ceph versions