第 4 章 升级 Red Hat Ceph Storage 集群


本节论述了如何升级到 Red Hat Ceph Storage 的新主版本或次版本。

使用管理节点 /usr/share/ceph-ansible/infrastructure-playbooks/ 目录中的 Ansible rolling_update.yml playbook,在 Red Hat Ceph Storage 的两个主要或次要版本间升级,或者应用异步更新。

Ansible 按照以下顺序升级 Ceph 节点:

  • 监控节点
  • MGR 节点
  • OSD 节点
  • MDS 节点
  • Ceph 对象网关节点
  • 所有其他 Ceph 客户端节点
注意

Red Hat Ceph Storage 3 对位于 /usr/share/ceph-ansible/group_vars/ 目录的 Ansible 配置文件引入了一些更改;某些参数被重命名或删除。因此,在升级到版本 3 后,在从 all.yml.sampleosds.yml.sample 文件创建新副本前,备份 all.ymlosds.yml 文件。有关更改的详情,请查看 附录 H, 版本 2 和版本 3 之间的 Ansible 变量更改

注意

Red Hat Ceph Storage 3.1 及更高版本引入了新的 Ansible playbook,以便在使用对象网关和基于 NVMe 的 SSD(及 SATA SSD)时优化存储的性能。Playbook 通过将日志和 bucket 索引放在 SSD 上来实现此目的,与将所有日志放在一个设备上相比,这可以提高性能。这些 playbook 设计为在安装 Ceph 时使用。现有的 OSD 继续工作,升级期间不需要额外的步骤。无法升级 Ceph 集群,同时重新配置 OSD 以优化存储。若要将不同的设备用于日志或 bucket 索引,需要重新调配 OSD。如需更多信息,请参阅生产环境指南中的 Ceph 对象网关中的最佳使用 NVMe

重要

rolling_update.yml playbook 包含 serial 变量,用于调整要同时更新的节点数量。红帽强烈建议使用默认值 (1),以确保 Ansible 逐一升级集群节点。

重要

如果升级在任何点上失败,请使用 ceph status 命令检查集群状态以了解升级失败的原因。如果您不确定故障原因及如何解决,请联系 红帽支持以获得帮助。

重要

在使用 rolling_update.yml playbook 升级到任何 Red Hat Ceph Storage 3.x 版本时,使用 Ceph 文件系统(CephFS)的用户必须手动更新元数据服务器(MDS)集群。这是因为一个已知问题。

在使用 ceph- ansible rolling-upgrade.yml 升级整个集群前,注释掉 /etc/ansible /hosts 中的 MDS 主机,然后手动升级 MDS。在 /etc/ansible/hosts 文件中:

 #[mdss]
 #host-abc

有关此已知问题的更多详细信息,包括如何更新 MDS 集群,请参阅 Red Hat Ceph Storage 3.0 发行注记

重要

当将 Red Hat Ceph Storage 从以前的版本升级到版本 3.2 时,Ceph Ansible 配置会将对象存储类型默认设置为 BlueStore。如果您仍然希望将 FileStore 用作 OSD 对象存储,则明确将 Ceph Ansible 配置设置为 FileStore。这可确保新部署和替换的 OSD 使用 FileStore。

重要

在使用 rolling_update.yml playbook 升级到任何 Red Hat Ceph Storage 3.x 版本时,如果您使用多站点 Ceph 对象网关配置,则不必手动更新 all.yml 文件来指定多站点配置。

