7.3. 使用 Ansible 升级存储集群
使用 Ansible 部署工具,您可以通过执行滚动升级来升级 Red Hat Ceph Storage 集群。除非另有说明,否则这些步骤适用于裸机和容器部署。
先决条件
- 对 Ansible 管理节点的根级别访问权限.
-
ansible
用户帐户。
流程
进入
/usr/share/ceph-ansible/
目录:示例
[root@admin ~]# cd /usr/share/ceph-ansible/
如果从 Red Hat Ceph Storage 3 升级到 Red Hat Ceph Storage 4,请备份
group_vars/all.yml
、group_vars/osds.yml
和group_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
如果从 Red Hat Ceph Storage 3 升级到 Red Hat Ceph Storage 4,请分别将
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
。基于之前备份的副本的更改,打开并相应地编辑它们。[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
编辑
group_vars/osds.yml
文件。添加并设置以下选项:nb_retry_wait_osd_up: 60 delay_wait_osd_up: 10
注意这些是默认值;您可以根据用例修改值。
如果升级到 Red Hat Ceph Storage 4 的一个新次版本,请验证
group_vars/all.yml
中grafana_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 中。从示例文件中复制最新的
site.yml
或site-container.yml
文件:对于裸机部署:
[root@admin ceph-ansible]# cp site.yml.sample site.yml
对于容器部署:
[root@admin ceph-ansible]# cp site-container.yml.sample site-container.yml
打开
group_vars/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
默认 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。
-
从 Red Hat Ceph Storage 4.1 开始,您必须在
/usr/share/ceph-ansible/group_vars/all.yml
中取消注释或设置dashboard_admin_password
和grafana_admin_password
。为每个用户设置安全密码.另外,为dashboard_admin_user
和grafana_admin_user
设置自定义用户名。 对于裸机和容器部署:
取消注释
upgrade_ceph_packages
选项并将其设置为True
:upgrade_ceph_packages: True
将
ceph_rhcs_version
选项设置为4
:ceph_rhcs_version: 4
注意将
ceph_rhcs_version
选项设置为4
将拉取最新版本的 Red Hat Ceph Storage 4。将
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_username
和ceph_docker_registry_password
参数外,您还可以使用客户门户凭据,但若要确保安全性,可以对ceph_docker_registry_password
参数进行加密。如需更多信息,请参阅使用 ansible-vault 加密 Ansible 密码变量。
对于容器部署:
更改
ceph_docker_image
选项以指向 Ceph 4 容器版本:ceph_docker_image: rhceph/rhceph-4-rhel8
更改
ceph_docker_image_tag
选项,使其指向rhceph/rhceph-4-rhel8
的最新版本:ceph_docker_image_tag: latest
-
如果从 Red Hat Ceph Storage 3 升级到 Red Hat Ceph Storage 4,请打开 Ansible 清单文件进行编辑,默认为
/etc/ansible/hosts
,并在[grafana-server]
部分下添加 Ceph 仪表板节点名称或 IP 地址。如果此部分不存在,还要将本节与节点名称或 IP 地址一起添加。 切换到或以 Ansible 用户身份登录,然后运行
rolling_update.yml
playbook:[ansible@admin ceph-ansible]$ ansible-playbook infrastructure-playbooks/rolling_update.yml -i hosts
重要不支持将
--limit
Ansible 选项与rolling_update.yml
playbook 搭配使用。作为 RBD 镜像守护进程节点上的
root
用户,手动升级rbd-mirror
软件包:[root@rbd ~]# yum upgrade rbd-mirror
重启
rbd-mirror
守护进程:systemctl restart ceph-rbd-mirror@CLIENT_ID
验证存储集群的运行状况。
对于裸机部署,以
root
用户身份登录监控节点,运行 Ceph status 命令:[root@mon ~]# ceph -s
对于容器部署,请以
root
用户身份登录 Ceph 监控节点。列出所有正在运行的容器:
Red Hat Enterprise Linux 7
[root@mon ~]# docker ps
Red Hat Enterprise Linux 8
[root@mon ~]# podman ps
检查健康状态:
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
可选:如果从 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
参数来解决这个问题。将
bluestore_fsck_quick_fix_on_mount
设置为true
:示例
[root@mon ~]# ceph config set osd bluestore_fsck_quick_fix_on_mount true
设置
noout
和norebalance
标志,以防止 OSD 停机时出现数据移动:示例
[root@mon ~]# ceph osd set noout [root@mon ~]# ceph osd set norebalance
对于 裸机部署,请在存储集群的每个 OSD 节点上重启
ceph-osd.target
:示例
[root@osd ~]# systemctl restart ceph-osd.target
对于 容器化部署,请在另一个 OSD 后重启各个 OSD,并等待所有放置组都处于
active+clean
状态。语法
systemctl restart ceph-osd@OSD_ID.service
示例
[root@osd ~]# systemctl restart ceph-osd@0.service
当所有 OSD 被修复时,取消设置
nout
和norebalance
标记:示例
[root@mon ~]# ceph osd unset noout [root@mon ~]# ceph osd unset norebalance
当所有 OSD 修复后,将
bluestore_fsck_quick_fix_on_mount
设置为false
:示例
[root@mon ~]# ceph config set osd bluestore_fsck_quick_fix_on_mount false
可选: 裸机部署 的一个替代方法是停止 OSD 服务,使用
ceph-bluestore-tool
命令在 OSD 上运行修复功能,然后启动 OSD 服务:停止 OSD 服务:
[root@osd ~]# systemctl stop ceph-osd.target
在 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
启动 OSD 服务:
[root@osd ~]# systemctl start ceph-osd.target
升级完成后,您可以通过运行 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
迁移完成后,请执行以下子步骤:
打开以编辑
group_vars/osds.yml
文件,并将osd_objectstore
选项设置为bluestore
,例如:osd_objectstore: bluestore
如果您使用
lvm_volumes
变量,分别将journal
和journal_vg
选项改为db
和db_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
如果在 OpenStack 环境中工作,请更新所有
cephx
用户,以将 RBD 配置文件用于池。以下命令必须以root
用户身份运行: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'
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'
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 配置集设置。
可选:在客户端节点上,重新启动依赖于 Ceph 客户端侧库的任何应用。
注意如果您要升级运行 QEMU 或 KVM 实例的 OpenStack Nova 计算节点,或使用专用 QEMU 或 KVM 客户端,请停止并启动 QEMU 或 KVM 实例,因为在此情况下重启实例不起作用。
其它资源
- 如需了解更多详细信息,请参阅了解 limit 选项。
- 如需更多信息,请参阅 Red Hat Ceph Storage Administration Guide 中的 How to migrate the object store from FileStore to BlueStore。
- 如需了解更多详细信息,请参阅 ceph-upgrade cluster status 报告 'Legacy BlueStore stats reporting'。