4.15. 使用 Regional-DR 恢复到替换集群
当主集群有故障时,您可以获得修复的选项,等待现有集群恢复,或者如果集群不可行,请完全替换集群。此解决方案指导您在将故障的主集群替换为新集群,并为这个新集群启用故障恢复(分配)。
在这些说明中,我们假定在安装和保护应用程序后必须替换 RHACM 受管集群。对于本节,RHACM 受管集群是 替换集群,而未替换的集群是 存活的集群,新集群是 恢复集群。
前提条件
- 确保 Regional-DR 环境已配置了使用红帽 Advance Cluster Management (RHACM)安装的应用程序。
- 确保为应用程序分配保护它们不受集群故障的数据策略。
流程
在 surviving 集群中,备份
clientProfileMapping:$ oc get clientprofilemapping ocs-storagecluster -n openshift-storage -o yaml > clientProfileMappingBeforeRecovery.yaml将故障替换集群中的所有受保护的应用程序故障切换到 RHACM 控制台上的存活集群。
对于受管应用程序 :
在 Hub 集群中,进入到 Applications。点 Actions (swig) 并选择 Failover application。
对于发现的应用程序 :
导航到 All Clusters
Data Services disaster recovery Protected applications 选项卡。点 Actions (swig) 并选择 Failover。
在继续下一步之前,验证所有受保护的应用程序都在存活的集群上运行。
注意每个受管应用程序
DRPlacementControl的 PROGRESSION 状态显示为Cleaning Up。对于发现的应用程序,PROGRESSION 将为Cleaning Up。如果 替换集群 离线或停机,则预期会这样做。在 Hub 集群中,删除用于替换集群的 DRCluster。
$ oc delete drcluster <drcluster_name> --wait=false注意use-
wait=false,因为 DRCluster 在稍后的步骤之前不会删除。在存活的集群中为每个受保护的应用程序删除灾难恢复。在 hub 集群上执行所有子步骤。
对于每个受管应用程序,编辑放置并确保选择了 surviving 集群:
$ oc edit placement <placement_name> -n <namespace>apiVersion: cluster.open-cluster-management.io/v1beta1 kind: Placement metadata: annotations: cluster.open-cluster-management.io/experimental-scheduling-disable: "true" [...] predicates: - requiredClusterSelector: claimSelector: {} labelSelector: matchExpressions: - key: name operator: In values: - cluster1 <-- Modify to be surviving cluster name [...]注意对于基于 Subscription 的应用程序,相关的放置可以在 hub 集群上的同一命名空间中找到,类似于受管集群。对于基于 ApplicationSets 的应用程序,相关的放置可以在 hub 集群上的
openshift-gitops命名空间中找到。对于每个受管应用程序,编辑 PlacementDecision 并确保删除 替换集群。
$ oc edit placementdecision <placementdecision_name> -n <namespace> --subresource=statusapiVersion: cluster.open-cluster-management.io/v1beta1 kind: PlacementDecision metadata: [...] status: decisions: - clusterName: cluster2 <-- Delete this line reason: RetainedForFailover <-- Delete this line - clusterName: cluster1 reason: cluster1注意对于基于 Subscription 的应用程序,关联的 PlacementDecision 可以在与受管集群的 hub 集群上的同一命名空间中找到。对于基于 ApplicationSets 的应用程序,关联的 PlacementDecision 可以在 hub 集群上的
openshift-gitops命名空间中找到在每个受保护的应用程序的 VolumeReplicationGroup (VRG)上运行以下命令来验证为替换集群删除了
s3Profile。注意对于受管应用程序,关联的 VRG 位于应用命名空间中。对于发现的应用程序,关联的 VRG 位于
openshift-dr-ops命名空间中。$ oc get vrg -n <vrg_namespace> -o jsonpath='{.items[0].spec.s3Profiles}' | jq从 RHACM 控制台中的应用程序中删除灾难恢复:
对于受管应用程序 :
-
在 Hub 集群中,进入到 All Clusters
Applications。 - 在 Overview 选项卡中,选择 Manage disaster recovery。
- 点 Remove disaster recovery。
- 单击 Confirm remove。
-
在 Hub 集群中,进入到 All Clusters
对于发现的应用程序 :
-
导航到 All Clusters
Data Services disaster recovery Protected applications 选项卡。 - 在应用程序行的末尾,点操作菜单 (&&) 并选择 Remove disaster recovery。
- 在下一提示中,单击 Remove。
-
导航到 All Clusters
编辑每个受管应用程序的 放置 并删除注解
cluster.open-cluster-management.io/experimental-scheduling-disable: "true":$ oc edit placement {placement_name} -n {namespace}apiVersion: cluster.open-cluster-management.io/v1beta1 kind: Placement metadata: annotations: ## Remove this annotation cluster.open-cluster-management.io/experimental-scheduling-disable: "true" [...]注意对于基于 Subscription 的应用程序,相关的放置可以在 hub 集群上的同一命名空间中找到,类似于受管集群。对于基于 ApplicationSets 的应用程序,关联的放置可以在 hub 集群上的
openshift-gitops命名空间中找到。
- 对存活的集群中每个受保护的应用程序重复最后一步中详述的流程。现在,为受保护的应用程序移除灾难恢复已完成。
删除 存活 集群和 替换集群的所有 灾难恢复配置:
在 hub 集群中,删除与 surviving 集群 关联的 DRPolices,并为 DR 删除删除 替换集群 :
$ oc delete drpolicy {drpolicy_name1 drpolicy_name2 ...}在 hub 集群中,删除与 surviving 集群 关联的 mirrorpeer,并为 DR 删除删除 替换集群 :
$ oc delete mirrorpeer {mirrorpeer_name}在 hub 集群中,修补 mirorrpeer 以删除终结器:
$ oc patch mirrorpeer {mirrorpeer_name} -p '{"metadata":{"finalizers":null}}' --type=merge从 surviving 集群,禁用
cephblockpoolradosnamespace上的镜像:$ oc patch cephblockpoolradosnamespace <cephblockpoolradosnamespace_name> --type merge -p '{"spec":{"mirroring": null}}' -n openshift-storage在 surviving 集群中,禁用
cephblockpool上的镜像:$ oc patch cephblockpool <cephblockpool_name> --type json -p '[{"op": "replace", "path": "/spec/mirroring", "value": {}}]' -n openshift-storage
使用 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 版本相同的版本。
对于使用 ApplicationSets 的受管应用程序,必须安装 OpenShift GitOps operator。具体步骤,请参阅在 Web 控制台中安装 Red Hat OpenShift GitOps Operator。
对于发现的应用程序,必须安装 OADP operator 和数据保护应用程序(DPA)。具体步骤请查看 发现应用程序的灾难恢复保护的先决条件。
重要如果启用了 Globalnet,在恢复 集群中 手动编辑
StorageClusteryaml 以添加 clusterID 并将 enabled 设置为true。将 <clustername> 替换为您的 RHACM 导入或新创建的受管集群名称。不要在
StorageCluster中进行此更改,除非您在安装 Submariner 时启用了 Globalnet。$ oc edit storagecluster -o yaml -n openshift-storagespec: network: multiClusterService: clusterID: <clustername> enabled: true如果启用了
multiClusterService,则无法禁用或 撤销,因为它故障转移了 MON,并使用 GlobalNet IP 地址重启 OSD,这在分配后无法更改。另外,如果在安装 Submariner 时启用了 GlobalNet,请按照在恢复集群中使用 ocs-provider-server ServiceExport 连接存储集群中 的说明。
使用 RHACM 控制台,进入到 Data Services
disaster recovery Policies 选项卡。 - 选择 Create DRPolicy 并命名您的策略。
- 选择 恢复集群 和存存 集群。
- 创建策略。具体步骤,请参阅在 Hub 集群上创建灾难恢复策略。
只有在 DRPolicy 的状态更改为
Validated时才会进入下一步。将 DRPolicy 应用到在 替换集群 失败前最初保护的集群中的应用程序。
注意对于发现的应用程序,请确保在 恢复集群 中创建应用程序命名空间,然后再分配策略。
确保 替换集群的 blockpools 和 存活 集群的 blockpool 之间有一个
poolID映射,以及失败的集群和恢复集群之间。打开在第 1 步中创建的
clientProfileMappingBeforeRecovery.yaml进行编辑:$ vi clientProfileMappingBeforeRecovery.yaml在
clientProfileMappingBeforeRecovery.yaml中删除行,并替换以下值,如下所示:apiVersion: csi.ceph.io/v1 kind: ClientProfileMapping metadata: creationTimestamp: "2025-11-13T07:43:45Z" <-- Remove this line generation: 7 <-- Remove this line name: ocs-storagecluster-surviving <-- name must be unique namespace: openshift-storage ownerReferences: <-- Remove this line - apiVersion: ocs.openshift.io/v1alpha1 <-- Remove this line blockOwnerDeletion: true <-- Remove this line controller: true <-- Remove this line kind: StorageClient <-- Remove this line name: ocs-storagecluster <-- Remove this line uid: c9b227a4-88d7-4667-82c8-f54286f498a9 <-- Remove this line resourceVersion: "1392181" <-- Remove this line uid: ba0676ab-d1f0-4b13-9193-db4b732280d3 <-- Remove this line spec: mappings: - blockPoolIdMapping: - - "3" <-- Sample blockPoolId, your values may be different - "3" <-- Sample blockPoolId, your values may be different - - "16" <-- Sample blockPoolId, your values may be different - "14" <-- Sample blockPoolId, your values may be different localClientProfile: openshift-storage remoteClientProfile: openshift-storage-
将
clientProfileMappingBeforeRecovery.yaml文件保存到clientProfileMappingBeforeRecovery-surviving.yaml中。 在 surviv ing 集群中创建
clientProfileMappingBeforeRecovery-surviving.yaml资源:$ oc create -f clientProfileMappingBeforeRecovery-surviving.yaml -n openshift-storage在恢复集群中,获取恢复集群和 存活 集群的
blockpoolIdMapping:$ oc get clientprofilemapping ocs-storagecluster -n openshift-storage -o yaml | yq '.spec.mappings.[].blockPoolIdMapping'两个
cephblockpools 的输出示例。默认值为cephblockpool。您的blockPoolIds可能不同:- - "3" <-- Note this value for a future step - "3" - - "13" <-- Note this value for a future step - "14"将
clientProfileMappingBeforeRecovery-surviving.yaml的内容复制到一个新的 yaml 中:$ cp clientProfileMappingBeforeRecovery-surviving.yaml clientProfileMappingAfterRecovery.yaml使用正确的
blockPoolIds编辑clientProfileMappingAfterRecovery.yaml:$ vi clientProfileMappingAfterRecovery.yaml以下是一个带有所需更改的 yaml 示例。将
blockPoolIds替换为您之前记下的值:apiVersion: csi.ceph.io/v1 kind: ClientProfileMapping metadata: name: ocs-storagecluster-recovery <-- name must be unique namespace: openshift-storage spec: mappings: - blockPoolIdMapping: - - "3" <-- First index from the ClientProfileMapping on recovery cluster - "3" - - "13" <-- Second index from the ClientProfileMapping on recovery cluster - "14" localClientProfile: openshift-storage remoteClientProfile: openshift-storage在恢复集群中创建
clientProfileMappingAfterRecovery.yaml资源:$ oc create -f clientProfileMappingAfterRecovery.yaml -n openshift-storage
将 Surviving 集群中 的新受保护的应用程序重新定位回对 staff M 控制台上的新恢复集群。
对于受管应用程序 :
-
在 Hub 集群中,进入到 All Clusters
Applications。 - 在 Overview 选项卡中,在操作菜单 (&&) 的应用程序行的末尾,选择 Manage diaster recovery。
- 单击 Relocate。
-
在 Hub 集群中,进入到 All Clusters
对于发现的应用程序 :
-
导航到 All Clusters
Data Services disaster recovery Protected applications 选项卡。 - 在应用程序行的末尾,点操作菜单 (&&) 并选择 Relocate。
-
导航到 All Clusters