3.17. 使用 Metro-DR 恢复到替换集群
当主集群有故障时,您可以获得修复的选项,等待现有集群恢复,或者如果集群不可行,请完全替换集群。此解决方案指导您在将故障的主集群替换为新集群,并为这个新集群启用故障恢复(分配)。
在这些说明中,我们假定在安装和保护应用程序后必须替换 RHACM 受管集群。对于本节,RHACM 受管集群是 替换集群,而未替换的集群是 存活的集群,新集群是 恢复集群。
目前不支持为发现的应用程序替换集群恢复。仅支持受管应用程序。
前提条件
- 确保 Metro-DR 环境已配置了使用红帽 Advance Cluster Management (RHACM)安装的应用程序。
- 确保为应用程序分配保护它们不受集群故障的数据策略。
流程
在 Hub 集群中 执行以下步骤:
使用 CLI 终端编辑 DRCluster 资源来隔离替换集群,其中 < drcluster_name> 是替换集群名称。
oc edit drcluster <drcluster_name>apiVersion: ramendr.openshift.io/v1alpha1 kind: DRCluster metadata: [...] spec: ## Add or modify this line clusterFence: Fenced cidrs: [...] [...]- 使用 RHACM 控制台,进入到 Applications,并将受保护的所有应用程序从失败集群切换到 surviving 集群。
验证并确保所有受保护的应用程序现在都在存活的集群中运行。
注意每个应用程序 DRPlacementControl 的 PROGRESSION 状态将显示为
Cleaning Up。如果替换集群离线或停机,则这是预期的。
取消保护替换集群。
使用 CLI 终端编辑 DRCluster 资源,其中 < drcluster_name& gt; 是替换集群名称。
$ oc edit drcluster <drcluster_name>apiVersion: ramendr.openshift.io/v1alpha1 kind: DRCluster metadata: [...] spec: ## Modify this line clusterFence: Unfenced cidrs: [...] [...]删除替换集群的 DRCluster。
$ oc delete drcluster <drcluster_name> --wait=false注意使用 --wait=false,因为 DRCluster 在稍后的步骤之前不会删除。
在 Hub 集群上为存活的集群的 每个受保护的应用程序禁用灾难恢复。
对于每个应用程序,编辑放置并确保选择了 surviving 集群。
注意对于基于 Subscription 的应用程序,相关的放置可以在 hub 集群上的同一命名空间中找到,类似于受管集群。对于基于 ApplicationSets 的应用程序,相关的放置可以在 hub 集群上的
openshift-gitops命名空间中找到。$ 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" [...] spec: clusterSets: - submariner predicates: - requiredClusterSelector: claimSelector: {} labelSelector: matchExpressions: - key: name operator: In values: - cluster1 <-- Modify to be surviving cluster name [...]在每个受保护的应用程序的 VolumeReplicationGroup 上运行以下命令来验证为替换集群删除了
s3Profile。$ oc get vrg -n <application_namespace> -o jsonpath='{.items[0].spec.s3Profiles}' | jq在将受保护的应用程序 放置资源 配置为使用 surviving 集群并替换集群 s3Profile (从受保护的应用程序中删除)后,所有
DRPlacementControl资源都必须从 Hub 集群中删除。$ oc delete drpc <drpc_name> -n <namespace>注意对于基于 Subscription 的应用程序,关联的 DRPlacementControl 可以与 hub 集群上的受管集群位于同一个命名空间中。对于基于 ApplicationSets 的应用程序,关联的 DRPlacementControl 可以在 hub 集群上的
openshift-gitops命名空间中找到。在继续下一步之前,验证所有 DRPlacementControl 资源是否都已被删除。此命令是所有命名空间的查询。不应找到任何资源。
$ oc get drpc -A最后一步是编辑每个应用程序的 放置 并删除注解
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" [...]
- 对存活的集群中每个受保护的应用程序重复最后一步中详述的流程。为受保护的应用程序禁用 DR 现已完成。
在 Hub 集群中,运行以下脚本从 存活 集群和 hub 集群中删除所有灾难恢复配置。
#!/bin/bash secrets=$(oc get secrets -n openshift-operators | grep Opaque | cut -d" " -f1) echo $secrets for secret in $secrets do oc patch -n openshift-operators secret/$secret -p '{"metadata":{"finalizers":null}}' --type=merge done mirrorpeers=$(oc get mirrorpeer -o name) echo $mirrorpeers for mp in $mirrorpeers do oc patch $mp -p '{"metadata":{"finalizers":null}}' --type=merge oc delete $mp done drpolicies=$(oc get drpolicy -o name) echo $drpolicies for drp in $drpolicies do oc patch $drp -p '{"metadata":{"finalizers":null}}' --type=merge oc delete $drp done drclusters=$(oc get drcluster -o name) echo $drclusters for drp in $drclusters do oc patch $drp -p '{"metadata":{"finalizers":null}}' --type=merge oc delete $drp done oc delete project openshift-operators managedclusters=$(oc get managedclusters -o name | cut -d"/" -f2) echo $managedclusters for mc in $managedclusters do secrets=$(oc get secrets -n $mc | grep multicluster.odf.openshift.io/secret-type | cut -d" " -f1) echo $secrets for secret in $secrets do set -x oc patch -n $mc secret/$secret -p '{"metadata":{"finalizers":null}}' --type=merge oc delete -n $mc secret/$secret done done oc delete clusterrolebinding spoke-clusterrole-bindings注意此脚本使用
oc delete project openshift-operators命令删除 hub 集群上的此命名空间中的灾难恢复(DR)操作器。如果此命名空间中还有其他非DR Operator,则必须从 OperatorHub 重新安装它们。在命名空间
openshift-operators再次自动创建后,添加监控标签以收集灾难恢复指标。$ oc label namespace openshift-operators openshift.io/cluster-monitoring='true'在 surviving 集群中,确保 DR 安装过程中创建的对象存储桶已被删除。如果没有通过脚本删除对象存储桶,请删除它。用于 DR 的对象存储桶的名称以
odrbucket开头。$ oc get obc -n openshift-storage在 RHACM 控制台中,导航到 Infrastructure
Clusters 视图。 - 分离替换集群。
- 创建新的 OpenShift 集群(恢复集群),并将新集群导入到 RHACM 控制台。具体步骤请参阅创建集群和将目标受管集群 导入到 hub 集群。
在恢复集群中安装 OpenShift Data Foundation 操作器,并将它连接到与存活集群相同的外部 Ceph 存储系统。具体步骤请参考 以外部模式部署 OpenShift Data Foundation。
注意确保 OpenShift Data Foundation 版本为 4.15 (或更高),且相同的 OpenShift Data Foundation 版本位于存活的集群中。
- 在 hub 集群中,从 OperatorHub 安装 ODF Multicluster Orchestrator operator。具体步骤请参阅有关安装 OpenShift Data Foundation Multicluster Orchestrator operator 的章节。
使用 RHACM 控制台,进入到 Data Services
Data policies。 - 选择 Create DRPolicy 并命名您的策略。
- 选择 恢复集群 和存存 集群。
- 创建策略。具体步骤,请参阅在 Hub 集群上创建灾难恢复策略。
只有在 DRPolicy 的状态更改为
Validated时才会进入下一步。- 将 DRPolicy 应用到在替换集群失败前最初保护的集群中的应用程序。
- 将 Surviving 集群中的新受保护的应用程序重新定位回新的恢复(主)集群。使用 RHACM 控制台,进入到 Applications 菜单来执行重新定位。