4.15. 使用 Regional-DR 恢复到替换集群


当主集群有故障时,您可以获得修复的选项,等待现有集群恢复,或者如果集群不可行,请完全替换集群。此解决方案指导您在将故障的主集群替换为新集群,并为这个新集群启用故障恢复(分配)。

在这些说明中,我们假定在安装和保护应用程序后必须替换 RHACM 受管集群。对于本节,RHACM 受管集群是 替换集群,而未替换的集群是 存活的集群,新集群是 恢复集群

前提条件

  • 确保 Regional-DR 环境已配置了使用红帽 Advance Cluster Management (RHACM)安装的应用程序。
  • 确保为应用程序分配保护它们不受集群故障的数据策略。

流程

  1. 在 surviving 集群中,备份 clientProfileMapping

    $  oc get clientprofilemapping ocs-storagecluster -n openshift-storage -o yaml > clientProfileMappingBeforeRecovery.yaml
  2. 将故障替换集群中的所有受保护的应用程序故障切换到 RHACM 控制台上的存活集群。

    • 对于受管应用程序

      在 Hub 集群中,进入到 Applications。点 Actions (swig) 并选择 Failover application

    • 对于发现的应用程序

      导航到 All Clusters Data Services disaster recovery Protected applications 选项卡。点 Actions (swig) 并选择 Failover

  3. 在继续下一步之前,验证所有受保护的应用程序都在存活的集群上运行。

    注意

    每个受管应用程序 DRPlacementControl 的 PROGRESSION 状态显示为 Cleaning Up。对于发现的应用程序,PROGRESSION 将为 Cleaning Up。如果 替换集群 离线或停机,则预期会这样做。

  4. 在 Hub 集群中,删除用于替换集群的 DRCluster。

    $ oc delete drcluster <drcluster_name> --wait=false
    注意

    use- wait=false,因为 DRCluster 在稍后的步骤之前不会删除。

  5. 在存活的集群中为每个受保护的应用程序删除灾难恢复。在 hub 集群上执行所有子步骤。

    1. 对于每个受管应用程序,编辑放置并确保选择了 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 命名空间中找到。

    2. 对于每个受管应用程序,编辑 PlacementDecision 并确保删除 替换集群

      $ oc edit placementdecision <placementdecision_name> -n <namespace> --subresource=status
      apiVersion: 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 命名空间中找到

    3. 在每个受保护的应用程序的 VolumeReplicationGroup (VRG)上运行以下命令来验证为替换集群删除了 s3Profile

      注意

      对于受管应用程序,关联的 VRG 位于应用命名空间中。对于发现的应用程序,关联的 VRG 位于 openshift-dr-ops 命名空间中。

      $ oc get vrg -n <vrg_namespace> -o jsonpath='{.items[0].spec.s3Profiles}' | jq
    4. 从 RHACM 控制台中的应用程序中删除灾难恢复:

      • 对于受管应用程序

        • 在 Hub 集群中,进入到 All Clusters Applications
        • Overview 选项卡中,选择 Manage disaster recovery
        • Remove disaster recovery
        • 单击 Confirm remove
      • 对于发现的应用程序

        • 导航到 All Clusters Data Services disaster recovery Protected applications 选项卡
        • 在应用程序行的末尾,点操作菜单 (&&) 并选择 Remove disaster recovery
        • 在下一提示中,单击 Remove
    5. 编辑每个受管应用程序的 放置 并删除注解 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 命名空间中找到。

  6. 对存活的集群中每个受保护的应用程序重复最后一步中详述的流程。现在,为受保护的应用程序移除灾难恢复已完成。
  7. 删除 存活 集群和 替换集群的所有 灾难恢复配置:

    1. 在 hub 集群中,删除与 surviving 集群 关联的 DRPolices,并为 DR 删除删除 替换集群

      $ oc delete drpolicy {drpolicy_name1 drpolicy_name2 ...}
    2. 在 hub 集群中,删除与 surviving 集群 关联的 mirrorpeer,并为 DR 删除删除 替换集群

      $ oc delete mirrorpeer {mirrorpeer_name}
    3. 在 hub 集群中,修补 mirorrpeer 以删除终结器:

      $ oc patch mirrorpeer {mirrorpeer_name} -p '{"metadata":{"finalizers":null}}' --type=merge
    4. surviving 集群,禁用 cephblockpoolradosnamespace 上的镜像:

      $ oc patch cephblockpoolradosnamespace <cephblockpoolradosnamespace_name> --type merge -p '{"spec":{"mirroring": null}}' -n openshift-storage
    5. surviving 集群中,禁用 cephblockpool 上的镜像:

      $ oc patch cephblockpool <cephblockpool_name> --type json -p '[{"op": "replace", "path": "/spec/mirroring", "value": {}}]' -n openshift-storage
  8. 使用 RHACM 控制台只为 替换集群 (失败集群)卸载 Submariner

    1. 导航到 Infrastructure Clusters Clustersets Submariner add-ons view,只为替换集群卸载 Submariner。

      注意

      替换集群的 Submariner 的卸载过程将保持 GREEN,在替换集群从 RHACM 控制台分离前不会完成。

  9. 返回到 Clusters 视图 和分离替换集群。
  10. 创建新的 OpenShift 集群(恢复集群),并导入到 Infrastructure Clusters 视图
  11. 将新的恢复集群添加到 Submariner 使用的 Clusterset 中。
  12. 仅为新的 恢复集群 安装 Submariner 附加组件

    注意

    如果将 GlobalNet 用于存活的集群,请确保为恢复集群启用 GlobalNet。

  13. 在恢复集群中安装 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,在恢复 集群中 手动编辑 StorageCluster yaml 以添加 clusterID 并将 enabled 设置为 true。将 <clustername> 替换为您的 RHACM 导入或新创建的受管集群名称。

    不要在 StorageCluster 中进行此更改,除非您在安装 Submariner 时启用了 Globalnet。

    $ oc edit storagecluster -o yaml -n openshift-storage
    spec:
      network:
        multiClusterService:
          clusterID: <clustername>
          enabled: true

    如果启用了 multiClusterService则无法禁用或 撤销,因为它故障转移了 MON,并使用 GlobalNet IP 地址重启 OSD,这在分配后无法更改。

    另外,如果在安装 Submariner 时启用了 GlobalNet,请按照在恢复集群中使用 ocs-provider-server ServiceExport 连接存储集群中 的说明。

  14. 使用 RHACM 控制台,进入到 Data Services disaster recovery Policies 选项卡。

    1. 选择 Create DRPolicy 并命名您的策略。
    2. 选择 恢复集群 和存存 集群
    3. 创建策略。具体步骤,请参阅在 Hub 集群上创建灾难恢复策略

    只有在 DRPolicy 的状态更改为 Validated 时才会进入下一步。

  15. 将 DRPolicy 应用到在 替换集群 失败前最初保护的集群中的应用程序。

    注意

    对于发现的应用程序,请确保在 恢复集群 中创建应用程序命名空间,然后再分配策略。

  16. 确保 替换集群的 blockpools 和 存活 集群的 blockpool 之间有一个 poolID 映射,以及失败的集群和恢复集群之间。

    1. 打开在第 1 步中创建的 clientProfileMappingBeforeRecovery.yaml 进行编辑:

      $ vi clientProfileMappingBeforeRecovery.yaml
    2. 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
    3. clientProfileMappingBeforeRecovery.yaml 文件保存到 clientProfileMappingBeforeRecovery-surviving.yaml 中。
    4. surviv ing 集群中创建 clientProfileMappingBeforeRecovery-surviving.yaml 资源:

      $ oc create -f clientProfileMappingBeforeRecovery-surviving.yaml -n openshift-storage
    5. 在恢复集群中,获取恢复集群和 存活 集群的 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"
    6. clientProfileMappingBeforeRecovery-surviving.yaml 的内容复制到一个新的 yaml 中:

      $ cp clientProfileMappingBeforeRecovery-surviving.yaml clientProfileMappingAfterRecovery.yaml
    7. 使用正确的 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
    8. 在恢复集群中创建 clientProfileMappingAfterRecovery.yaml 资源:

      $ oc create -f clientProfileMappingAfterRecovery.yaml -n openshift-storage
  17. Surviving 集群中 的新受保护的应用程序重新定位回对 staff M 控制台上的新恢复集群。

    • 对于受管应用程序

      • 在 Hub 集群中,进入到 All Clusters Applications
      • Overview 选项卡中,在操作菜单 (&&) 的应用程序行的末尾,选择 Manage diaster recovery
      • 单击 Relocate
    • 对于发现的应用程序

      • 导航到 All Clusters Data Services disaster recovery Protected applications 选项卡
      • 在应用程序行的末尾,点操作菜单 (&&) 并选择 Relocate
Red Hat logoGithubredditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

通过我们的产品和服务,以及可以信赖的内容,帮助红帽用户创新并实现他们的目标。 了解我们当前的更新.

让开源更具包容性

红帽致力于替换我们的代码、文档和 Web 属性中存在问题的语言。欲了解更多详情,请参阅红帽博客.

關於紅帽

我们提供强化的解决方案,使企业能够更轻松地跨平台和环境(从核心数据中心到网络边缘)工作。

Theme

© 2026 Red Hat
返回顶部