5.8. 从灾难中恢复
作为存储管理员,您可以通过了解如何从配置了镜像功能的另一个存储集群恢复数据,为最终的硬件故障做好准备。
在示例中,主存储集群称为 site-a
,辅助存储集群称为 site-b
。此外,存储集群还拥有一个含有两个镜像,image1
和 image2
的 data
池。
5.8.1. 先决条件
- 一个正在运行的 Red Hat Ceph Storage 集群。
- 配置了单向或双向镜像。
5.8.2. 灾难恢复
在两个或多个 Red Hat Ceph Storage 集群间异步复制块数据可减少停机时间,并防止发生重大数据中心故障时出现数据丢失。这些故障具有广泛的影响,也称为 大刀片,并且可能源自对电网和危险性的影响。
客户数据需要在这些情况下受到保护。卷必须遵循一致性和效率,并在恢复点目标 (RPO) 和恢复时间目标 (RTO) 目标内进行复制。此解决方案称为广域网灾难恢复 (WAN-DR)。
在这种情况下,很难恢复主系统和数据中心。恢复的最快速方法是将应用程序故障转移到备用的 Red Hat Ceph Storage 集群(灾难恢复站点),并使集群能够运行最新可用数据副本。用于从这些故障场景中恢复的解决方案由应用程序指导:
- 恢复点目标 (RPO):在最坏的情况下,应用程序允许的数据丢失的数量。
- 恢复时间目标(RTO) :使用最新可用数据副本使应用程序重新上线所需的时间。
其它资源
- 详情请参阅 Red Hat Ceph Storage 块设备指南中的镜像 Ceph 块设备一节。
- 请参阅 Red Hat Ceph Storage 数据安全和硬化指南中的加密传输部分,以了解更多有关通过加密状态通过线路传输数据的信息。
5.8.3. 使用单向镜像从灾难中恢复
要使用单向镜像功能,可以从灾难中恢复,请使用以下步骤:它们显示在主集群终止后如何切换到次集群,以及如何恢复故障。关闭可以按照一定顺序进行,也可以不按照一定顺序进行。
单向镜像支持多个次要站点。如果使用额外的次集群,请选择一个二级集群来切换到它。在故障恢复期间从同一集群进行同步。
5.8.4. 使用双向镜像从灾难中恢复
要使用双向镜像功能,可以从灾难中恢复,请使用以下步骤:它们演示了如何在主集群终止后切换到次要集群中的镜像数据,以及如何故障恢复。关闭可以按照一定顺序进行,也可以不按照一定顺序进行。
其它资源
- 有关演示、提升和重新同步镜像的详情,请参阅 Red Hat Ceph Storage Block Device Guide 中的配置镜像部分。
5.8.5. 有序关闭后故障转移
正常关闭后故障转移到次存储集群。
先决条件
- 至少两个正在运行的 Red Hat Ceph Storage 集群。
- 节点的根级别访问权限。
- 使用单向镜像配置的池镜像或镜像镜像。
流程
- 停止使用主镜像的所有客户端。此步骤取决于哪些客户端使用该镜像。例如,从使用该镜像的任何 OpenStack 实例分离卷。
在
site-a
集群中的监控节点中运行以下命令来降级位于site-a
集群中的主镜像:语法
rbd mirror image demote POOL_NAME/IMAGE_NAME
示例
[root@rbd-client ~]# rbd mirror image demote data/image1 [root@rbd-client ~]# rbd mirror image demote data/image2
在
site-b
集群中的监控节点中运行以下命令来提升位于site-b
集群中的非主镜像:语法
rbd mirror image promote POOL_NAME/IMAGE_NAME
示例
[root@rbd-client ~]# rbd mirror image promote data/image1 [root@rbd-client ~]# rbd mirror image promote data/image2
经过一段时间后,检查
site-b
集群中监控节点中的镜像状态。它们应当显示up+stopped
状态,并列为主要状态:[root@rbd-client ~]# 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 16:04:37 [root@rbd-client ~]# 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 16:04:37
- 恢复对镜像的访问。此步骤取决于哪些客户端使用该镜像。
其它资源
- 请参阅 Red Hat OpenStack Platform 指南中的块存储和卷章节。
5.8.6. 非有序关闭后故障转移
非有序关闭后故障转移到次要存储集群。
先决条件
- 至少两个正在运行的 Red Hat Ceph Storage 集群。
- 节点的根级别访问权限。
- 使用单向镜像配置的池镜像或镜像镜像。
流程
- 验证主存储集群是否已关闭。
- 停止使用主镜像的所有客户端。此步骤取决于哪些客户端使用该镜像。例如,从使用该镜像的任何 OpenStack 实例分离卷。
从
site-b
存储集群中的 Ceph 监控节点提升非主镜像。使用--force
选项,因为降级无法传播到site-a
存储集群:语法
rbd mirror image promote --force POOL_NAME/IMAGE_NAME
示例
[root@rbd-client ~]# rbd mirror image promote --force data/image1 [root@rbd-client ~]# rbd mirror image promote --force data/image2
检查
site-b
存储集群中 Ceph 监控节点的镜像状态。它们应当显示up+stopping_replay
状态,描述应显示force promoted
:示例
[root@rbd-client ~]# 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 [root@rbd-client ~]# 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
其它资源
- 请参阅 Red Hat OpenStack Platform 指南中的块存储和卷章节。
5.8.7. 准备故障恢复
如果两个存储集群最初只配置为单向镜像,为了避免故障,请配置主存储集群以进行镜像,以便按照相反方向复制镜像。
先决条件
- 一个正在运行的 Red Hat Ceph Storage 集群。
- 节点的根级别访问权限。
流程
在
site-a
存储集群的客户端节点上,安装rbd-mirror
软件包:[root@rbd-client ~]# yum install rbd-mirror
注意软件包由 Red Hat Ceph Storage 工具存储库提供。
在
site-a
存储集群的客户端节点上,通过在/etc/sysconfig/ceph
文件中添加CLUSTER
选项来指定存储集群名称:CLUSTER=site-b
将
site-b
Ceph 配置文件和密钥环文件从site-b
Ceph Monitor 节点复制到site-a
Ceph monitor 和客户端节点:语法
scp /etc/ceph/ceph.conf USER@SITE_A_MON_NODE_NAME:/etc/ceph/site-b.conf scp /etc/ceph/site-b.client.site-b.keyring root@SITE_A_MON_NODE_NAME:/etc/ceph/ scp /etc/ceph/ceph.conf user@SITE_A_CLIENT_NODE_NAME:/etc/ceph/site-b.conf scp /etc/ceph/site-b.client.site-b.keyring user@SITE_A_CLIENT_NODE_NAME:/etc/ceph/
注意使用
scp
命令从site-b
Ceph 监控节点传输 Ceph 配置文件到site-a
Ceph monitor 节点,将该文件重命名为site-a.conf
。密钥环文件名保持不变。将
site-a
Ceph Monitor 节点的site-a
keyring 文件复制到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 存储集群用户。用户必须具有对存储集群的适当cephx
访问权限。示例
[root@rbd-client ~]# systemctl enable ceph-rbd-mirror.target [root@rbd-client ~]# systemctl enable ceph-rbd-mirror@site-a [root@rbd-client ~]# systemctl start ceph-rbd-mirror@site-a
在
site-a
集群的客户端节点中,将site-b
集群添加为对等集群:示例
[root@rbd-client ~]# 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 POOL_NAME
示例
[root@rbd-client ~]# rbd mirror pool info data Mode: image Site Name: site-a Peer Sites: UUID: 950ddadf-f995-47b7-9416-b9bb233f66e3 Name: site-b Mirror UUID: 4696cd9d-1466-4f98-a97a-3748b6b722b3 Direction: rx-tx Client: client.site-b
其它资源
- 如需更多信息,请参见 Red Hat Ceph Storage 管理指南中的用户管理一章。
5.8.7.1. 返回主存储集群失败
当以前的主存储集群恢复时,失败回主存储集群。
先决条件
- 至少两个正在运行的 Red Hat Ceph Storage 集群。
- 节点的根级别访问权限。
- 使用单向镜像配置的池镜像或镜像镜像。
流程
再次检查
site-b
集群中监控节点的镜像状态。它们应该显示up-stopped
状态,描述应该会指出local image is primary
:示例
[root@rbd-client ~]# 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 17:37:48 [root@rbd-client ~]# rbd mirror image status data/image2 image2: global_id: 08027096-d267-47f8-b52e-59de1353a034 state: up+stopped description: local image is primary last_update: 2019-04-22 17:38:18
从
site-a
存储集群的 Ceph 监控节点确定镜像是否仍然是主镜像:语法
rbd info POOL_NAME/IMAGE_NAME
示例
[root@rbd-client ~]# rbd info data/image1 [root@rbd-client ~]# rbd info data/image2
在命令的输出中,查找
mirroring primary: true
或mirroring primary: false
以确定状态。从
site-a
存储集群中的 Ceph monitor 节点运行以下命令来降级列为主要镜像:语法
rbd mirror image demote POOL_NAME/IMAGE_NAME
示例
[root@rbd-client ~]# rbd mirror image demote data/image1
如果未按顺序关闭,则仅重新同步镜像。在
site-a
存储集群中的监控节点上运行以下命令,以重新同步从site-b
到site-a
的镜像:语法
rbd mirror image resync POOL_NAME/IMAGE_NAME
示例
[root@rbd-client ~]# rbd mirror image resync data/image1 Flagged image for resync from primary [root@rbd-client ~]# rbd mirror image resync data/image2 Flagged image for resync from primary
一段时间后,通过验证镜像是否处于
up+replaying
状态确保完成镜像重新同步。通过在site-a
存储集群中的监控节点中运行以下命令来检查其状态:语法
rbd mirror image status POOL_NAME/IMAGE_NAME
示例
[root@rbd-client ~]# rbd mirror image status data/image1 [root@rbd-client ~]# rbd mirror image status data/image2
在
site-b
存储集群中的 Ceph monitor 节点上运行以下命令来降级site-b
存储集群中的镜像:语法
rbd mirror image demote POOL_NAME/IMAGE_NAME
示例
[root@rbd-client ~]# rbd mirror image demote data/image1 [root@rbd-client ~]# rbd mirror image demote data/image2
注意如果有多个次要存储集群,则只需要从提升它的次要存储集群完成。
在
site-a
存储集群中的 Ceph monitor 节点中运行以下命令来提升位于site-a
存储集群中的以前主镜像:语法
rbd mirror image promote POOL_NAME/IMAGE_NAME
示例
[root@rbd-client ~]# rbd mirror image promote data/image1 [root@rbd-client ~]# rbd mirror image promote data/image2
检查
site-a
存储集群中 Ceph 监控节点的镜像状态。它们应当显示up+stopped
状态,描述应该为local image is primary
:语法
rbd mirror image status POOL_NAME/IMAGE_NAME
示例
[root@rbd-client ~]# 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 [root@rbd-client ~]# 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
5.8.8. 删除双向镜像
恢复失败后,您可以移除双向镜像功能,并禁用 Ceph 块设备镜像服务。
先决条件
- 一个正在运行的 Red Hat Ceph Storage 集群。
- 节点的根级别访问权限。
流程
将
site-b
存储集群作为对等集群从site-a
存储集群中删除:示例
[root@rbd-client ~]# rbd mirror pool peer remove data client.remote@remote --cluster local [root@rbd-client ~]# 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
示例
[root@rbd-client ~]# systemctl stop ceph-rbd-mirror@site-a [root@rbd-client ~]# systemctl disable ceph-rbd-mirror@site-a [root@rbd-client ~]# systemctl disable ceph-rbd-mirror.target