4.7. 使用单向镜像从灾难中恢复


要使用单向镜像功能,可以从灾难中恢复,请使用以下步骤:它们演示了如何在主集群终止后切换到次要集群,以及如何故障恢复。关闭可以按照一定顺序进行,也可以不按照一定顺序进行。

在以下示例中,主集群称为 site-a 集群,辅助集群称为 site-b 集群。此外,集群同时有一个含有两个镜像、image1image2 的数据池。

重要

单向镜像支持多个次要站点。如果使用额外的次集群,请选择一个二级集群来切换到它。在故障恢复期间从同一集群同步。

先决条件

顺序关闭后故障转移

  1. 停止使用主镜像的所有客户端。此步骤取决于哪些客户端使用该镜像。例如,从使用该镜像的任何 OpenStack 实例分离卷。请参阅 Red Hat OpenStack Platform 13 存储指南中的 块存储和 章节。
  2. site-a 集群中的监控节点中运行以下命令来降级位于 site-a 集群中的主镜像:

    # rbd mirror image demote data/image1
    # rbd mirror image demote data/image2
  3. site-b 集群中的监控节点中运行以下命令来提升位于 site-b 集群中的非主镜像:

    # rbd mirror image promote data/image1
    # rbd mirror image promote data/image2
  4. 经过一段时间后,检查 site-b 集群中监控节点中的镜像状态。它们应当显示 up+stopped 状态,描述应该显示 状态:

    # rbd mirror image status data/image1
    image1:
      global_id:   08027096-d267-47f8-b52e-59de1353a034
      state:       up+stopped
      description: local image is primary
      last_update: 2019-04-17 13:18:36
    # rbd mirror image status data/image2
    image2:
      global_id:   596f41bc-874b-4cd4-aefe-4929578cc834
      state:       up+stopped
      description: local image is primary
      last_update: 2019-04-17 13:18:36

Non-Orderly Shutdown 后故障转移

  1. 验证主集群是否已停机。
  2. 停止使用主镜像的所有客户端。此步骤取决于哪些客户端使用该镜像。例如,从使用该镜像的任何 OpenStack 实例分离卷。请参阅 Red Hat OpenStack Platform 10 存储指南中的 块存储和卷 章节。
  3. site-b 集群中的监控节点提升非主镜像。使用 --force 选项,因为降级无法传播到 site-a 集群:

    # rbd mirror image promote --force data/image1
    # rbd mirror image promote --force data/image2
  4. 检查 site-b 集群中监控节点的镜像状态。它们应当显示 up+stopping_replay 状态,描述应显示 force promoted

    # rbd mirror image status data/image1
    image1:
      global_id:   08027096-d267-47f8-b52e-59de1353a034
      state:       up+stopping_replay
      description: force promoted
      last_update: 2019-04-17 13:25:06
    # rbd mirror image status data/image2
    image2:
      global_id:   596f41bc-874b-4cd4-aefe-4929578cc834
      state:       up+stopping_replay
      description: force promoted
      last_update: 2019-04-17 13:25:06

准备故障恢复

当以前的主集群恢复时,无法将其恢复。

