4.15. 使用 Regional-DR 恢复到替换集群
当主集群有故障时,您可以获得修复的选项,等待现有集群恢复,或者如果集群不可行,请完全替换集群。此解决方案指导您在将故障的主集群替换为新集群,并为这个新集群启用故障恢复(分配)。
在这些说明中,我们假定在安装和保护应用程序后必须替换 RHACM 受管集群。对于本节,RHACM 受管集群是 替换集群,而未替换的集群是 存活的集群,新集群是 恢复集群。
目前不支持为发现的应用程序替换集群恢复。仅支持受管应用程序。
前提条件
- 确保 Regional-DR 环境已配置了使用红帽 Advance Cluster Management (RHACM)安装的应用程序。
- 确保为应用程序分配保护它们不受集群故障的数据策略。
步骤
- 在 Hub 集群中,导航到 Applications,并将故障替换集群中的所有受保护的应用程序切换到 surviving 集群。
在继续下一步之前,验证所有受保护的应用程序都在存活的集群上运行。
注意每个应用程序
DRPlacementControl的 PROGRESSION 状态显示为Cleaning Up。如果替换集群离线或停机,则这是预期的。在 Hub 集群中,删除用于替换集群的 DRCluster。
oc delete drcluster <drcluster_name> --wait=false
$ oc delete drcluster <drcluster_name> --wait=falseCopy to Clipboard Copied! Toggle word wrap Toggle overflow 注意use-
wait=false,因为 DRCluster 在稍后的步骤之前不会删除。在存活的集群中为每个受保护的应用程序禁用灾难恢复。在 hub 集群上执行所有子步骤。
对于每个应用程序,编辑放置并确保选择了 surviving 集群。
oc edit placement <placement_name> -n <namespace>
$ oc edit placement <placement_name> -n <namespace>Copy to Clipboard Copied! Toggle word wrap Toggle overflow Copy to Clipboard Copied! Toggle word wrap Toggle overflow 注意对于基于 Subscription 的应用程序,相关的放置可以在 hub 集群上的同一命名空间中找到,类似于受管集群。对于基于 ApplicationSets 的应用程序,相关的放置可以在 hub 集群上的
openshift-gitops命名空间中找到。在每个受保护的应用程序的 VolumeReplicationGroup 上运行以下命令来验证为替换集群删除了
s3Profile。oc get vrg -n <application_namespace> -o jsonpath='{.items[0].spec.s3Profiles}' | jq$ oc get vrg -n <application_namespace> -o jsonpath='{.items[0].spec.s3Profiles}' | jqCopy to Clipboard Copied! Toggle word wrap Toggle overflow 在 RHACM 控制台中为受管应用程序禁用 DR。
-
在 Hub 集群中,进入到 All Clusters
Applications。 - 在 Overview 选项卡中,在操作菜单中的 protected application 行的末尾,选择 Manage disaster recovery。
- 点 Remove disaster recovery。
单击 Confirm remove。
警告您的应用程序将丢失灾难恢复保护,防止集群间的卷同步(复制)。
注意应用程序在 Applications Overview 菜单中仍然可见,但删除了 Data 策略。
-
在 Hub 集群中,进入到 All Clusters
编辑每个应用程序的 放置 并删除注解
cluster.open-cluster-management.io/experimental-scheduling-disable: "true"。oc edit placement {placement_name} -n {namespace}$ oc edit placement {placement_name} -n {namespace}Copy to Clipboard Copied! Toggle word wrap Toggle overflow Copy to Clipboard Copied! Toggle word wrap Toggle overflow
- 对存活的集群中每个受保护的应用程序重复最后一步中详述的流程。为受保护的应用程序禁用 DR 现已完成。
在 hub 集群中,运行以下脚本从 存活 集群和 hub 集群中删除所有灾难恢复配置。
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 注意此脚本使用
oc delete project openshift-operators命令删除 hub 集群上的此命名空间中的灾难恢复(DR)操作器。如果此命名空间中还有其他非DR 操作器,则必须从 OperatorHub 重新安装它们。在命名空间
openshift-operators再次自动创建后,添加监控标签以收集灾难恢复指标。oc label namespace openshift-operators openshift.io/cluster-monitoring='true'
$ oc label namespace openshift-operators openshift.io/cluster-monitoring='true'Copy to Clipboard Copied! Toggle word wrap Toggle overflow 在 surviving 集群中,确保 DR 安装过程中创建的对象存储桶已被删除。如果没有通过脚本删除对象存储桶,请删除它。用于 DR 的对象存储桶的名称以
odrbucket开头。oc get obc -n openshift-storage
$ oc get obc -n openshift-storageCopy to Clipboard Copied! Toggle word wrap Toggle overflow 使用 RHACM 控制台只为 替换集群 (失败集群)卸载 Submariner。
导航到 Infrastructure
Clusters Clustersets Submariner add-ons view,只为替换集群卸载 Submariner。 注意替换集群的 Submariner 的卸载过程将保持 GREEN,在替换集群从 RHACM 控制台分离前不会完成。
- 返回到 Clusters 视图 和分离替换集群。
-
创建新的 OpenShift 集群(恢复集群),并导入到 Infrastructure
Clusters 视图。 -
将新的恢复集群添加到 Submariner 使用的
Clusterset中。 仅为新的 恢复集群 安装 Submariner 附加组件。
注意如果将 GlobalNet 用于存活的集群,请确保为恢复集群启用 GlobalNet。
在恢复集群中安装 OpenShift Data Foundation。OpenShift Data Foundation 版本应该是 OpenShift Data Foundation 4.17 (或更多)以及与存活集群中的 ODF 版本相同的版本。
注意如果在安装 Submariner 时启用了 GlobalNet,确保按照文档中的可选说明来修改恢复集群中的 OpenShift Data Foundation 存储集群。
- 在 Hub 集群中,从 OperatorHub 安装 ODF Multicluster Orchestrator operator。具体步骤请参阅有关安装 OpenShift Data Foundation Multicluster Orchestrator operator 的章节。
使用 RHACM 控制台,进入到 Data Services
disaster recovery Policies 选项卡。 - 选择 Create DRPolicy 并命名您的策略。
- 选择 恢复集群 和存存 集群。
- 创建策略。具体步骤,请参阅在 Hub 集群上创建灾难恢复策略。
只有在 DRPolicy 的状态更改为
Validated时才会进入下一步。验证
cephblockpoolID 是否保持不变。在恢复集群中运行以下命令。
oc get cm -n openshift-storage rook-ceph-csi-mapping-config -o yaml
$ oc get cm -n openshift-storage rook-ceph-csi-mapping-config -o yamlCopy to Clipboard Copied! Toggle word wrap Toggle overflow 结果是示例输出。
apiVersion: v1 data: csi-mapping-config-json: '[{"ClusterIDMapping":{"openshift-storage":"openshift-storage"},"RBDPoolIDMapping":[{"1":"1"}]}]' kind: ConfigMap [...]apiVersion: v1 data: csi-mapping-config-json: '[{"ClusterIDMapping":{"openshift-storage":"openshift-storage"},"RBDPoolIDMapping":[{"1":"1"}]}]' kind: ConfigMap [...]Copy to Clipboard Copied! Toggle word wrap Toggle overflow 在存活集群 上运行以下命令 :
oc get cm -n openshift-storage rook-ceph-csi-mapping-config -o yaml
$ oc get cm -n openshift-storage rook-ceph-csi-mapping-config -o yamlCopy to Clipboard Copied! Toggle word wrap Toggle overflow 结果是示例输出。
apiVersion: v1 data: csi-mapping-config-json: '[{"ClusterIDMapping":{"openshift-storage":"openshift-storage"},"RBDPoolIDMapping":[{"3":"1"}]}]' kind: ConfigMap [...]apiVersion: v1 data: csi-mapping-config-json: '[{"ClusterIDMapping":{"openshift-storage":"openshift-storage"},"RBDPoolIDMapping":[{"3":"1"}]}]' kind: ConfigMap [...]Copy to Clipboard Copied! Toggle word wrap Toggle overflow 检查两个集群的 yaml 中的
RBDPoolIDMapping。如果RBDPoolIDMapping不匹配,则编辑 recovery 集群的rook-ceph-csi-mapping-config配置映射,以添加额外的或缺失的RBDPoolIDMapping,如以下示例所示。csi-mapping-config-json: '[{"ClusterIDMapping":{"openshift-storage":"openshift-storage"},"RBDPoolIDMapping":[{"1":"1"}]},{"ClusterIDMapping":{"openshift-storage":"openshift-storage"},"RBDPoolIDMapping":[{"1":"3"}]}]’csi-mapping-config-json: '[{"ClusterIDMapping":{"openshift-storage":"openshift-storage"},"RBDPoolIDMapping":[{"1":"1"}]},{"ClusterIDMapping":{"openshift-storage":"openshift-storage"},"RBDPoolIDMapping":[{"1":"3"}]}]’Copy to Clipboard Copied! Toggle word wrap Toggle overflow 注意编辑 configmap 后,通过删除 pod,在存活的集群中命名空间
openshift-storage中重启 rook-ceph-operator pod。
- 将 DRPolicy 应用到在替换集群失败前最初保护的集群中的应用程序。
- 将 Surviving 集群中 的新受保护的应用程序重新定位回新的恢复集群。使用 RHACM 控制台,进入到 Applications 菜单来执行重新定位。
如果在按照此过程后遇到任何问题,请联系红帽客户支持。