OpenShift Container Storage is now OpenShift Data Foundation starting with version 4.9.
第 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}'$ oc get nodes -o jsonpath='{range .items[*]}{.status.addresses[?(@.type=="ExternalIP")].address}{"\n"}{end}'Copy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 注意在出现站点中断前,收集所有 OpenShift 节点的当前 IP 地址。最佳实践是创建 NetworkFence YAML 文件,并将其可用并最新以用于灾难恢复事件。
所有节点的 IP 地址将添加到 NetworkFence 示例资源中,如下所示。这个示例是 6 个节点,但集群中可能存在多个节点。
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 对于以上 YAML 文件示例,修改 IP 地址,并将正确的 <cluster1> 提供给在 RHACM 中主受管集群的 RHACM 中的集群名称。把它保存到名为
network-fence-<cluster1>.yaml的文件中。重要在故障转移之前,必须从当前运行该应用的相对受管集群创建 NetworkFence。在本例中,这是二级受管集群。
oc create -f network-fence-<cluster1>.yaml
$ oc create -f network-fence-<cluster1>.yamlCopy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例:
networkfences.csiaddons.openshift.io/network-fence-ocp4perf1 created
networkfences.csiaddons.openshift.io/network-fence-ocp4perf1 createdCopy to Clipboard Copied! Toggle word wrap Toggle overflow 重要创建 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"}'export NETWORKFENCE=network-fence-<cluster1> oc get networkfences.csiaddons.openshift.io/$NETWORKFENCE -n openshift-dr-system -o jsonpath='{.status.result}{"\n"}'Copy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例:
Succeeded
SucceededCopy to Clipboard Copied! Toggle word wrap Toggle overflow
为
隔离的集群修改 DRPolicy。编辑 Hub 集群上的 DRPolicy,并将 <cluster1>(例如: ocp4perf1)从
Unfenced变为ManuallyFenced。oc edit drpolicy odr-policy
$ oc edit drpolicy odr-policyCopy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例:
drpolicy.ramendr.openshift.io/odr-policy edited
drpolicy.ramendr.openshift.io/odr-policy editedCopy to Clipboard Copied! Toggle word wrap Toggle overflow 验证 Hub 集群中的 DRPolicy 状态已针对 Primary managed cluster 改为
Fenced。oc get drpolicies.ramendr.openshift.io odr-policy -o yaml | grep -A 6 drClusters
$ oc get drpolicies.ramendr.openshift.io odr-policy -o yaml | grep -A 6 drClustersCopy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
将 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
$ oc get pods,pvc -n busybox-sampleCopy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例:
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
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 35sCopy to Clipboard Copied! Toggle word wrap Toggle overflow 验证
busybox不再在主受管集群上运行。oc get pods,pvc -n busybox-sample
$ oc get pods,pvc -n busybox-sampleCopy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例:
No resources found in busybox-sample namespace.
No resources found in busybox-sample namespace.Copy to Clipboard Copied! Toggle word wrap Toggle overflow
请注意,在发行注记的已知问题一节中记录的 Metro-DR 问题。