如果两个集群最初只配置为单向镜像,则必须配置主集群以进行镜像,以便按照相反方向复制镜像。

  1. site-a 集群的客户端节点上,安装 rbd-mirror 软件包。软件包由 Red Hat Ceph Storage 3 Tools 存储库提供。

    Red Hat Enterprise Linux

    # yum install rbd-mirror

    Ubuntu

    $ sudo apt-get install rbd-mirror
  2. site-a 集群的客户端节点上,通过在适当的文件中添加 CLUSTER 选项来指定集群名称。在 Red Hat Enterprise Linux 上,更新 /etc/sysconfig/ceph 文件,并在 Ubuntu 中相应地更新 /etc/default/ceph 文件:

    CLUSTER=site-b
  3. site-b Ceph 配置文件和 RBD 密钥环文件从 site-b 监控器复制到 site-a 监控和客户端节点:

    # scp /etc/ceph/ceph.conf <user>@<site-a_mon-host-name>:/etc/ceph/site-b.conf
    # scp /etc/ceph/site-b.client.site-b.keyring root@<site-a_mon-host-name>:/etc/ceph/
    # scp /etc/ceph/ceph.conf user@<site-a_client-host-name>:/etc/ceph/site-b.conf
    # scp /etc/ceph/site-b.client.site-b.keyring user@<site-a_client-host-name>:/etc/ceph/
    注意

    将 Ceph 配置文件从 site-b 监控节点传输到 site-a 监控和客户端节点的 scp 命令,将文件重命名为 site-a.conf。密钥环文件名保持不变。

  4. site-a RBD 密钥环文件从 site-a 监控节点复制到 site-a 客户端节点:

    # scp /etc/ceph/site-a.client.site-a.keyring <user>@<site-a_client-host-name>:/etc/ceph/
  5. site-a 客户端节点上启用并启动 rbd-mirror 守护进程:

    systemctl enable ceph-rbd-mirror.target
    systemctl enable ceph-rbd-mirror@<client-id>
    systemctl start ceph-rbd-mirror@<client-id>

    <client-id > 更改为 rbd-mirror 守护进程要使用的 Ceph Storage 集群用户。用户必须具有对集群的适当 cephx 访问权限。如需更多信息,请参阅 Red Hat Ceph Storage 3 管理指南中的用户管理一 章。

    根据使用 site-a 的前导示例,命令将是:

    # systemctl enable ceph-rbd-mirror.target
    # systemctl enable ceph-rbd-mirror@site-a
    # systemctl start ceph-rbd-mirror@site-a
  6. site-a 集群的客户端节点中,将 site-b 集群添加为对等集群:

    # rbd --cluster site-a mirror pool peer add data client.site-b@site-b -n client.site-a

    如果您使用多个次要集群,则必须添加选择故障转移到的二级集群,并从中恢复。

  7. site-a 集群中的一个监控节点中,验证 site-b 集群是否已成功添加为对等集群:

    # rbd mirror pool info -p data
    Mode: image
    Peers:
      UUID                                 NAME   CLIENT
      d2ae0594-a43b-4c67-a167-a36c646e8643 site-b client.site-b

failback

当以前的主集群恢复时,无法将其恢复。

  1. site-a 集群中的监控节点中确定镜像是否仍然是主镜像:

    # rbd info data/image1
    # rbd info data/image2

    在命令的输出中,查找 mirroring primary: truemirroring primary: false 以确定状态。

  2. site-a 集群中的监控节点运行以下命令来降级列为主镜像:

    # rbd mirror image demote data/image1
  3. 如果未按顺序关闭,则仅重新同步镜像。在 site-a 集群的监控节点上运行以下命令,以重新同步从 site-bsite-a 的镜像:

    # rbd mirror image resync data/image1
    Flagged image for resync from primary
    # rbd mirror image resync data/image2
    Flagged image for resync from primary
    1. 一段时间后,通过验证镜像是否处于 up+replaying 状态确保完成镜像重新同步。通过在 site-a 集群中的监控节点上运行以下命令来检查其状态:

      # rbd mirror image status data/image1
      # rbd mirror image status data/image2
  4. site-b 集群的监控节点中运行以下命令来降级 site-b 集群中的镜像:

    # rbd mirror image demote data/image1
    # rbd mirror image demote data/image2
    注意

    如果有多个次要集群,则只需要从提升它的二级集群完成。

  5. site-a 集群的监控节点上运行以下命令来提升位于 site-a 集群上的以前主镜像:

    # rbd mirror image promote data/image1
    # rbd mirror image promote data/image2
  6. 检查 site-a 集群中监控节点的镜像状态。它们应当显示 up+stopped 状态,描述应该为 local image is primary:

    # rbd mirror image status data/image1
    image1:
      global_id:   08027096-d267-47f8-b52e-59de1353a034
      state:       up+stopped
      description: local image is primary
      last_update: 2019-04-22 11:14:51
    # rbd mirror image status data/image2
    image2:
      global_id:   596f41bc-874b-4cd4-aefe-4929578cc834
      state:       up+stopped
      description: local image is primary
      last_update: 2019-04-22 11:14:51

删除双向镜像

在上面的 准备故障恢复 部分中,将双向镜像功能配置为启用从 site-b 集群到 site-a 集群的同步。在故障恢复完成后,可以禁用这些功能。

  1. site-a 集群中删除 site-b 集群作为对等集群:

    $ rbd mirror pool peer remove data client.remote@remote --cluster local
    # rbd --cluster site-a mirror pool peer remove data client.site-b@site-b -n client.site-a
  2. site-a 客户端中停止并禁用 rbd-mirror 守护进程:

    systemctl stop ceph-rbd-mirror@<client-id>
    systemctl disable ceph-rbd-mirror@<client-id>
    systemctl disable ceph-rbd-mirror.target

    例如:

    # systemctl stop ceph-rbd-mirror@site-a
    # systemctl disable ceph-rbd-mirror@site-a
    # systemctl disable ceph-rbd-mirror.target
Red Hat logoGithubRedditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

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

让开源更具包容性

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

關於紅帽

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

© 2024 Red Hat, Inc.