6.2. 对 Regional-DR 进行故障排除
6.2.1. 为某些镜像停止 RBD 镜像调度
- 问题
对于某些镜像,需要一些常见原因来进行 RBD 镜像调度停止。
在为镜像标记应用程序后,出于某种原因(如果不复制),请使用 toolbox pod 并运行它,以查看哪些镜像调度已停止。
$ rbd snap ls <poolname/imagename> –all
- 解决方案
- 在主集群中重启 manager 守护进程
- 在主集群中禁用并立即重新启用受影响镜像的 mirroring
6.2.2. rbd-mirror
守护进程健康状态
- 问题
当 mirror 服务
::get_mirror_service_status
调用Ceph
monitor 来获取rbd-mirror
的服务状态,会有多种情况会报告 WARNING。在网络连接网络连接后,
rbd-mirror
守护进程健康状态在警告
状态,同时两个受管集群间的连接都正常。- 解决方案
在 toolbox 中运行以下命令并查找
leader:false
rbd mirror pool status --verbose ocs-storagecluster-cephblockpool | grep 'leader:'
如果您在输出中看到以下内容:
leader: false
这表示存在守护进程启动问题,最有可能的根本原因是由于问题可靠地连接到 secondary 集群。
临时解决方案:通过删除 pod 并验证它已重新调度到另一节点上,将
rbd-mirror
pod 移到另一个节点。leader: true
或没有输出
BZ 参考: [2118627]
6.2.3. 在故障切换后,有状态集应用程序会卡住
- 问题
在重新定位到首选集群时,DRPlacementControl 会一直报告 PROGRESSION 为 "MovingToSecondary"。
在以前的版本中,在 Kubernetes v1.23 之前,Kubernetes control plane 不会清理为 StatefulSets 创建的 PVC。此活动由集群管理员或管理 StatefulSets 的软件操作员保留。因此,当 Pod 被删除时,StatefulSet 的 PVC 会保持不变。这可防止 Ramen 将应用程序重新定位到首选集群。
- 解决方案
如果工作负载使用 StatefulSets,且重新定位会卡住 PROGRESSION 为 "MovingToSecondary",则运行:
$ oc get pvc -n <namespace>
对于属于该 StatefulSet 的命名空间的每个绑定的 PVC,请运行
$ oc delete pvc <pvcname> -n namespace
删除所有 PVC 后,卷组复制组 (VRG) 过渡到 secondary,然后会被删除。
运行以下命令
$ oc get drpc -n <namespace> -o wide
几分钟后,PROGRESSION 报告 "Completed" 并完成重新定位。
- 结果
- 工作负载重新定位到首选集群
BZ reference: [2118270]
6.2.4. 故障转移后应用程序没有运行
- 问题
-
在应用程序失败时,工作负载 pod 无法访问运行状态,并带有错误
MountVolume.MountDevice failed for volume <PV name> : rpc error: code = Internal desc = fail to check rbd image status: (cannot map image <image description> it is not primary)
在工作负载失败的集群中执行这些步骤。
- 解决方案
将 RBD 镜像守护进程部署缩减为
0
,直到应用 pod 可以从上述错误中恢复。$ oc scale deployment rook-ceph-rbd-mirror-a -n openshift-storage --replicas=0
在恢复后,将 RBD 镜像守护进程部署重新调度到
1
。$ oc scale deployment rook-ceph-rbd-mirror-a -n openshift-storage --replicas=1
BZ 参考: [2134936]
6.2.5. volsync-rsync-src
pod 处于错误状态
- 问题
volsync-rsync-src
pod 处于错误状态,因为它们无法连接到volsync-rsync-dst
。VolSync
源 pod 日志可能会在与日志片断类似的延长持续时间内显示持久性错误消息。运行以下命令来检查日志。
$ oc logs volsync-rsync-src-<app pvc name>-<suffix>
输出示例
VolSync rsync container version: ACM-0.6.0-ce9a280 Syncing data to volsync-rsync-dst-busybox-pvc-9.busybox-workloads-1.svc.clusterset.local:22 Syncronization failed. Retrying in 2 seconds. Retry 1/5. rsync: connection unexpectedly closed (7 bytes received so far) [sender] rsync error: unexplained error (code 255) at io.c(226) [sender=3.1.3]
- 解决方案
您可以按照以下步骤重新配置最大传输单元 (MTU) 大小来解决这个问题:
注解具有 submariner 网关标签的节点。
$ oc annotate node -l submariner.io/gateway submariner.io/tcp-clamp-mss=1340 --overwrite
输出示例
node/compute-0 annotated node/compute-2 annotated
删除 submariner 路由代理 pod。
$ oc delete pods -n submariner-operator -l app=submariner-routeagent
输出示例
pod "submariner-routeagent-4r66z" deleted pod "submariner-routeagent-4tn6d" deleted pod "submariner-routeagent-9r42l" deleted pod "submariner-routeagent-bg5wq" deleted pod "submariner-routeagent-gzqdj" deleted pod "submariner-routeagent-j77jq" deleted
检查
vol-sync-src pod
中是否存在任何错误。$ oc logs volsync-rsync-src-dd-io-pvc-3-nwn8h
输出示例
VolSync rsync container version: ACM-0.6.0-ce9a280 Syncing data to volsync-rsync-dst-dd-io-pvc-3.busybox-workloads-8.svc.clusterset.local:22 … .d..tp..... ./ <f+++++++++ 07-12-2022_13-03-04-dd-io-3-5d6b4b84df-v9bhc
BZ 参考: [2136864]
6.2.6. volsync-rsync-src
pod 处于错误状态,因为它无法解析目标主机名
- 问题
VolSync
源 pod 无法解析 VolSync 目标 pod 的主机名。VolSync Pod 的日志在延长时间内显示错误消息,类似于以下日志片断。$ oc logs -n busybox-workloads-3-2 volsync-rsync-src-dd-io-pvc-1-p25rz
输出示例
VolSync rsync container version: ACM-0.6.0-ce9a280 Syncing data to volsync-rsync-dst-dd-io-pvc-1.busybox-workloads-3-2.svc.clusterset.local:22 ... ssh: Could not resolve hostname volsync-rsync-dst-dd-io-pvc-1.busybox-workloads-3-2.svc.clusterset.local: Name or service not known
- 解决方案
在这两个节点上,重启
submariner-lighthouse-agent
。$ oc delete pod -l app=submariner-lighthouse-agent -n submariner-operator
6.2.7. 无法使用 RHACM 2.8 将 DRPolicy 应用到订阅工作负载
- 问题
-
Red Hat Advanced Cluster Management (RHACM) 2.8 控制台已弃用
PlacementRule
类型,并移到 Subscription 应用程序的放置类型
。因此,当用户使用 RHACM 2.8 控制台创建 Subscription 应用程序时,只会使用 Placement 创建应用程序。由于 OpenShift Data Foundation 4.12 灾难恢复用户界面和 Ramen 操作器不支持订阅应用程序的放置,所以灾难恢复用户界面无法检测应用程序并显示分配策略的详情。 - 解决方案
由于 RHACM 2.8 控制台仍能够检测
PlacementRule
(使用命令行界面(CLI)创建的 PlacementRule),请执行以下步骤,以使用PlacementRule
在 RHACM 2.8 中创建 Subscription 应用程序:-
使用应用程序命名空间创建一个新项目。(例如:
busybox-application
) -
找到要部署应用的受管集群的标签(例如:
drcluster1-jul-6
) 使用上一步中创建的受管集群标签在
application-namespace
上创建PlacementRule
CR:apiVersion: apps.open-cluster-management.io/v1 kind: PlacementRule metadata: labels: app: busybox-application name: busybox-application-placementrule-1 namespace: busybox-application spec: clusterSelector: matchLabels: name: drcluster1-jul-6
-
在使用 Subscription 应用程序页面中的 RHACM 控制台创建应用程序时,请选择此新的
PlacementRule
。 -
从 YAML 编辑器删除
PlacementRule
,以便可以重新使用所选编辑器。
-
使用应用程序命名空间创建一个新项目。(例如:
BZ 参考: [2216190]