先决条件

  • root 用户身份登录存储集群中的所有节点。
  • 在存储集群中的所有节点上,启用 rhel-7-server-extras-rpms 存储库。

    # subscription-manager repos --enable=rhel-7-server-extras-rpms
  • 如果 Ceph 节点没有连接到 Red Hat Content Delivery Network(CDN),并且您使用 ISO 镜像安装 Red Hat Ceph Storage,请使用最新版本的红帽 Ceph 存储更新本地存储库。详情请查看 第 2.5 节 “启用 Red Hat Ceph Storage Repositories”
  • 如果从 Red Hat Ceph Storage 2.x 升级到 3.x,在 Ansible 管理节点上和 RBD 镜像节点上,启用 Red Hat Ceph Storage 3 Tools 存储库:

    # subscription-manager repos --enable=rhel-7-server-rhceph-3-tools-els-rpms
  • 在 Ansible 管理节点上,启用 Ansible 存储库:

    [root@admin ~]# subscription-manager repos --enable=rhel-7-server-ansible-2.6-rpms
  • 在 Ansible 管理节点上,确保已安装了 ansibleceph-ansible 软件包的最新版本。

    [root@admin ~]# yum update ansible ceph-ansible
  • rolling_update.yml playbook 中,将 health_osd_check_retrieshealth_osd_check_delay 值分别改为 5030

    health_osd_check_retries: 50
    health_osd_check_delay: 30

    设置这些值后,Ansible 将等待每个 OSD 节点最多等待 25 分钟,并且每隔 30 秒检查存储集群运行状况,等待继续升级过程。

    注意

    根据存储集群的已用存储容量,调整 health_osd_check_retries 选项的值。例如,如果您在 436 TB 中使用 218 TB,基本上使用 50% 的存储容量,然后将 health_osd_check_retries 选项设置为 50

  • 如果要升级的集群包含使用 exclusive-lock 功能的 Ceph 块设备镜像,请确保所有 Ceph 块设备用户都有将客户端列入黑名单的权限:

    ceph auth caps client.<ID> mon 'allow r, allow command "osd blacklist"' osd '<existing-OSD-user-capabilities>'

4.1. 升级存储集群

流程

