第 12 章 受管集群之间的应用程序故障切换
本节介绍如何故障转移 busybox 示例应用程序。Metro-DR 的故障转移方法是基于应用程序。以这种方式保护的每个应用都必须具有对应的 DRPlacementControl
资源,并在应用程序命名空间
中创建 PlacementRule
资源,如 Create Sample Application for DR 测试部分所示。
流程
创建 NetworkFence 资源并启用 隔离。
指定执行网络隔离操作的 CIDR 块或 IP 地址列表。在我们的情形中,这将是集群中每个 OpenShift 节点的 EXTERNAL-IP,需要使用外部 RHCS 集群进行隔离。
执行此命令以获取主受管集群的 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
对于以上 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)。
在与创建 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
为
隔离
的集群修改 DRPolicy。编辑 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
验证 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
将 DRPlacementControl 修改为
failover
- 在 Hub 集群中,导航到 Installed Operators,然后点 Openshift DR Hub Operator。
- 单击 DRPlacementControl 选项卡。
-
单击 DRPC
busybox-drpc
,然后单击 YAML 视图。 添加
action
和failoverCluster
详情,如下方屏幕截图所示。failoverCluster
应该是第二个受管集群的 ACM 集群名称。DRPlacementControl 添加 Failover 操作
- 点击 Save。
验证 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
验证
busybox
不再在主受管集群上运行。$ oc get pods,pvc -n busybox-sample
输出示例:
No resources found in busybox-sample namespace.
请注意,在发行注记的已知问题一节中记录的 Metro-DR 问题。