6.6. 从灾难中恢复
作为存储管理员,您可以通过了解如何从配置了镜像功能的另一个存储集群恢复数据,为最终的硬件故障做好准备。
在示例中,主存储集群称为 site-a
,辅助存储集群称为 site-b
。此外,存储集群还拥有一个含有两个镜像,image1
和 image2
的 data
池。
6.6.1. 先决条件
- 一个正在运行的 Red Hat Ceph Storage 集群。
- 配置了单向或双向镜像。
6.6.2. 灾难恢复
在两个或多个 Red Hat Ceph Storage 集群间异步复制块数据可减少停机时间,并防止发生重大数据中心故障时出现数据丢失。这些故障具有广泛的影响,也称为 大刀片,并且可能源自对电网和危险性的影响。
客户数据需要在这些情况下受到保护。卷必须遵循一致性和效率,并在恢复点目标 (RPO) 和恢复时间目标 (RTO) 目标内进行复制。此解决方案称为广域网灾难恢复 (WAN-DR)。
在这种情况下,很难恢复主系统和数据中心。恢复的最快速方法是将应用程序故障转移到备用的 Red Hat Ceph Storage 集群(灾难恢复站点),并使集群能够运行最新可用数据副本。用于从这些故障场景中恢复的解决方案由应用程序指导:
- 恢复点目标 (RPO):在最坏的情况下,应用程序允许的数据丢失的数量。
- 恢复时间目标(RTO) :使用最新可用数据副本使应用程序重新上线所需的时间。
其它资源
- 详情请参阅 Red Hat Ceph Storage 块设备指南中的镜像 Ceph 块设备一节。
- 请参阅 Red Hat Ceph Storage 数据安全和硬化指南中的加密传输部分,以了解更多有关通过加密状态通过线路传输数据的信息。
6.6.3. 使用单向镜像从灾难中恢复
要使用单向镜像功能,可以从灾难中恢复,请使用以下步骤:它们显示在主集群终止后如何切换到次集群,以及如何恢复故障。关闭可以按照一定顺序进行,也可以不按照一定顺序进行。
单向镜像支持多个次要站点。如果使用额外的次集群,请选择一个二级集群来切换到它。在故障恢复期间从同一集群进行同步。
6.6.4. 使用双向镜像从灾难中恢复
要使用双向镜像功能,可以从灾难中恢复,请使用以下步骤:它们演示了如何在主集群终止后切换到次要集群中的镜像数据,以及如何故障恢复。关闭可以按照一定顺序进行,也可以不按照一定顺序进行。
6.6.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 指南中的块存储和卷章节。
6.6.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
状态。描述应该强制提升
,这意味着它处于间歇性状态。等待状态变为up+stopped
以验证站点已成功提升。示例
[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: 2023-04-17 13:25:06 [root@rbd-client ~]# rbd mirror image status data/image1 image1: global_id: 08027096-d267-47f8-b52e-59de1353a034 state: up+stopped description: force promoted last_update: 2023-04-17 13:25:06
其它资源
- 请参阅 Red Hat OpenStack Platform 指南中的块存储和卷章节。
6.6.7. 准备故障恢复
如果两个存储集群最初只配置为单向镜像,为了避免故障,请配置主存储集群以进行镜像,以便按照相反方向复制镜像。
先决条件
- 一个正在运行的 Red Hat Ceph Storage 集群。
- 客户端节点的根级别访问权限。
流程
登录到 Cephadm shell:
示例
[root@rbd-client ~]# cephadm shell
在
site-a
存储集群上,运行以下命令:示例
[ceph: root@rbd-client /]# ceph orch apply rbd-mirror --placement=host01
创建名称与对等镜像池相同的块设备池。
要创建 rbd 池,请执行以下操作:
语法
ceph osd pool create POOL_NAME PG_NUM ceph osd pool application enable POOL_NAME rbd rbd pool init -p POOL_NAME
示例
[root@rbd-client ~]# ceph osd pool create pool1 [root@rbd-client ~]# ceph osd pool application enable pool1 rbd [root@rbd-client ~]# rbd pool init -p pool1
在 Ceph 客户端节点上,引导存储集群对等点。
创建 Ceph 用户帐户,并将存储集群对等注册到池:
语法
rbd mirror pool peer bootstrap create --site-name LOCAL_SITE_NAME POOL_NAME > PATH_TO_BOOTSTRAP_TOKEN
示例
[ceph: root@rbd-client-site-a /]# rbd mirror pool peer bootstrap create --site-name site-a data > /root/bootstrap_token_site-a
注意这个示例 bootstrap 命令创建
client.rbd-mirror.site-a
和client.rbd-mirror-peer
Ceph 用户。-
将 bootstrap 令牌文件复制到
site-b
存储集群。 在
site-b
存储集群中导入 bootstrap 令牌:语法
rbd mirror pool peer bootstrap import --site-name LOCAL_SITE_NAME --direction rx-only POOL_NAME PATH_TO_BOOTSTRAP_TOKEN
示例
[ceph: root@rbd-client-site-b /]# rbd mirror pool peer bootstrap import --site-name site-b --direction rx-only data /root/bootstrap_token_site-a
注意对于单向 RBD 镜像功能,您必须使用
--direction rx-only
参数,因为在引导对等时双向镜像是默认设置。
在
site-a
存储集群中的监控节点中,验证site-b
存储集群是否已成功添加为对等集群:示例
[ceph: root@rbd-client /]# rbd mirror pool info -p data Mode: image Peers: UUID NAME CLIENT d2ae0594-a43b-4c67-a167-a36c646e8643 site-b client.site-b
其它资源
- 如需更多信息,请参见 Red Hat Ceph Storage 管理指南中的用户管理一章。
6.6.7.1. 返回主存储集群失败
当以前的主存储集群恢复时,失败回主存储集群。
如果您在镜像级别上调度了快照,则需要重新添加计划,因为镜像重新同步操作会更改 RBD 镜像 ID,之前的调度会变得过时。
先决条件
- 至少两个正在运行的 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 mirror pool 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
6.6.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