从 Ansible 管理节点使用以下命令:

  1. root 用户身份,导航到 /usr/share/ceph-ansible/ 目录:

    [root@admin ~]# cd /usr/share/ceph-ansible/
  2. 从 Red Hat Ceph Storage 版本 3.x 升级到最新版本时跳过此步骤。备份 group_vars/all.ymlgroup_vars/osds.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.x 升级到最新版本时跳过此步骤。从 Red Hat Ceph Storage 2.x 升级到 3.x 时,创建 group_vars/all.yml.samplegroup_vars/osds.yml.samplegroup_vars/clients.yml.sample 文件的新副本,并将它们分别重命名为 group_vars/all.ymlgroup_vars/osds.ymlgroup_vars/clients.yml。打开并相应地编辑它们。详情请查看 附录 H, 版本 2 和版本 3 之间的 Ansible 变量更改第 3.2 节 “安装 Red Hat Ceph Storage 集群”

    [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. 从 Red Hat Ceph Storage 版本 3.x 升级到最新版本时跳过此步骤。当从 Red Hat Ceph Storage 2.x 升级到 3.x 时,打开 group_vars/clients.yml 文件并取消注释以下行:

    keys:
      - { name: client.test, caps: { mon: "allow r", osd: "allow class-read object_prefix rbd_children, allow rwx pool=test" },  mode: "{{ ceph_keyring_permissions }}" }
    1. 使用实际客户端名称替换 client.test,并在客户端定义行中添加客户端密钥,例如:

      key: "ADD-KEYRING-HERE=="

      现在,整行示例类似如下:

      - { name: client.test, key: "AQAin8tUMICVFBAALRHNrV0Z4MXupRw4v9JQ6Q==", caps: { mon: "allow r", osd: "allow class-read object_prefix rbd_children, allow rwx pool=test" },  mode: "{{ ceph_keyring_permissions }}" }
      注意

      若要获取客户端密钥,可运行 ceph auth get-or-create 命令,以查看指定客户端的密钥。

  5. group_vars/all.yml 文件中,取消注释 upgrade_ceph_packages 选项,并将它设为 True

    upgrade_ceph_packages: True
  6. group_vars/all.yml 文件中,将 ceph_rhcs_version 设置为 3

    ceph_rhcs_version: 3
    注意

    ceph_rhcs_version 选项设置为 3 将引入最新版本的 Red Hat Ceph Storage 3。

  7. group_vars/all.yml 文件中,将 ceph_origin 参数设置为 distro

    ceph_origin: distro
  8. fetch_directory 参数添加到 group_vars/all.yml 文件。

    fetch_directory: <full_directory_path>

    替换:

    • <full_directory_path>,位置一个可写的位置,如 Ansible 用户的主目录。提供用于初始存储集群安装的现有路径。

    如果现有路径丢失或缺失,请首先执行以下操作:

    1. 在现有 group_vars/all.yml 文件中添加以下选项:

      fsid: <add_the_fsid>
      generate_fsid: false
    2. 运行 take-over-existing-cluster.yml Ansible playbook:

      [user@admin ceph-ansible]$ cp infrastructure-playbooks/take-over-existing-cluster.yml .
      [user@admin ceph-ansible]$ ansible-playbook take-over-existing-cluster.yml
  9. 如果要升级的集群包含任何 Ceph 对象网关节点,请将 radosgw_interface 参数添加到 group_vars/all.yml 文件中。

    radosgw_interface: <interface>

    替换:

    • <interface> 以及 Ceph 对象网关节点侦听的接口。
  10. 从 Red Hat Ceph Storage 3.2 开始,默认的 OSD 对象存储是 BlueStore。若要保留传统的 OSD 对象存储,您必须将 osd_objectstore 选项明确设置为 group_vars/all.yml 文件中的 filestore

    osd_objectstore: filestore
    注意

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

  11. 在位于 /etc/ansible/hosts 的 Ansible 清单文件中,将 Ceph Manager(ceph-mgr)节点添加到 [mgrs] 部分下。将 Ceph 管理器守护进程与 monitor 节点并置。从 3.x 升级到最新版本时跳过此步骤。

    [mgrs]
    <monitor-host-name>
    <monitor-host-name>
    <monitor-host-name>
  12. rolling_update.ymlinfrastructure-playbooks 目录中复制到当前目录中。

    [root@admin ceph-ansible]# cp infrastructure-playbooks/rolling_update.yml .
    重要

    不要将 limit ansible 选项与 rolling_update.yml 搭配使用。

  13. 创建 /var/log/ansible/ 目录,并为 ansible 用户分配适当的权限:

    [root@admin ceph-ansible]# mkdir /var/log/ansible
    [root@admin ceph-ansible]# chown ansible:ansible  /var/log/ansible
    [root@admin ceph-ansible]# chmod 755 /var/log/ansible
    1. 编辑 /usr/share/ceph-ansible/ansible.cfg 文件,更新 log_path 值,如下所示:

      log_path = /var/log/ansible/ansible.log
  14. 以 Ansible 用户身份,运行 playbook:

    [user@admin ceph-ansible]$ ansible-playbook rolling_update.yml
  15. 在以 root 用户身份登录 RBD 镜像守护进程节点时,请手动升级 rbd-mirror

    # yum upgrade rbd-mirror

    重启守护进程:

    # systemctl restart  ceph-rbd-mirror@<client-id>
  16. 验证集群运行状况是否为 OK。以 root 用户身份登陆到监控节点,再运行 ceph status 命令。
[root@monitor ~]# ceph -s
  1. 如果在 OpenStack 环境中工作,请更新所有 cephx 用户,以将 RBD 配置文件用于池。以下命令必须以 root 用户身份运行

    • Glance 用户

      ceph auth caps client.glance mon 'profile rbd' osd 'profile rbd pool=<glance-pool-name>'

      示例

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

    • 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@monitor ~]# ceph auth caps client.cinder mon 'profile rbd' osd 'profile rbd pool=volumes, profile rbd pool=vms, profile rbd-read-only pool=images'

    • 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@monitor ~]# 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 配置集设置。

Red Hat logoGithubRedditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

通过我们的产品和服务,以及可以信赖的内容,帮助红帽用户创新并实现他们的目标。

让开源更具包容性

红帽致力于替换我们的代码、文档和 Web 属性中存在问题的语言。欲了解更多详情,请参阅红帽博客.

關於紅帽

我们提供强化的解决方案,使企业能够更轻松地跨平台和环境(从核心数据中心到网络边缘)工作。

© 2024 Red Hat, Inc.