7.3. 使用 Ansible 升级存储集群

使用 Ansible 部署工具,您可以通过执行滚动升级来升级 Red Hat Ceph Storage 集群。除非另有说明,否则这些步骤适用于裸机和容器部署。

先决条件

  • 对 Ansible 管理节点的根级别访问权限.
  • ansible 用户帐户。

流程

  1. 进入 /usr/share/ceph-ansible/ 目录:

    示例

    [root@admin ~]# cd /usr/share/ceph-ansible/

  2. 如果从 Red Hat Ceph Storage 3 升级到 Red Hat Ceph Storage 4,请备份 group_vars/all.ymlgroup_vars/osds.ymlgroup_vars/clients.yml 文件:

    [root@admin ceph-ansible]# cp group_vars/all.yml group_vars/all_old.yml
    [root@admin ceph-ansible]# cp group_vars/osds.yml group_vars/osds_old.yml
    [root@admin ceph-ansible]# cp group_vars/clients.yml group_vars/clients_old.yml
  3. 如果从 Red Hat Ceph Storage 3 升级到 Red Hat Ceph Storage 4,请分别将 group_vars/all.yml.samplegroup_vars/osds.yml.samplegroup_vars/clients.yml.sample 文件重命名为 group_vars/all.ymlgroup_vars/osds.ymlgroup_vars/clients.yml。基于之前备份的副本的更改,打开并相应地编辑它们。

    [root@admin ceph-ansible]# cp group_vars/all.yml.sample group_vars/all.yml
    [root@admin ceph-ansible]# cp group_vars/osds.yml.sample group_vars/osds.yml
    [root@admin ceph-ansible]# cp group_vars/clients.yml.sample group_vars/clients.yml
  4. 编辑 group_vars/osds.yml 文件。添加并设置以下选项:

    nb_retry_wait_osd_up: 60
    delay_wait_osd_up: 10
    注意

    这些是默认值;您可以根据用例修改值。

  5. 如果升级到 Red Hat Ceph Storage 4 的一个新次版本,请验证 group_vars/all.ymlgrafana_container_image 的值与 group_vars/all.yml.sample 中的值相同。如果它不同,请将其编辑为:

    示例

    grafana_container_image: registry.redhat.io/rhceph/rhceph-4-dashboard-rhel8:4

    注意

    显示的镜像路径包含在 ceph-ansible 版本 4.0.23-1 中。

  6. 从示例文件中复制最新的 site.ymlsite-container.yml 文件:

    1. 对于裸机部署:

      [root@admin ceph-ansible]# cp site.yml.sample site.yml
    2. 对于容器部署:

      [root@admin ceph-ansible]# cp site-container.yml.sample site-container.yml
  7. 打开 group_vars/all.yml 文件,再编辑下列选项:

    1. 添加 fetch_directory 选项:

      fetch_directory: FULL_DIRECTORY_PATH
      替换
      • FULL_DIRECTORY_PATH,位置一个可写的位置,如 Ansible 用户的主目录。
    2. 如果要升级的集群包含任何 Ceph 对象网关节点,请添加 radosgw_interface 选项:

      radosgw_interface: INTERFACE
      替换
      • INTERFACE,具有 Ceph 对象网关节点侦听的接口。
    3. 如果您的当前设置配置了 SSL 证书,您需要编辑以下内容:

      radosgw_frontend_ssl_certificate: /etc/pki/ca-trust/extracted/CERTIFICATE_NAME
      radosgw_frontend_port: 443
    4. 默认 OSD 对象存储为 BlueStore。要保留传统的 OSD 对象存储,您必须将 osd_objectstore 选项明确设置为 filestore

      osd_objectstore: filestore
      注意

      osd_objectstore 选项设置为 filestore 时,替换 OSD 将使用 FileStore,而不是 BlueStore。

      重要

      从 Red Hat Ceph Storage 4 开始,FileStore 是一项弃用的功能。红帽建议将 FileStore OSD 迁移到 BlueStore OSD。

    5. 从 Red Hat Ceph Storage 4.1 开始,您必须在 /usr/share/ceph-ansible/group_vars/all.yml 中取消注释或设置 dashboard_admin_passwordgrafana_admin_password。为每个用户设置安全密码.另外,为 dashboard_admin_usergrafana_admin_user 设置自定义用户名。
    6. 对于裸机容器部署:

      1. 取消注释 upgrade_ceph_packages 选项并将其设置为 True

        upgrade_ceph_packages: True
      2. ceph_rhcs_version 选项设置为 4

        ceph_rhcs_version: 4
        注意

        ceph_rhcs_version 选项设置为 4 将拉取最新版本的 Red Hat Ceph Storage 4。

      3. ceph_docker_registry 信息添加到 all.yml

        语法

        ceph_docker_registry: registry.redhat.io
        ceph_docker_registry_username: SERVICE_ACCOUNT_USER_NAME
        ceph_docker_registry_password: TOKEN

        注意

        如果您没有 Red Hat Registry Service Account,请使用 Registry Service Account 网页 创建一个。如需了解更多详细信息,请参阅 Red Hat Container Registry 身份验证 知识库文章。

        注意

        除了将服务帐户用于 ceph_docker_registry_usernameceph_docker_registry_password 参数外,您还可以使用客户门户凭据,但若要确保安全性,可以对 ceph_docker_registry_password 参数进行加密。如需更多信息,请参阅使用 ansible-vault 加密 Ansible 密码变量

    7. 对于容器部署:

      1. 更改 ceph_docker_image 选项以指向 Ceph 4 容器版本:

        ceph_docker_image: rhceph/rhceph-4-rhel8
      2. 更改 ceph_docker_image_tag 选项,使其指向 rhceph/rhceph-4-rhel8 的最新版本:

        ceph_docker_image_tag: latest
  8. 如果从 Red Hat Ceph Storage 3 升级到 Red Hat Ceph Storage 4,请打开 Ansible 清单文件进行编辑,默认为 /etc/ansible/hosts,并在 [grafana-server] 部分下添加 Ceph 仪表板节点名称或 IP 地址。如果此部分不存在,还要将本节与节点名称或 IP 地址一起添加。
  9. 切换到或以 Ansible 用户身份登录,然后运行 rolling_update.yml playbook:

    [ansible@admin ceph-ansible]$ ansible-playbook infrastructure-playbooks/rolling_update.yml -i hosts
    重要

    不支持将 --limit Ansible 选项与 rolling_update.yml playbook 搭配使用。

  10. 作为 RBD 镜像守护进程节点上的 root 用户,手动升级 rbd-mirror 软件包:

    [root@rbd ~]# yum upgrade rbd-mirror
  11. 重启 rbd-mirror 守护进程:

    systemctl restart ceph-rbd-mirror@CLIENT_ID
  12. 验证存储集群的运行状况。

    1. 对于裸机部署,以 root 用户身份登录监控节点,运行 Ceph status 命令:

      [root@mon ~]# ceph -s
    2. 对于容器部署,请以 root 用户身份登录 Ceph 监控节点。

      1. 列出所有正在运行的容器:

        Red Hat Enterprise Linux 7

        [root@mon ~]# docker ps

        Red Hat Enterprise Linux 8

        [root@mon ~]# podman ps

      2. 检查健康状态:

        Red Hat Enterprise Linux 7

        [root@mon ~]# docker exec ceph-mon-MONITOR_NAME ceph -s

        Red Hat Enterprise Linux 8

        [root@mon ~]# podman exec ceph-mon-MONITOR_NAME ceph -s

        替换
        • MONITOR_NAME,使用带有上一步中找到的 Ceph monitor 容器的名称。

          示例

          [root@mon ~]# podman exec ceph-mon-mon01 ceph -s

  13. 可选:如果从 Red Hat Ceph Storage 3.x 升级到 Red Hat Ceph Storage 4.x,您可能会看到这个健康状况警告:Legacy BlueStore stats reporting detected on 336 OSD(s).这是因为较新的代码计算池统计不同。您可以通过设置 bluestore_fsck_quick_fix_on_mount 参数来解决这个问题。

    1. bluestore_fsck_quick_fix_on_mount 设置为 true

      示例

      [root@mon ~]# ceph config set osd bluestore_fsck_quick_fix_on_mount true

    2. 设置 nooutnorebalance 标志,以防止 OSD 停机时出现数据移动:

      示例

      [root@mon ~]# ceph osd set noout
      [root@mon ~]# ceph osd set norebalance

    3. 对于 裸机部署,请在存储集群的每个 OSD 节点上重启 ceph-osd.target

      示例

      [root@osd ~]# systemctl restart ceph-osd.target

    4. 对于 容器化部署,请在另一个 OSD 后重启各个 OSD,并等待所有放置组都处于 active+clean 状态。

      语法

      systemctl restart ceph-osd@OSD_ID.service

      示例

      [root@osd ~]# systemctl restart ceph-osd@0.service

    5. 当所有 OSD 被修复时,取消设置 noutnorebalance 标记:

      示例

      [root@mon ~]# ceph osd unset noout
      [root@mon ~]# ceph osd unset norebalance

    6. 当所有 OSD 修复后,将 bluestore_fsck_quick_fix_on_mount 设置为 false

      示例

      [root@mon ~]# ceph config set osd bluestore_fsck_quick_fix_on_mount false

    7. 可选: 裸机部署 的一个替代方法是停止 OSD 服务,使用 ceph-bluestore-tool 命令在 OSD 上运行修复功能,然后启动 OSD 服务:

      1. 停止 OSD 服务:

        [root@osd ~]# systemctl stop ceph-osd.target
      2. 在 OSD 上运行修复功能,指定其实际 OSD ID:

        语法

        ceph-bluestore-tool --path /var/lib/ceph/osd/ceph-OSDID repair

        示例

        [root@osd ~]# ceph-bluestore-tool --path /var/lib/ceph/osd/ceph-2 repair

      3. 启动 OSD 服务:

        [root@osd ~]# systemctl start ceph-osd.target
  14. 升级完成后,您可以通过运行 Ansible playbook 将 FileStore OSD 迁移到 BlueStore OSD:

    语法

    ansible-playbook infrastructure-playbooks/filestore-to-bluestore.yml --limit OSD_NODE_TO_MIGRATE

    示例

    [ansible@admin ceph-ansible]$ ansible-playbook infrastructure-playbooks/filestore-to-bluestore.yml --limit osd01

    迁移完成后,请执行以下子步骤:

    1. 打开以编辑 group_vars/osds.yml 文件,并将 osd_objectstore 选项设置为 bluestore,例如:

      osd_objectstore: bluestore
    2. 如果您使用 lvm_volumes 变量,分别将 journaljournal_vg 选项改为 dbdb_vg,例如:

      之前

      lvm_volumes:
        - data: /dev/sdb
          journal: /dev/sdc1
        - data: /dev/sdd
          journal: journal1
          journal_vg: journals

      转换为 Bluestore 后

      lvm_volumes:
        - data: /dev/sdb
          db: /dev/sdc1
        - data: /dev/sdd
          db: journal1
          db_vg: journals

  15. 如果在 OpenStack 环境中工作,请更新所有 cephx 用户,以将 RBD 配置文件用于池。以下命令必须以 root 用户身份运行:

    1. Glance 用户:

      语法

      ceph auth caps client.glance mon 'profile rbd' osd 'profile rbd pool=GLANCE_POOL_NAME'

      示例

      [root@mon ~]# ceph auth caps client.glance mon 'profile rbd' osd 'profile rbd pool=images'

    2. Cinder 用户:

      语法

      ceph auth caps client.cinder mon 'profile rbd' osd 'profile rbd pool=CINDER_VOLUME_POOL_NAME, profile rbd pool=NOVA_POOL_NAME, profile rbd-read-only pool=GLANCE_POOL_NAME'

      示例

      [root@mon ~]# ceph auth caps client.cinder mon 'profile rbd' osd 'profile rbd pool=volumes, profile rbd pool=vms, profile rbd-read-only pool=images'

    3. OpenStack 常规用户:

      语法

      ceph auth caps client.openstack mon 'profile rbd' osd 'profile rbd-read-only pool=CINDER_VOLUME_POOL_NAME, profile rbd pool=NOVA_POOL_NAME, profile rbd-read-only pool=GLANCE_POOL_NAME'

      示例

      [root@mon ~]# ceph auth caps client.openstack mon 'profile rbd' osd 'profile rbd-read-only pool=volumes, profile rbd pool=vms, profile rbd-read-only pool=images'

      重要

      在执行任何实时客户端迁移前,进行这些 CAPS 更新。这使得客户端能够使用内存中运行的新库,从而导致旧 CAPS 设置从缓存中丢弃并应用新的 RBD 配置集设置。

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

    注意

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

其它资源