4.3. 升级存储集群
步骤
使用 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
文件。打开 并相应地编辑它们。详情请查看 附录 A, 版本 2 和 3 之间的 Ansible 变量更改 和 第 1.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
命令来查看指定客户端的密钥。
当从 2.x 升级到 3.x 时,在
group_vars/all.yml
文件中,将ceph_docker_image
参数更改为指向 Ceph 3 容器版本。ceph_docker_image: rhceph/rhceph-3-rhel7
将
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 Object Gateway 节点,请将
radosgw_interface
参数添加到group_vars/all.yml
文件中。radosgw_interface: <interface>
替换:
-
<interface>
带有 Ceph Object Gateway 节点侦听的接口。
-
从 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]
部分下。与 monitor 节点并置 Ceph 管理器守护进程。从版本 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 .
创建
/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
要将 playbook 用于 Ansible 清单文件上的一组特定的节点,请使用
--limit
选项。详情请查看 第 1.8 节 “了解limit
选项”。在 RBD 镜像守护进程节点上以
root
用户身份登录时,手动升级rbd-mirror
:# yum upgrade rbd-mirror
重启守护进程:
# systemctl restart ceph-rbd-mirror@<client-id>
验证集群健康状况是 OK。
以
root
用户身份登录 monitor 节点,再列出所有正在运行的容器。[root@monitor ~]# docker ps
验证集群运行正常。
[root@monitor ~]# docker exec ceph-mon-<mon-id> ceph -s
替换:
-
<mon-id>
,第一个步骤中找到的 Monitor 容器的名称。
例如:
[root@monitor ~]# docker exec ceph-mon-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 配置集设置。