4.7. 使用单向镜像从灾难中恢复
要使用单向镜像功能,可以从灾难中恢复,请使用以下步骤:它们演示了如何在主集群终止后切换到次要集群,以及如何故障恢复。关闭可以按照一定顺序进行,也可以不按照一定顺序进行。
在以下示例中,主集群称为 site-a
集群,辅助集群称为 site-b
集群。此外,集群同时有一个含有两个镜像、image1
和 image2
的数据池。
单向镜像支持多个次要站点。如果使用额外的次集群,请选择一个二级集群来切换到它。在故障恢复期间从同一集群同步。
先决条件
- 至少两个正在运行的集群。
- 使用镜像镜像配置的池 镜像或镜像镜像。
顺序关闭后故障转移
- 停止使用主镜像的所有客户端。此步骤取决于哪些客户端使用该镜像。例如,从使用该镜像的任何 OpenStack 实例分离卷。请参阅 Red Hat OpenStack Platform 13 存储指南中的 块存储和 卷 章节。
在
site-a
集群中的监控节点中运行以下命令来降级位于site-a
集群中的主镜像:# rbd mirror image demote data/image1 # rbd mirror image demote data/image2
在
site-b
集群中的监控节点中运行以下命令来提升位于site-b
集群中的非主镜像:# rbd mirror image promote data/image1 # rbd mirror image promote data/image2
经过一段时间后,检查
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 后故障转移
- 验证主集群是否已停机。
- 停止使用主镜像的所有客户端。此步骤取决于哪些客户端使用该镜像。例如,从使用该镜像的任何 OpenStack 实例分离卷。请参阅 Red Hat OpenStack Platform 10 存储指南中的 块存储和卷 章节。
从
site-b
集群中的监控节点提升非主镜像。使用--force
选项,因为降级无法传播到site-a
集群:# rbd mirror image promote --force data/image1 # rbd mirror image promote --force data/image2
检查
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
准备故障恢复
当以前的主集群恢复时,无法将其恢复。
如果两个集群最初只配置为单向镜像,则必须配置主集群以进行镜像,以便按照相反方向复制镜像。
在
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
在
site-a
集群的客户端节点上,通过在适当的文件中添加CLUSTER
选项来指定集群名称。在 Red Hat Enterprise Linux 上,更新/etc/sysconfig/ceph
文件,并在 Ubuntu 中相应地更新/etc/default/ceph
文件:CLUSTER=site-b
将
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
。密钥环文件名保持不变。将
site-a
RBD 密钥环文件从site-a
监控节点复制到site-a
客户端节点:# scp /etc/ceph/site-a.client.site-a.keyring <user>@<site-a_client-host-name>:/etc/ceph/
在
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
在
site-a
集群的客户端节点中,将site-b
集群添加为对等集群:# rbd --cluster site-a mirror pool peer add data client.site-b@site-b -n client.site-a
如果您使用多个次要集群,则必须添加选择故障转移到的二级集群,并从中恢复。
在
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
当以前的主集群恢复时,无法将其恢复。
在
site-a
集群中的监控节点中确定镜像是否仍然是主镜像:# rbd info data/image1 # rbd info data/image2
在命令的输出中,查找
mirroring primary: true
或mirroring primary: false
以确定状态。从
site-a
集群中的监控节点运行以下命令来降级列为主镜像:# rbd mirror image demote data/image1
如果未按顺序关闭,则仅重新同步镜像。在
site-a
集群的监控节点上运行以下命令,以重新同步从site-b
到site-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
一段时间后,通过验证镜像是否处于
up+replaying
状态确保完成镜像重新同步。通过在site-a
集群中的监控节点上运行以下命令来检查其状态:# rbd mirror image status data/image1 # rbd mirror image status data/image2
在
site-b
集群的监控节点中运行以下命令来降级site-b
集群中的镜像:# rbd mirror image demote data/image1 # rbd mirror image demote data/image2
注意如果有多个次要集群,则只需要从提升它的二级集群完成。
在
site-a
集群的监控节点上运行以下命令来提升位于site-a
集群上的以前主镜像:# rbd mirror image promote data/image1 # rbd mirror image promote data/image2
检查
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
集群的同步。在故障恢复完成后,可以禁用这些功能。
从
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
在
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