第 12 章 受管集群之间的应用程序故障切换


本节介绍如何故障转移 busybox 示例应用程序。Metro-DR 的故障转移方法是基于应用程序。以这种方式保护的每个应用都必须具有对应的 DRPlacementControl 资源,并在应用程序命名空间中创建 PlacementRule 资源,如 Create Sample Application for DR 测试部分所示。

流程

  1. 创建 NetworkFence 资源并启用 隔离

    指定执行网络隔离操作的 CIDR 块或 IP 地址列表。在我们的情形中,这将是集群中每个 OpenShift 节点的 EXTERNAL-IP,需要使用外部 RHCS 集群进行隔离。

    1. 执行此命令以获取主受管集群的 IP 地址。

      $ oc get nodes -o jsonpath='{range .items[*]}{.status.addresses[?(@.type=="ExternalIP")].address}{"\n"}{end}'

      输出示例:

      10.70.56.118
      10.70.56.193
      10.70.56.154
      10.70.56.242
      10.70.56.136
      10.70.56.99
      注意

      在出现站点中断前,收集所有 OpenShift 节点的当前 IP 地址。最佳实践是创建 NetworkFence YAML 文件,并将其可用并最新以用于灾难恢复事件。

      所有节点的 IP 地址将添加到 NetworkFence 示例资源中,如下所示。这个示例是 6 个节点,但集群中可能存在多个节点。

      apiVersion: csiaddons.openshift.io/v1alpha1
      kind: NetworkFence
      metadata:
        name: network-fence-<cluster1>
      spec:
        driver: openshift-storage.rbd.csi.ceph.com
        cidrs:
          -  <IP_Address1>/32
          -  <IP_Address2>/32
          -  <IP_Address3>/32
          -  <IP_Address4>/32
          -  <IP_Address5>/32
          -  <IP_Address6>/32
          [...]
        secret:
          name: rook-csi-rbd-provisioner
          namespace: openshift-storage
        parameters:
          clusterID: openshift-storage
    2. 对于以上 YAML 文件示例,修改 IP 地址,并将正确的 <cluster1> 提供给在 RHACM 中主受管集群的 RHACM 中的集群名称。把它保存到名为 network-fence-<cluster1>.yaml 的文件中。

      重要

      在故障转移之前,必须从当前运行该应用的相对受管集群创建 NetworkFence。在本例中,这是二级受管集群

      $ oc create -f network-fence-<cluster1>.yaml

      输出示例:

      networkfences.csiaddons.openshift.io/network-fence-ocp4perf1 created
      重要

      创建 NetworkFence 后,所有应用程序与 OpenShift Data Foundation 存储的通信都将失败,一些 Pod 将处于不健康状态(例如:CreateContainerError, CrashLoopBackOff)。

    3. 在与创建 NetworkFence 的同一集群中,验证其状态是否为 Succeeded。Modify <cluster1> to be correct.

      export NETWORKFENCE=network-fence-<cluster1>
      oc get networkfences.csiaddons.openshift.io/$NETWORKFENCE -n openshift-dr-system -o jsonpath='{.status.result}{"\n"}'

      输出示例:

      Succeeded
  2. 隔离的集群修改 DRPolicy

    1. 编辑 Hub 集群上的 DRPolicy,并将 <cluster1>(例如: ocp4perf1)从 Unfenced 变为 ManuallyFenced

      $ oc edit drpolicy odr-policy

      输出示例:

      [...]
      spec:
        drClusterSet:
        - clusterFence: ManuallyFenced  ## <-- Modify from Unfenced to ManuallyFenced
          name: ocp4perf1
          region: metro
          s3ProfileName: s3-primary
        - clusterFence: Unfenced
          name: ocp4perf2
          region: metro
          s3ProfileName: s3-secondary
      [...]

      输出示例:

      drpolicy.ramendr.openshift.io/odr-policy edited
    2. 验证 Hub 集群中的 DRPolicy 状态已针对 Primary managed cluster 改为 Fenced

      $ oc get drpolicies.ramendr.openshift.io odr-policy -o yaml | grep -A 6 drClusters

      输出示例:

        drClusters:
          ocp4perf1:
            status: Fenced
            string: ocp4perf1
          ocp4perf2:
            status: Unfenced
            string: ocp4perf2
  3. DRPlacementControl 修改为 failover

    1. 在 Hub 集群中,导航到 Installed Operators,然后点 Openshift DR Hub Operator
    2. 单击 DRPlacementControl 选项卡。
    3. 单击 DRPC busybox-drpc,然后单击 YAML 视图。
    4. 添加 actionfailoverCluster 详情,如下方屏幕截图所示。failoverCluster 应该是第二个受管集群的 ACM 集群名称。

      DRPlacementControl 添加 Failover 操作

      Image show where to add the action Failover in the YAML view

    5. 点击 Save
  4. 验证 application busybox 是否现在在次受管集群中运行,即 YAML 文件中指定的故障转移集群 ocp4perf2

    $ oc get pods,pvc -n busybox-sample

    输出示例:

    NAME          READY   STATUS    RESTARTS   AGE
    pod/busybox   1/1     Running   0          35s
    
    NAME                                STATUS   VOLUME                                     CAPACITY   ACCESS MODES   STORAGECLASS                  AGE
    persistentvolumeclaim/busybox-pvc   Bound    pvc-79f2a74d-6e2c-48fb-9ed9-666b74cfa1bb   5Gi        RWO            ocs-storagecluster-ceph-rbd   35s
  5. 验证 busybox 不再在主受管集群上运行。

    $ oc get pods,pvc -n busybox-sample

    输出示例:

    No resources found in busybox-sample namespace.
重要

请注意,在发行注记的已知问题一节中记录的 Metro-DR 问题。

Red Hat logoGithubRedditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

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

让开源更具包容性

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

關於紅帽

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

© 2024 Red Hat, Inc.