5.4. 使用 Ansible 配置双向镜像
此流程使用 ceph-ansible 来配置双向复制,以便镜像可以按照称为 site-a 和 site-b 的两个集群之间的任一方向进行镜像。在以下示例中,data 是包含要镜像的镜像的池名称。
双向镜像不允许对任一集群中的同一镜像同时写入。镜像在一个集群中被提升并降级到另一个集群中。根据自己的状态,它们将从一个方向或另一个方向进行镜像。
先决条件
- 两个正在运行的 Red Hat Ceph Storage 集群。
- 每个集群都有一个客户端节点。
- 两个集群中都存在具有相同名称的池。
- 池中的镜像必须为基于日志的镜像启用 exclusive-lock 和日志记录。
流程
在镜像源自的集群中,在镜像上启用 exclusive-lock 和 journaling 功能。
对于新镜像,使用
--image-feature选项:语法
rbd create IMAGE_NAME --size MEGABYTES --pool POOL_NAME --image-feature FEATURE[,FEATURE]
rbd create IMAGE_NAME --size MEGABYTES --pool POOL_NAME --image-feature FEATURE[,FEATURE]Copy to Clipboard Copied! Toggle word wrap Toggle overflow 示例
rbd create image1 --size 1024 --pool data --image-feature exclusive-lock,journaling
[root@rbd-client ~]# rbd create image1 --size 1024 --pool data --image-feature exclusive-lock,journalingCopy to Clipboard Copied! Toggle word wrap Toggle overflow 对于现有镜像,请使用
rbd feature enable命令:语法
rbd feature enable POOL_NAME/IMAGE_NAME FEATURE_NAME
rbd feature enable POOL_NAME/IMAGE_NAME FEATURE_NAMECopy to Clipboard Copied! Toggle word wrap Toggle overflow 示例
rbd feature enable data/image1 exclusive-lock,journaling
[root@rbd-client ~]# rbd feature enable data/image1 exclusive-lock,journalingCopy to Clipboard Copied! Toggle word wrap Toggle overflow 要默认在所有新镜像上启用专用锁定和日志记录功能,请在 Ceph 配置文件中添加以下设置:
rbd_default_features = 125
rbd_default_features = 125Copy to Clipboard Copied! Toggle word wrap Toggle overflow
在
site-a集群中,完成以下步骤:在 monitor 节点上,创建
rbd-mirror守护进程将用来连接到集群的用户。该示例创建了一个site-a用户,并将密钥输出到名为site-a.client.site-a.keyring的文件,Ceph 配置文件为/etc/ceph/site-a.conf。语法
ceph auth get-or-create client.PRIMARY_CLUSTER_NAME mon 'profile rbd' osd 'profile rbd pool=data' -o /etc/ceph/PRIMARY_CLUSTER_NAME.client.USER_NAME.keyring -c /etc/ceph/PRIMARY_CLUSTER_NAME.conf
ceph auth get-or-create client.PRIMARY_CLUSTER_NAME mon 'profile rbd' osd 'profile rbd pool=data' -o /etc/ceph/PRIMARY_CLUSTER_NAME.client.USER_NAME.keyring -c /etc/ceph/PRIMARY_CLUSTER_NAME.confCopy to Clipboard Copied! Toggle word wrap Toggle overflow 示例
ceph auth get-or-create client.site-a mon 'profile rbd' osd 'profile rbd pool=data' -o /etc/ceph/site-a.client.site-a.keyring -c /etc/ceph/site-a.conf
[root@mon ~]# ceph auth get-or-create client.site-a mon 'profile rbd' osd 'profile rbd pool=data' -o /etc/ceph/site-a.client.site-a.keyring -c /etc/ceph/site-a.confCopy to Clipboard Copied! Toggle word wrap Toggle overflow 将密钥环复制到
site-b集群。将 文件复制到rbd-daemon将在其上运行的site-b集群中的客户端节点。将文件保存到/etc/ceph/site-a.client.site-a.keyring:语法
scp /etc/ceph/PRIMARY_CLUSTER_NAME.client.USER_NAME.keyring root@SECONDARY_CLIENT_NODE_NAME:/etc/ceph/PRIMARY_CLUSTER_NAME.client.USER_NAME.keyring
scp /etc/ceph/PRIMARY_CLUSTER_NAME.client.USER_NAME.keyring root@SECONDARY_CLIENT_NODE_NAME:/etc/ceph/PRIMARY_CLUSTER_NAME.client.USER_NAME.keyringCopy to Clipboard Copied! Toggle word wrap Toggle overflow 示例
scp /etc/ceph/site-a.client.site-a.keyring root@client.site-b:/etc/ceph/site-a.client.site-a.keyring
[root@mon ~]# scp /etc/ceph/site-a.client.site-a.keyring root@client.site-b:/etc/ceph/site-a.client.site-a.keyringCopy to Clipboard Copied! Toggle word wrap Toggle overflow 将 Ceph 配置文件从 monitor 节点复制到
site-b监控节点和客户端节点。本例中的 Ceph 配置文件为/etc/ceph/site-a.conf。语法
scp /etc/ceph/PRIMARY_CLUSTER_NAME.conf root@SECONDARY_MONITOR_NODE_NAME:/etc/ceph/PRIMARY_CLUSTER_NAME.conf scp /etc/ceph/PRIMARY_CLUSTER_NAME.conf user@SECONDARY_CLIENT_NODE_NAME:/etc/ceph/PRIMARY_CLUSTER_NAME.conf
scp /etc/ceph/PRIMARY_CLUSTER_NAME.conf root@SECONDARY_MONITOR_NODE_NAME:/etc/ceph/PRIMARY_CLUSTER_NAME.conf scp /etc/ceph/PRIMARY_CLUSTER_NAME.conf user@SECONDARY_CLIENT_NODE_NAME:/etc/ceph/PRIMARY_CLUSTER_NAME.confCopy to Clipboard Copied! Toggle word wrap Toggle overflow 示例
scp /etc/ceph/site-a.conf root@mon.site-b:/etc/ceph/site-a.conf scp /etc/ceph/site-a.conf user@client.site-b:/etc/ceph/site-a.conf
[root@mon ~]# scp /etc/ceph/site-a.conf root@mon.site-b:/etc/ceph/site-a.conf [root@mon ~]# scp /etc/ceph/site-a.conf user@client.site-b:/etc/ceph/site-a.confCopy to Clipboard Copied! Toggle word wrap Toggle overflow
在
site-b集群中,完成以下步骤:-
配置从
site-a到site-b的镜像功能。在 Ansible 管理节点上,在 Ansible 清单文件中添加[rbdmirrors]组,通常为/usr/share/ceph-ansible/hosts。 在
[rbdmirrors]组下,添加rbd-mirror守护进程将要运行的site-b客户端节点的名称。此守护进程拉取从site-a到site-b的镜像更改。示例
[rbdmirrors] client.site-b
[rbdmirrors] client.site-bCopy to Clipboard Copied! Toggle word wrap Toggle overflow 进入
/usr/share/ceph-ansible/目录:cd /usr/share/ceph-ansible
[root@admin ~]$ cd /usr/share/ceph-ansibleCopy to Clipboard Copied! Toggle word wrap Toggle overflow 通过将 group_vars/rbdmirrors.yml.
sample 复制到.yml 来创建新的group_vars/rbdmirrors.ymlrbdmirrors.yml文件:cp group_vars/rbdmirrors.yml.sample group_vars/rbdmirrors.yml
[root@admin ceph-ansible]# cp group_vars/rbdmirrors.yml.sample group_vars/rbdmirrors.ymlCopy to Clipboard Copied! Toggle word wrap Toggle overflow -
打开并编辑
group_vars/rbdmirrors.yml文件。 将
ceph_rbd_mirror_configure设置为true,并将ceph_rbd_mirror_pool设置为您要在其中镜像镜像的池。在这些示例中,data是池的名称。ceph_rbd_mirror_configure: true ceph_rbd_mirror_pool: "data"
ceph_rbd_mirror_configure: true ceph_rbd_mirror_pool: "data"Copy to Clipboard Copied! Toggle word wrap Toggle overflow 默认情况下,
ceph-ansible使用池模式配置镜像功能,它会镜像池中的所有镜像。启用镜像(mirror)镜像(mirror)的镜像模式。要启用镜像模式,将ceph_rbd_mirror_mode设置为image:ceph_rbd_mirror_mode: image
ceph_rbd_mirror_mode: imageCopy to Clipboard Copied! Toggle word wrap Toggle overflow 在
group_vars/mirrors 的名称。在这些示例中,其他集群是rbdmirrors.yml文件中,为集群设置 rbd-site-a。ceph_rbd_mirror_remote_cluster: "site-a"
ceph_rbd_mirror_remote_cluster: "site-a"Copy to Clipboard Copied! Toggle word wrap Toggle overflow 在 Ansible 管理节点上,使用
group设置密钥的用户名。使用您在创建密钥时使用的相同名称。在这些示例中,该用户命名为_vars/rbdmirrors.yml文件中的 ceph_rbd_mirror_userclient.site-a。ceph_rbd_mirror_remote_user: "client.site-a"
ceph_rbd_mirror_remote_user: "client.site-a"Copy to Clipboard Copied! Toggle word wrap Toggle overflow 以 ansible 用户身份,运行 Ansible playbook:
裸机部署:
ansible-playbook site.yml --limit rbdmirrors -i hosts
[user@admin ceph-ansible]$ ansible-playbook site.yml --limit rbdmirrors -i hostsCopy to Clipboard Copied! Toggle word wrap Toggle overflow 容器部署:
ansible-playbook site-container.yml --limit rbdmirrors -i hosts
[user@admin ceph-ansible]$ ansible-playbook site-container.yml --limit rbdmirrors -i hostsCopy to Clipboard Copied! Toggle word wrap Toggle overflow
-
配置从
验证镜像状态。从
site-b集群的 Ceph 监控节点运行以下命令:示例
基于日志的镜像:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 基于快照的镜像:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 注意根据站点之间的连接,镜像可能需要很长时间才能同步镜像。
在
site-b集群中,完成以下步骤。步骤大体上是相同的:在 monitor 节点上,创建
rbd-mirror守护进程将用来连接到集群的用户。该示例创建了一个site-b用户,并将密钥输出到名为site-b.client.site-b.keyring的文件,Ceph 配置文件为/etc/ceph/site-b.conf。语法
ceph auth get-or-create client.SECONDARY_CLUSTER_NAME mon 'profile rbd' osd 'profile rbd pool=data' -o /etc/ceph/SECONDARY_CLUSTER_NAME.client.USER_NAME.keyring -c /etc/ceph/SECONDARY_CLUSTER_NAME.conf
ceph auth get-or-create client.SECONDARY_CLUSTER_NAME mon 'profile rbd' osd 'profile rbd pool=data' -o /etc/ceph/SECONDARY_CLUSTER_NAME.client.USER_NAME.keyring -c /etc/ceph/SECONDARY_CLUSTER_NAME.confCopy to Clipboard Copied! Toggle word wrap Toggle overflow 示例
ceph auth get-or-create client.site-b mon 'profile rbd' osd 'profile rbd pool=data' -o /etc/ceph/site-b.client.site-b.keyring -c /etc/ceph/site-b.conf
[root@mon ~]# ceph auth get-or-create client.site-b mon 'profile rbd' osd 'profile rbd pool=data' -o /etc/ceph/site-b.client.site-b.keyring -c /etc/ceph/site-b.confCopy to Clipboard Copied! Toggle word wrap Toggle overflow 将密钥环复制到
site-a集群。将文件复制到rbd-daemon将运行于的site-a集群中的客户端节点。将文件保存到/etc/ceph/site-b.client.site-b.keyring:语法
scp /etc/ceph/SECONDARY_CLUSTER_NAME.client.USER_NAME.keyring root@PRIMARY_CLIENT_NODE_NAME:/etc/ceph/SECONDARY_CLUSTER_NAME.client.USER_NAME.keyring
scp /etc/ceph/SECONDARY_CLUSTER_NAME.client.USER_NAME.keyring root@PRIMARY_CLIENT_NODE_NAME:/etc/ceph/SECONDARY_CLUSTER_NAME.client.USER_NAME.keyringCopy to Clipboard Copied! Toggle word wrap Toggle overflow 示例
scp /etc/ceph/site-b.client.site-b.keyring root@client.site-a:/etc/ceph/site-b.client.site-b.keyring
[root@mon ~]# scp /etc/ceph/site-b.client.site-b.keyring root@client.site-a:/etc/ceph/site-b.client.site-b.keyringCopy to Clipboard Copied! Toggle word wrap Toggle overflow 将 Ceph 配置文件从 monitor 节点复制到
site-amonitor 节点和客户端节点。本例中的 Ceph 配置文件为/etc/ceph/site-b.conf。语法
scp /etc/ceph/SECONDARY_CLUSTER_NAME.conf root@PRIMARY_MONITOR_NODE_NAME:/etc/ceph/SECONDARY_CLUSTER_NAME.conf scp /etc/ceph/SECONDARY_CLUSTER_NAME.conf user@PRIMARY_CLIENT_NODE_NAME:/etc/ceph/SECONDARY_CLUSTER_NAME.conf
scp /etc/ceph/SECONDARY_CLUSTER_NAME.conf root@PRIMARY_MONITOR_NODE_NAME:/etc/ceph/SECONDARY_CLUSTER_NAME.conf scp /etc/ceph/SECONDARY_CLUSTER_NAME.conf user@PRIMARY_CLIENT_NODE_NAME:/etc/ceph/SECONDARY_CLUSTER_NAME.confCopy to Clipboard Copied! Toggle word wrap Toggle overflow 示例
scp /etc/ceph/site-b.conf root@mon.site-a:/etc/ceph/site-b.conf scp /etc/ceph/site-b.conf user@client.site-a:/etc/ceph/site-b.conf
[root@mon ~]# scp /etc/ceph/site-b.conf root@mon.site-a:/etc/ceph/site-b.conf [root@mon ~]# scp /etc/ceph/site-b.conf user@client.site-a:/etc/ceph/site-b.confCopy to Clipboard Copied! Toggle word wrap Toggle overflow
在
site-a集群中,完成以下步骤:-
配置从
site-b到site-a的镜像。在 Ansible 管理节点上,在 Ansible 清单文件中添加[rbdmirrors]组,通常为/usr/share/ceph-ansible/hosts。 在
[rbdmirrors]组下,添加rbd-mirror守护进程将要在其中运行的site-a客户端节点的名称。此守护进程拉取从site-b到site-a的镜像更改。示例
[rbdmirrors] client.site-a
[rbdmirrors] client.site-aCopy to Clipboard Copied! Toggle word wrap Toggle overflow 进入
/usr/share/ceph-ansible/目录:cd /usr/share/ceph-ansible
[root@admin ~]# cd /usr/share/ceph-ansibleCopy to Clipboard Copied! Toggle word wrap Toggle overflow 通过将 group_vars/rbdmirrors.yml.
sample 复制到.yml 来创建新的group_vars/rbdmirrors.ymlrbdmirrors.yml文件:cp group_vars/rbdmirrors.yml.sample group_vars/rbdmirrors.yml
[root@admin ceph-ansible]# cp group_vars/rbdmirrors.yml.sample group_vars/rbdmirrors.ymlCopy to Clipboard Copied! Toggle word wrap Toggle overflow -
打开并编辑
group_vars/rbdmirrors.yml文件。 将
ceph_rbd_mirror_configure设置为true,并将ceph_rbd_mirror_pool设置为您要在其中镜像镜像的池。在这些示例中,data是池的名称。ceph_rbd_mirror_configure: true ceph_rbd_mirror_pool: "data"
ceph_rbd_mirror_configure: true ceph_rbd_mirror_pool: "data"Copy to Clipboard Copied! Toggle word wrap Toggle overflow 默认情况下,
ceph-ansible使用池模式配置镜像功能,它会镜像池中的所有镜像。启用镜像(mirror)镜像(mirror)的镜像模式。要启用镜像模式,将ceph_rbd_mirror_mode设置为image:ceph_rbd_mirror_mode: image
ceph_rbd_mirror_mode: imageCopy to Clipboard Copied! Toggle word wrap Toggle overflow 在 Ansible 管理节点上,在
group_vars/rbdmirrors.yml文件中为rbd-mirror的集群设置一个名称。按照示例所示,其他集群名为site-b。ceph_rbd_mirror_remote_cluster: "site-b"
ceph_rbd_mirror_remote_cluster: "site-b"Copy to Clipboard Copied! Toggle word wrap Toggle overflow 在 Ansible 管理节点上,使用
group设置密钥的用户名。在这些示例中,该用户命名为_vars/rbdmirrors.yml文件中的 ceph_rbd_mirror_userclient.site-b。ceph_rbd_mirror_remote_user: "client.site-b"
ceph_rbd_mirror_remote_user: "client.site-b"Copy to Clipboard Copied! Toggle word wrap Toggle overflow 在管理节点上以 Ansible 用户身份,运行 Ansible playbook:
裸机部署:
ansible-playbook site.yml --limit rbdmirrors -i hosts
[user@admin ceph-ansible]$ ansible-playbook site.yml --limit rbdmirrors -i hostsCopy to Clipboard Copied! Toggle word wrap Toggle overflow 容器部署:
ansible-playbook site-container.yml --limit rbdmirrors -i hosts
[user@admin ceph-ansible]$ ansible-playbook site-container.yml --limit rbdmirrors -i hostsCopy to Clipboard Copied! Toggle word wrap Toggle overflow
-
配置从
在
site-a和site-b集群中明确启用镜像的镜像:语法
基于日志的镜像:
rbd mirror image enable POOL/IMAGE
rbd mirror image enable POOL/IMAGECopy to Clipboard Copied! Toggle word wrap Toggle overflow 基于快照的镜像:
rbd mirror image enable POOL/IMAGE snapshot
rbd mirror image enable POOL/IMAGE snapshotCopy to Clipboard Copied! Toggle word wrap Toggle overflow 示例
rbd mirror image enable data/image1 rbd mirror image enable data/image1 snapshot
[root@mon ~]# rbd mirror image enable data/image1 [root@mon ~]# rbd mirror image enable data/image1 snapshotCopy to Clipboard Copied! Toggle word wrap Toggle overflow 注意每当您想要将新镜像镜像到对等集群时,请重复此步骤。
验证镜像状态。在
site-a集群中的客户端节点中运行以下命令:示例
基于日志的镜像:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 基于快照的镜像:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow