第 4 章 升级 Red Hat Ceph Storage 集群
本节论述了如何升级到 Red Hat Ceph Storage 的新主版本或次版本。
- 要升级存储集群,请参阅 第 4.1 节 “升级存储集群”。
- 要升级 Red Hat Ceph Storage Dashboard,请参阅 第 4.2 节 “升级 Red Hat Ceph Storage Dashboard”。
使用管理节点 /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
有关此已知问题的更多详细信息,包括如何更新 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 管理节点上,确保已安装了
ansible
和ceph-ansible
软件包的最新版本。[root@admin ~]# yum update ansible ceph-ansible
在
rolling_update.yml
playbook 中,将health_osd_check_retries
和health_osd_check_delay
值分别改为50
和30
。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 管理节点使用以下命令:
以
root
用户身份,导航到/usr/share/ceph-ansible/
目录:[root@admin ~]# cd /usr/share/ceph-ansible/
从 Red Hat Ceph Storage 版本 3.x 升级到最新版本时跳过此步骤。备份
group_vars/all.yml
和group_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
从 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 集群”。[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
从 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 }}" }
使用实际客户端名称替换
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
命令,以查看指定客户端的密钥。
在
group_vars/all.yml
文件中,取消注释upgrade_ceph_packages
选项,并将它设为True
。upgrade_ceph_packages: True
在
group_vars/all.yml
文件中,将ceph_rhcs_version
设置为3
。ceph_rhcs_version: 3
注意将
ceph_rhcs_version
选项设置为3
将引入最新版本的 Red Hat Ceph Storage 3。在
group_vars/all.yml
文件中,将ceph_origin
参数设置为distro
:ceph_origin: distro
将
fetch_directory
参数添加到group_vars/all.yml
文件。fetch_directory: <full_directory_path>
替换:
-
<full_directory_path>
,位置一个可写的位置,如 Ansible 用户的主目录。提供用于初始存储集群安装的现有路径。
如果现有路径丢失或缺失,请首先执行以下操作:
在现有
group_vars/all.yml
文件中添加以下选项:fsid: <add_the_fsid> generate_fsid: false
运行
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
-
如果要升级的集群包含任何 Ceph 对象网关节点,请将
radosgw_interface
参数添加到group_vars/all.yml
文件中。radosgw_interface: <interface>
替换:
-
<interface>
以及 Ceph 对象网关节点侦听的接口。
-
从 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。在位于
/etc/ansible/hosts
的 Ansible 清单文件中,将 Ceph Manager(ceph-mgr
)节点添加到[mgrs]
部分下。将 Ceph 管理器守护进程与 monitor 节点并置。从 3.x 升级到最新版本时跳过此步骤。[mgrs] <monitor-host-name> <monitor-host-name> <monitor-host-name>
将
rolling_update.yml
从infrastructure-playbooks
目录中复制到当前目录中。[root@admin ceph-ansible]# cp infrastructure-playbooks/rolling_update.yml .
重要不要将
limit
ansible 选项与rolling_update.yml
搭配使用。创建
/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
编辑
/usr/share/ceph-ansible/ansible.cfg
文件,更新log_path
值,如下所示:log_path = /var/log/ansible/ansible.log
以 Ansible 用户身份,运行 playbook:
[user@admin ceph-ansible]$ ansible-playbook rolling_update.yml
在以
root
用户身份登录 RBD 镜像守护进程节点时,请手动升级rbd-mirror
:# yum upgrade rbd-mirror
重启守护进程:
# systemctl restart ceph-rbd-mirror@<client-id>
-
验证集群运行状况是否为 OK。以
root
用户身份登陆到监控节点,再运行 ceph status 命令。
[root@monitor ~]# ceph -s
如果在 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 配置集设置。