3.16. 使用 Metro-DR 恢复替换集群


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

在这些说明中,我们假设 RHACM 受管集群必须在安装和保护应用程序后被替换。在本小节中,RHACM 受管集群是 替换集群,而没有替换的集群是 Surviving 集群,新的集群是 恢复集群

前提条件

  • 确保 Metro-DR 环境已配置了使用 Red Hat Advance Cluster Management (RHACM)安装的应用程序。
  • 确保为应用程序分配了一个数据策略,该策略可防止它们出现集群故障。

流程

  1. Hub 集群中 执行以下步骤:

    1. 使用 CLI 终端编辑 DRCluster 资源来隔离替换集群,其中 < drcluster_name&gt; 是替换集群名称。

      oc edit drcluster <drcluster_name>
      Copy to Clipboard Toggle word wrap
      apiVersion: ramendr.openshift.io/v1alpha1
      kind: DRCluster
      metadata:
      [...]
      spec:
        ## Add or modify this line
        clusterFence: Fenced
        cidrs:
        [...]
      [...]
      Copy to Clipboard Toggle word wrap
    2. 使用 RHACM 控制台,进入到 Applications,并将所有受保护的应用程序从故障集群故障转移到存活的集群。
    3. 验证并确保所有受保护的应用程序现在都在存活的集群中运行。

      注意

      每个应用程序 DRPlacementControl 的 PROGRESSION 状态将显示为 Cleaning Up。如果替换集群离线或关闭,则这是预期的。

  2. 取消隔离替换群集。

    使用 CLI 终端,编辑 DRCluster 资源,其中 &lt ;drcluster_name& gt; 是替换集群名称。

    $ oc edit drcluster <drcluster_name>
    Copy to Clipboard Toggle word wrap
    apiVersion: ramendr.openshift.io/v1alpha1
    kind: DRCluster
    metadata:
    [...]
    spec:
      ## Modify this line
      clusterFence: Unfenced
      cidrs:
      [...]
    [...]
    Copy to Clipboard Toggle word wrap
  3. 删除替换集群的 DRCluster。

    $ oc delete drcluster <drcluster_name> --wait=false
    Copy to Clipboard Toggle word wrap
    注意

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

  4. 在 Surviving 集群中为每个受保护的应用程序禁用 Hub 集群上的灾难恢复。

    1. 对于每个应用程序,编辑放置并确保选择了 Surviving 集群。

      注意

      对于基于 Subscription 的应用程序,相关的放置可以在与受管集群类似的 hub 集群上的同一命名空间中找到。对于基于 ApplicationSets 的应用程序,相关的放置可在 hub 集群的 openshift-gitops 命名空间中找到。

      $ oc edit placement <placement_name> -n <namespace>
      Copy to Clipboard Toggle word wrap
      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
      [...]
      Copy to Clipboard Toggle word wrap
    2. 在每个受保护的应用程序的 VolumeReplicationGroup 上运行以下命令来验证为替换集群删除了 s3Profile

      $ oc get vrg -n <application_namespace> -o jsonpath='{.items[0].spec.s3Profiles}' | jq
      Copy to Clipboard Toggle word wrap
    3. 在将受保护的应用程序 放置资源 配置为使用 Surviving 集群,并替换集群 s3Profile (s)从受保护的应用程序中删除后,所有 DRPlacementControl 资源都必须从 Hub 集群中删除

      $ oc delete drpc <drpc_name> -n <namespace>
      Copy to Clipboard Toggle word wrap
      注意

      对于基于 Subscription 的应用程序,相关的 DRPlacementControl 可以在与 hub 集群上的受管集群相同的命名空间中找到。对于基于 ApplicationSets 的应用程序,相关的 DRPlacementControl 可以在 hub 集群的 openshift-gitops 命名空间中找到。

    4. 验证所有 DRPlacementControl 资源是否已删除,然后继续下一步。此命令是所有命名空间的查询。应该没有找到资源。

      $ oc get drpc -A
      Copy to Clipboard Toggle word wrap
    5. 最后一步是编辑每个应用程序 放置 并删除注解 cluster.open-cluster-management.io/experimental-scheduling-disable: "true "。

      $ oc edit placement <placement_name> -n <namespace>
      Copy to Clipboard Toggle word wrap
      apiVersion: cluster.open-cluster-management.io/v1beta1
      kind: Placement
      metadata:
      annotations:
        ## Remove this annotation
        cluster.open-cluster-management.io/experimental-scheduling-disable: "true"
      [...]
      Copy to Clipboard Toggle word wrap
  5. 在存活集群中,重复上一步中详述的流程,以及每个受保护应用程序的子步骤。为受保护的应用程序禁用 DR 现已完成。
  6. 在 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
    Copy to Clipboard Toggle word wrap
    注意

    此脚本使用 oc delete project openshift-operators 命令来删除 hub 集群上的这个命名空间中的灾难恢复(DR) Operator。如果在这个命名空间中存在其他非DR operator,则必须从 OperatorHub 再次安装它们。

  7. 再次创建命名空间 openshift-operators 后,添加监控标签以收集灾难恢复指标。

    $ oc label namespace openshift-operators openshift.io/cluster-monitoring='true'
    Copy to Clipboard Toggle word wrap
  8. 在 Surviving 集群中,确保删除在 DR 安装期间创建的对象存储桶。如果对象存储桶没有被脚本删除,请删除它。用于 DR 的对象存储桶的名称以 odrbucket 开始。

    $ oc get obc -n openshift-storage
    Copy to Clipboard Toggle word wrap
  9. 在 RHACM 控制台中,进入到 Infrastructure Clusters 视图

    1. 分离替换集群。
    2. 创建新的 OpenShift 集群(恢复集群),并将新集群导入到 RHACM 控制台。具体步骤请参阅创建集群并将 目标受管集群导入到 hub 集群
  10. 在恢复集群中安装 OpenShift Data Foundation 操作器,并将它连接到与存活集群相同的外部 Ceph 存储系统。具体步骤请参考 以外部模式部署 OpenShift Data Foundation

    注意

    确保 OpenShift Data Foundation 版本为 4.15 (或更高),并且同一版本的 OpenShift Data Foundation 位于存活集群中。

  11. 在 hub 集群中,从 OperatorHub 安装 ODF Multicluster Orchestrator operator。具体步骤,请参阅安装 OpenShift Data Foundation Multicluster Orchestrator operator 的章节。
  12. 使用 RHACM 控制台,导航到 Data Services Data policies

    1. 选择 Create DRPolicy 并为您的策略命名。
    2. 选择 恢复 群集和 存活集群
    3. 创建策略。具体步骤请查看在 Hub 集群上创建灾难恢复策略 一章。

    只有在 DRPolicy 状态变为 Validated 后,继续下一步。

  13. 将 DRPolicy 应用到最初在替换集群失败前保护的存活集群中的应用程序。
  14. 将新受保护的应用重新定位到存活群集上,返回到新的恢复(主)集群。使用 RHACM 控制台,进入到 Applications 菜单来执行重新定位。
返回顶部
Red Hat logoGithubredditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

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

让开源更具包容性

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

關於紅帽

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

Theme

© 2025 Red Hat