第 4 章 升级 Red Hat Ceph Storage 集群
本节论述了如何升级到 Red Hat Ceph Storage 的新主版本或次版本。
在以前的版本中,红帽没有为 Ubuntu 提供 ceph-ansible 软件包。在 Red Hat Ceph Storage 版本 3 及更高版本中,您可以使用 Ansible 自动化应用程序从 Ubuntu 节点升级 Ceph 集群。
- 要升级存储集群,请参阅 第 4.1 节 “升级存储集群”。
使用管理节点 /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.sample 和 osds.yml.sample 文件创建新副本前,备份 all.yml 和 osds.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- 中的 MDS 主机,然后手动升级 MDS。在 ansible /hostsrolling-upgrade.yml 升级整个集群前,注释掉 /etc/ansible/etc/ansible/hosts 文件中:
#[mdss] #host-abc
#[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 文件来指定多站点配置。
先决条件
- 如果 Ceph 节点没有连接到 Red Hat Content Delivery Network(CDN),并且您使用 ISO 镜像安装 Red Hat Ceph Storage,请使用最新版本的红帽 Ceph 存储更新本地存储库。详情请查看 第 2.4 节 “启用 Red Hat Ceph Storage Repositories”。
如果从 Red Hat Ceph Storage 2.x 升级到 3.x,在 Ansible 管理节点上和 RBD 镜像节点上,启用 Red Hat Ceph Storage 3 Tools 存储库:
sudo bash -c 'umask 0077; echo deb https://customername:customerpasswd@rhcs.download.redhat.com/3-updates/Tools $(lsb_release -sc) main | tee /etc/apt/sources.list.d/Tools.list' sudo bash -c 'wget -O - https://www.redhat.com/security/fd431d51.txt | apt-key add -' sudo apt-get update
[root@admin ~]$ sudo bash -c 'umask 0077; echo deb https://customername:customerpasswd@rhcs.download.redhat.com/3-updates/Tools $(lsb_release -sc) main | tee /etc/apt/sources.list.d/Tools.list' [root@admin ~]$ sudo bash -c 'wget -O - https://www.redhat.com/security/fd431d51.txt | apt-key add -' [root@admin ~]$ sudo apt-get updateCopy to Clipboard Copied! Toggle word wrap Toggle overflow 如果从 RHCS 2.x 升级到 3.x,或从 RHCS 3.x 升级到 Ansible 管理节点上的最新版本,请确保安装了
ceph-ansible软件包的最新版本。sudo apt-get install ceph-ansible
[root@admin ~]$ sudo apt-get install ceph-ansibleCopy to Clipboard Copied! Toggle word wrap Toggle overflow 在
rolling_update.ymlplaybook 中,将health_osd_check_retries和health_osd_check_delay值分别改为50和30。health_osd_check_retries: 50 health_osd_check_delay: 30
health_osd_check_retries: 50 health_osd_check_delay: 30Copy to Clipboard Copied! Toggle word wrap Toggle overflow 设置这些值后,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>'
ceph auth caps client.<ID> mon 'allow r, allow command "osd blacklist"' osd '<existing-OSD-user-capabilities>'Copy to Clipboard Copied! Toggle word wrap Toggle overflow
4.1. 升级存储集群 复制链接链接已复制到粘贴板!
流程
从 Ansible 管理节点使用以下命令:
以
root用户身份,导航到/usr/share/ceph-ansible/目录:cd /usr/share/ceph-ansible/
[root@admin ~]# cd /usr/share/ceph-ansible/Copy to Clipboard Copied! Toggle word wrap Toggle overflow 从 Red Hat Ceph Storage 版本 3.x 升级到最新版本时跳过此步骤。备份
group_vars/all.yml和group_vars/osds.yml文件。cp group_vars/all.yml group_vars/all_old.yml cp group_vars/osds.yml group_vars/osds_old.yml cp group_vars/clients.yml group_vars/clients_old.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.ymlCopy to Clipboard Copied! Toggle word wrap Toggle overflow 从 Red Hat Ceph Storage 版本 3.x 升级到最新版本时跳过此步骤。从 Red Hat Ceph Storage 2.x 升级到 3.x 时,创建
group_vars/all.yml.sample、group_vars/osds.yml.sample和group_vars/clients.yml.sample文件的新副本,并将它们分别重命名为group_vars/all.yml、group_vars/osds.yml和group_vars/clients.yml。打开并相应地编辑它们。详情请查看 附录 H, 版本 2 和版本 3 之间的 Ansible 变量更改 和 第 3.2 节 “安装 Red Hat Ceph Storage 集群”。cp group_vars/all.yml.sample group_vars/all.yml cp group_vars/osds.yml.sample group_vars/osds.yml cp group_vars/clients.yml.sample group_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.ymlCopy to Clipboard Copied! Toggle word wrap Toggle overflow 从 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 }}" }keys: - { name: client.test, caps: { mon: "allow r", osd: "allow class-read object_prefix rbd_children, allow rwx pool=test" }, mode: "{{ ceph_keyring_permissions }}" }Copy to Clipboard Copied! Toggle word wrap Toggle overflow 使用实际客户端名称替换
client.test,并在客户端定义行中添加客户端密钥,例如:key: "ADD-KEYRING-HERE=="
key: "ADD-KEYRING-HERE=="Copy to Clipboard Copied! Toggle word wrap Toggle overflow 现在,整行示例类似如下:
- { 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 }}" }- { 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 }}" }Copy to Clipboard Copied! Toggle word wrap Toggle overflow 注意若要获取客户端密钥,可运行
ceph auth get-or-create命令,以查看指定客户端的密钥。
在
group_vars/all.yml文件中,取消注释upgrade_ceph_packages选项,并将它设为True。upgrade_ceph_packages: True
upgrade_ceph_packages: TrueCopy to Clipboard Copied! Toggle word wrap Toggle overflow 将
fetch_directory参数添加到group_vars/all.yml文件。fetch_directory: <full_directory_path>
fetch_directory: <full_directory_path>Copy to Clipboard Copied! Toggle word wrap Toggle overflow 替换:
-
<full_directory_path>,位置一个可写的位置,如 Ansible 用户的主目录。提供用于初始存储集群安装的现有路径。
如果现有路径丢失或缺失,请首先执行以下操作:
在现有
group_vars/all.yml文件中添加以下选项:fsid: <add_the_fsid> generate_fsid: false
fsid: <add_the_fsid> generate_fsid: falseCopy to Clipboard Copied! Toggle word wrap Toggle overflow 运行
take-over-existing-cluster.ymlAnsible playbook:cp infrastructure-playbooks/take-over-existing-cluster.yml . ansible-playbook take-over-existing-cluster.yml
[user@admin ceph-ansible]$ cp infrastructure-playbooks/take-over-existing-cluster.yml . [user@admin ceph-ansible]$ ansible-playbook take-over-existing-cluster.ymlCopy to Clipboard Copied! Toggle word wrap Toggle overflow
-
如果要升级的集群包含任何 Ceph 对象网关节点,请将
radosgw_interface参数添加到group_vars/all.yml文件中。radosgw_interface: <interface>
radosgw_interface: <interface>Copy to Clipboard Copied! Toggle word wrap Toggle overflow 替换:
-
<interface>以及 Ceph 对象网关节点侦听的接口。
-
从 Red Hat Ceph Storage 3.2 开始,默认的 OSD 对象存储是 BlueStore。若要保留传统的 OSD 对象存储,您必须将
osd_objectstore选项明确设置为group_vars/all.yml文件中的filestore。osd_objectstore: filestore
osd_objectstore: filestoreCopy to Clipboard Copied! Toggle word wrap Toggle overflow 注意将
osd_objectstore选项设置为filestore时,替换 OSD 将使用 FileStore,而不是 BlueStore。在位于
/etc/ansible/hosts的 Ansible 清单文件中,将 Ceph Manager(ceph-mgr)节点添加到[mgrs]部分下。将 Ceph 管理器守护进程与 monitor 节点并置。从 3.x 升级到最新版本时跳过此步骤。[mgrs] <monitor-host-name> <monitor-host-name> <monitor-host-name>
[mgrs] <monitor-host-name> <monitor-host-name> <monitor-host-name>Copy to Clipboard Copied! Toggle word wrap Toggle overflow 将
rolling_update.yml从infrastructure-playbooks目录中复制到当前目录中。cp infrastructure-playbooks/rolling_update.yml .
[root@admin ceph-ansible]# cp infrastructure-playbooks/rolling_update.yml .Copy to Clipboard Copied! Toggle word wrap Toggle overflow 重要不要将
limitansible 选项与rolling_update.yml搭配使用。创建
/var/log/ansible/目录,并为ansible用户分配适当的权限:mkdir /var/log/ansible chown ansible:ansible /var/log/ansible chmod 755 /var/log/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/ansibleCopy to Clipboard Copied! Toggle word wrap Toggle overflow 编辑
/usr/share/ceph-ansible/ansible.cfg文件,更新log_path值,如下所示:log_path = /var/log/ansible/ansible.log
log_path = /var/log/ansible/ansible.logCopy to Clipboard Copied! Toggle word wrap Toggle overflow
以 Ansible 用户身份,运行 playbook:
ansible-playbook rolling_update.yml
[user@admin ceph-ansible]$ ansible-playbook rolling_update.ymlCopy to Clipboard Copied! Toggle word wrap Toggle overflow 在以
root用户身份登录 RBD 镜像守护进程节点时,请手动升级rbd-mirror:sudo apt-get upgrade rbd-mirror
$ sudo apt-get upgrade rbd-mirrorCopy to Clipboard Copied! Toggle word wrap Toggle overflow 重启守护进程:
systemctl restart ceph-rbd-mirror@<client-id>
# systemctl restart ceph-rbd-mirror@<client-id>Copy to Clipboard Copied! Toggle word wrap Toggle overflow -
验证集群运行状况是否为 OK。以
root用户身份登陆到监控节点,再运行 ceph status 命令。
ceph -s
[root@monitor ~]# ceph -s
如果在 OpenStack 环境中工作,请更新所有
cephx用户,以将 RBD 配置文件用于池。以下命令必须以root 用户身份运行:Glance 用户
ceph auth caps client.glance mon 'profile rbd' osd 'profile rbd pool=<glance-pool-name>'
ceph auth caps client.glance mon 'profile rbd' osd 'profile rbd pool=<glance-pool-name>'Copy to Clipboard Copied! Toggle word wrap Toggle overflow 示例
ceph auth caps client.glance mon 'profile rbd' osd 'profile rbd pool=images'
[root@monitor ~]# ceph auth caps client.glance mon 'profile rbd' osd 'profile rbd pool=images'Copy to Clipboard Copied! Toggle word wrap Toggle overflow 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>'
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>'Copy to Clipboard Copied! Toggle word wrap Toggle overflow 示例
ceph auth caps client.cinder mon 'profile rbd' osd 'profile rbd pool=volumes, profile rbd pool=vms, profile rbd-read-only pool=images'
[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'Copy to Clipboard Copied! Toggle word wrap Toggle overflow 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>'
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>'Copy to Clipboard Copied! Toggle word wrap Toggle overflow 示例
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'
[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'Copy to Clipboard Copied! Toggle word wrap Toggle overflow 重要在执行任何实时客户端迁移前,进行这些 CAPS 更新。这使得客户端能够使用内存中运行的新库,从而导致旧 CAPS 设置从缓存中丢弃并应用新的 RBD 配置集设置。