4.3. 升级存储集群
步骤
使用 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.yml
Copy 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
文件。打开 并相应地编辑它们。详情请查看 附录 A, 版本 2 和 3 之间的 Ansible 变量更改 和 第 1.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.yml
Copy 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
命令来查看指定客户端的密钥。
当从 2.x 升级到 3.x 时,在
group_vars/all.yml
文件中,将ceph_docker_image
参数更改为指向 Ceph 3 容器版本。ceph_docker_image: rhceph/rhceph-3-rhel7
ceph_docker_image: rhceph/rhceph-3-rhel7
Copy 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: false
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 运行
take-over-existing-cluster.yml
Ansible 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.yml
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
-
如果要升级的集群包含任何 Ceph Object Gateway 节点,请将
radosgw_interface
参数添加到group_vars/all.yml
文件中。radosgw_interface: <interface>
radosgw_interface: <interface>
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 替换:
-
<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
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 注意将
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>
[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 创建
/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/ansible
Copy 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.log
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
以 Ansible 用户身份,运行 playbook:
ansible-playbook rolling_update.yml
[user@admin ceph-ansible]$ ansible-playbook rolling_update.yml
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 要将 playbook 用于 Ansible 清单文件上的一组特定的节点,请使用
--limit
选项。详情请查看 第 1.8 节 “了解limit
选项”。在 RBD 镜像守护进程节点上以
root
用户身份登录时,手动升级rbd-mirror
:yum upgrade rbd-mirror
# yum upgrade rbd-mirror
Copy 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
用户身份登录 monitor 节点,再列出所有正在运行的容器。docker ps
[root@monitor ~]# docker ps
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 验证集群运行正常。
docker exec ceph-mon-<mon-id> ceph -s
[root@monitor ~]# docker exec ceph-mon-<mon-id> ceph -s
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 替换:
-
<mon-id>
,第一个步骤中找到的 Monitor 容器的名称。
例如:
docker exec ceph-mon-monitor ceph -s
[root@monitor ~]# docker exec ceph-mon-monitor ceph -s
Copy to Clipboard Copied! Toggle word wrap Toggle overflow -
如果在 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 配置集设置。