5.4. 使用 Ansible 配置双向镜像


此流程使用 ceph-ansible 来配置双向复制,以便镜像可以按照称为 site-asite-b 的两个集群之间的任一方向进行镜像。在以下示例中,data 是包含要镜像的镜像的池名称。

注意

双向镜像不允许对任一集群中的同一镜像同时写入。镜像在一个集群中被提升并降级到另一个集群中。根据自己的状态,它们将从一个方向或另一个方向进行镜像。

先决条件

  • 两个正在运行的 Red Hat Ceph Storage 集群。
  • 每个集群都有一个客户端节点。
  • 两个集群中都存在具有相同名称的池。
  • 池中的镜像必须为基于日志的镜像启用 exclusive-lock 和日志记录。

流程

  1. 在镜像源自的集群中,在镜像上启用 exclusive-lock 和 journaling 功能。

    1. 对于新镜像,使用 --image-feature 选项:

      语法

      rbd create IMAGE_NAME --size MEGABYTES --pool POOL_NAME --image-feature FEATURE[,FEATURE]
      Copy to Clipboard Toggle word wrap

      示例

      [root@rbd-client ~]# rbd create image1 --size 1024 --pool data --image-feature exclusive-lock,journaling
      Copy to Clipboard Toggle word wrap

    2. 对于现有镜像,请使用 rbd feature enable 命令:

      语法

      rbd feature enable POOL_NAME/IMAGE_NAME FEATURE_NAME
      Copy to Clipboard Toggle word wrap

      示例

      [root@rbd-client ~]# rbd feature enable data/image1 exclusive-lock,journaling
      Copy to Clipboard Toggle word wrap

    3. 要默认在所有新镜像上启用专用锁定和日志记录功能,请在 Ceph 配置文件中添加以下设置:

      rbd_default_features = 125
      Copy to Clipboard Toggle word wrap
  2. site-a 集群中,完成以下步骤:

    1. 在 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
      Copy to Clipboard Toggle word wrap

      示例

      [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.conf
      Copy to Clipboard Toggle word wrap

    2. 将密钥环复制到 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
      Copy to Clipboard Toggle word wrap

      示例

      [root@mon ~]# scp /etc/ceph/site-a.client.site-a.keyring root@client.site-b:/etc/ceph/site-a.client.site-a.keyring
      Copy to Clipboard Toggle word wrap

    3. 将 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
      Copy to Clipboard Toggle word wrap

      示例

      [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.conf
      Copy to Clipboard Toggle word wrap

  3. site-b 集群中,完成以下步骤:

    1. 配置从 site-asite-b 的镜像功能。在 Ansible 管理节点上,在 Ansible 清单文件中添加 [rbdmirrors] 组,通常为 /usr/share/ceph-ansible/hosts
    2. [rbdmirrors] 组下,添加 rbd-mirror 守护进程将要运行的 site-b 客户端节点的名称。此守护进程拉取从 site-asite-b 的镜像更改。

      示例

      [rbdmirrors]
      client.site-b
      Copy to Clipboard Toggle word wrap

    3. 进入 /usr/share/ceph-ansible/ 目录:

      [root@admin ~]$ cd /usr/share/ceph-ansible
      Copy to Clipboard Toggle word wrap
    4. 通过将 group_vars/rbdmirrors.yml. sample 复制到 group_vars/rbdmirrors.yml .yml 来创建新的 rbdmirrors.yml 文件:

      [root@admin ceph-ansible]# cp group_vars/rbdmirrors.yml.sample group_vars/rbdmirrors.yml
      Copy to Clipboard Toggle word wrap
    5. 打开并编辑 group_vars/rbdmirrors.yml 文件。
    6. ceph_rbd_mirror_configure 设置为 true,并将 ceph_rbd_mirror_pool 设置为您要在其中镜像镜像的池。在这些示例中,data 是池的名称。

      ceph_rbd_mirror_configure: true
      ceph_rbd_mirror_pool: "data"
      Copy to Clipboard Toggle word wrap
    7. 默认情况下,ceph-ansible 使用池模式配置镜像功能,它会镜像池中的所有镜像。启用镜像(mirror)镜像(mirror)的镜像模式。要启用镜像模式,将 ceph_rbd_mirror_mode 设置为 image

      ceph_rbd_mirror_mode: image
      Copy to Clipboard Toggle word wrap
    8. group_vars/ rbdmirrors.yml 文件中,为集群设置 rbd- mirrors 的名称。在这些示例中,其他集群是 site-a

      ceph_rbd_mirror_remote_cluster: "site-a"
      Copy to Clipboard Toggle word wrap
    9. 在 Ansible 管理节点上,使用 group _vars/rbdmirrors.yml 文件中的 ceph_rbd_mirror_user 设置密钥的用户名。使用您在创建密钥时使用的相同名称。在这些示例中,该用户命名为 client.site-a

      ceph_rbd_mirror_remote_user: "client.site-a"
      Copy to Clipboard Toggle word wrap
    10. 以 ansible 用户身份,运行 Ansible playbook:

      • 裸机部署:

        [user@admin ceph-ansible]$ ansible-playbook site.yml --limit rbdmirrors -i hosts
        Copy to Clipboard Toggle word wrap
      • 容器部署:

        [user@admin ceph-ansible]$ ansible-playbook site-container.yml --limit rbdmirrors -i hosts
        Copy to Clipboard Toggle word wrap
  4. 验证镜像状态。从 site-b 集群的 Ceph 监控节点运行以下命令:

    示例

    基于日志的镜像:

    [root@mon ~]# rbd mirror image status data/image1
    image1:
      global_id:   7d486c3f-d5a1-4bee-ae53-6c4f1e0c8eac
      state:       up+replaying 
    1
    
      description: replaying, master_position=[object_number=3, tag_tid=1, entry_tid=3], mirror_position=[object_number=3, tag_tid=1, entry_tid=3], entries_behind_master=0
      last_update: 2021-04-22 13:19:27
    Copy to Clipboard Toggle word wrap

    基于快照的镜像:

    [root@mon ~]# rbd mirror image status data/image1
    image1:
      global_id:   06acc9e6-a63d-4aa1-bd0d-4f3a79b0ae33
      state:       up+replaying 
    1
    
      description: replaying, {"bytes_per_second":0.0,"bytes_per_snapshot":0.0,"local_snapshot_timestamp":1642689843,"remote_snapshot_timestamp":1642689843,"replay_state":"idle"}
      service:     admin on ceph-rbd2-vasi-43-5hwia4-node2
      last_update: 2022-01-20 12:41:57
    Copy to Clipboard Toggle word wrap
    1 1
    如果镜像处于 up+replaying 状态,则镜像可以正常工作。
    注意

    根据站点之间的连接,镜像可能需要很长时间才能同步镜像。

  5. site-b 集群中,完成以下步骤。步骤大体上是相同的:

    1. 在 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
      Copy to Clipboard Toggle word wrap

      示例

      [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.conf
      Copy to Clipboard Toggle word wrap

    2. 将密钥环复制到 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
      Copy to Clipboard Toggle word wrap

      示例

      [root@mon ~]# scp /etc/ceph/site-b.client.site-b.keyring root@client.site-a:/etc/ceph/site-b.client.site-b.keyring
      Copy to Clipboard Toggle word wrap

    3. 将 Ceph 配置文件从 monitor 节点复制到 site-a monitor 节点和客户端节点。本例中的 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
      Copy to Clipboard Toggle word wrap

      示例

      [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.conf
      Copy to Clipboard Toggle word wrap

  6. site-a 集群中,完成以下步骤:

    1. 配置从 site-bsite-a 的镜像。在 Ansible 管理节点上,在 Ansible 清单文件中添加 [rbdmirrors] 组,通常为 /usr/share/ceph-ansible/hosts
    2. [rbdmirrors] 组下,添加 rbd-mirror 守护进程将要在其中运行的 site-a 客户端节点的名称。此守护进程拉取从 site-bsite-a 的镜像更改。

      示例

      [rbdmirrors]
      client.site-a
      Copy to Clipboard Toggle word wrap

    3. 进入 /usr/share/ceph-ansible/ 目录:

      [root@admin ~]# cd /usr/share/ceph-ansible
      Copy to Clipboard Toggle word wrap
    4. 通过将 group_vars/rbdmirrors.yml. sample 复制到 group_vars/rbdmirrors.yml .yml 来创建新的 rbdmirrors.yml 文件:

      [root@admin ceph-ansible]# cp group_vars/rbdmirrors.yml.sample group_vars/rbdmirrors.yml
      Copy to Clipboard Toggle word wrap
    5. 打开并编辑 group_vars/rbdmirrors.yml 文件。
    6. ceph_rbd_mirror_configure 设置为 true,并将 ceph_rbd_mirror_pool 设置为您要在其中镜像镜像的池。在这些示例中,data 是池的名称。

      ceph_rbd_mirror_configure: true
      ceph_rbd_mirror_pool: "data"
      Copy to Clipboard Toggle word wrap
    7. 默认情况下,ceph-ansible 使用池模式配置镜像功能,它会镜像池中的所有镜像。启用镜像(mirror)镜像(mirror)的镜像模式。要启用镜像模式,将 ceph_rbd_mirror_mode 设置为 image

      ceph_rbd_mirror_mode: image
      Copy to Clipboard Toggle word wrap
    8. 在 Ansible 管理节点上,在 group_vars/rbdmirrors.yml 文件中为 rbd-mirror 的集群设置一个名称。按照示例所示,其他集群名为 site-b

      ceph_rbd_mirror_remote_cluster: "site-b"
      Copy to Clipboard Toggle word wrap
    9. 在 Ansible 管理节点上,使用 group _vars/rbdmirrors.yml 文件中的 ceph_rbd_mirror_user 设置密钥的用户名。在这些示例中,该用户命名为 client.site-b

      ceph_rbd_mirror_remote_user: "client.site-b"
      Copy to Clipboard Toggle word wrap
    10. 在管理节点上以 Ansible 用户身份,运行 Ansible playbook:

      • 裸机部署:

        [user@admin ceph-ansible]$ ansible-playbook site.yml --limit rbdmirrors -i hosts
        Copy to Clipboard Toggle word wrap
      • 容器部署:

        [user@admin ceph-ansible]$ ansible-playbook site-container.yml --limit rbdmirrors -i hosts
        Copy to Clipboard Toggle word wrap
  7. site-asite-b 集群中明确启用镜像的镜像:

    语法

    基于日志的镜像:

    rbd mirror image enable POOL/IMAGE
    Copy to Clipboard Toggle word wrap

    基于快照的镜像:

    rbd mirror image enable POOL/IMAGE snapshot
    Copy to Clipboard Toggle word wrap

    示例

    [root@mon ~]# rbd mirror image enable data/image1
    [root@mon ~]# rbd mirror image enable data/image1 snapshot
    Copy to Clipboard Toggle word wrap

    注意

    每当您想要将新镜像镜像到对等集群时,请重复此步骤。

  8. 验证镜像状态。在 site-a 集群中的客户端节点中运行以下命令:

    示例

    基于日志的镜像:

    [root@mon ~]# rbd mirror image status data/image1
    image1:
      global_id:   08027096-d267-47f8-b52e-59de1353a034
      state:       up+stopped 
    1
    
      description: local image is primary
      last_update: 2021-04-16 15:45:31
    Copy to Clipboard Toggle word wrap

    基于快照的镜像:

    [root@mon ~]# rbd mirror image status data/image1
    image1:
      global_id:   47fd1aae-5f19-4193-a5df-562b5c644ea7
      state:       up+stopped 
    1
    
      description: local image is primary
      service:     admin on ceph-rbd1-vasi-43-5hwia4-node2
      last_update: 2022-01-20 12:42:54
      peer_sites:
        name: rbd-mirror.site-b
        state: up+replaying
        description: replaying, {"bytes_per_second":0.0,"bytes_per_snapshot":0.0,"local_snapshot_timestamp":1642693094,"remote_snapshot_timestamp":1642693094,"replay_state":"idle"}
        last_update: 2022-01-20 12:42:59
      snapshots:
        5 .mirror.primary.47fd1aae-5f19-4193-a5df-562b5c644ea7.dda146c6-5f21-4e75-ba93-660f6e57e301 (peer_uuids:[bfd09289-c9c9-40c8-b2d3-ead9b6a99a45])
    Copy to Clipboard Toggle word wrap
    1 1
    镜像应处于 up+stopped 状态。在这里,up 表示 rbd-mirror 守护进程正在运行,stopped 意味着镜像不是从另一集群复制的目标。这是因为镜像是这个集群上的主要镜像。
返回顶部
Red Hat logoGithubredditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

通过我们的产品和服务,以及可以信赖的内容,帮助红帽用户创新并实现他们的目标。 了解我们当前的更新.

让开源更具包容性

红帽致力于替换我们的代码、文档和 Web 属性中存在问题的语言。欲了解更多详情,请参阅红帽博客.

關於紅帽

我们提供强化的解决方案,使企业能够更轻松地跨平台和环境(从核心数据中心到网络边缘)工作。

Theme

© 2025 Red Hat