起搏器未检测到节点断开连接

起搏器未检测到节点断开连接

我在 Centos 7 主机上设置了三个 Centos 7 KVM VM,目的是在部署生产系统之前测试集群配置的各个方面。

节点名为 clua、club 和 cluc。配置了一些资源:

  • fence_virsh STONITH 资源克隆集
  • dlm、clvmd 和 GFS2 FileSystem 资源克隆集

我已经测试了各种故障场景。其中导致问题的场景是,我通过关闭三个节点中的两个节点上的接口,导致节点之间失去联系。

在这里的测试中,我ifdown关闭了 clua 和 cluc 上的接口,只留下 club 不动。我已确认在此状态下无法在节点之间进行 ping 操作。

在俱乐部里,它或多或少达到了我的预期:

root@itkclub ~ # pcs status
Cluster name: tclu
Stack: corosync
Current DC: club (version 1.1.15-11.el7_3.4-e174ec8) - partition WITHOUT quorum
Last updated: Thu Apr  6 16:23:28 2017          Last change: Thu Apr  6 16:18:33 2017 by root via cibadmin on clua

3 nodes and 12 resources configured

Node clua: UNCLEAN (offline)
Node cluc: UNCLEAN (offline)
Online: [ club ]

Full list of resources:

 Clone Set: dlm-clone [dlm]
     dlm        (ocf::pacemaker:controld):      Started clua (UNCLEAN)
     dlm        (ocf::pacemaker:controld):      Started cluc (UNCLEAN)
     Started: [ club ]
 Clone Set: clvmd-clone [clvmd]
     clvmd      (ocf::heartbeat:clvm):  Started clua (UNCLEAN)
     clvmd      (ocf::heartbeat:clvm):  Started cluc (UNCLEAN)
     Started: [ club ]
 Clone Set: varopt_fs-clone [varopt_fs]
     varopt_fs  (ocf::heartbeat:Filesystem):    Started clua (UNCLEAN)
     varopt_fs  (ocf::heartbeat:Filesystem):    Started cluc (UNCLEAN)
     Started: [ club ]
 Clone Set: virsh-fencing-clone [virsh-fencing]
     virsh-fencing      (stonith:fence_virsh):  Started clua (UNCLEAN)
     virsh-fencing      (stonith:fence_virsh):  Started cluc (UNCLEAN)
     Started: [ club ]

Daemon Status:
  corosync: active/disabled
  pacemaker: active/disabled
  pcsd: active/enabled

但是,在其他两个节点(我ifdown编辑了接口的节点)上似乎没有检测到任何错误:

root@itkcluc ~ # pcs status
Cluster name: tclu
Stack: corosync
Current DC: club (version 1.1.15-11.el7_3.4-e174ec8) - partition with quorum
Last updated: Thu Apr  6 16:26:01 2017          Last change: Thu Apr  6 16:18:33 2017 by root via cibadmin on clua

3 nodes and 12 resources configured

Online: [ clua club cluc ]

Full list of resources:

 Clone Set: dlm-clone [dlm]
     Started: [ clua club cluc ]
 Clone Set: clvmd-clone [clvmd]
     Started: [ clua club cluc ]
 Clone Set: varopt_fs-clone [varopt_fs]
     Started: [ clua club cluc ]
 Clone Set: virsh-fencing-clone [virsh-fencing]
     Started: [ clua club cluc ]

Daemon Status:
  corosync: active/disabled
  pacemaker: active/disabled
  pcsd: active/enabled

root@itkcluc ~ # ping club
PING club (192.168.1.12) 56(84) bytes of data.
^C
--- club ping statistics ---
4 packets transmitted, 0 received, 100% packet loss, time 2999ms
root@itkcluc ~ # ping clua
PING clua (192.168.1.2) 56(84) bytes of data.
^C
--- clua ping statistics ---
4 packets transmitted, 0 received, 100% packet loss, time 2999ms

为什么 clua 和 cluc 上的起搏器没有检测到它无法与任何其他节点通信?

一旦陷入这种状态,正确的恢复程序是什么?

答案1

其余节点均不具有法定人数,因此无法采取任何 STONITH 操作,也因此没有集群操作被视为“安全的”。

您将 clustersno-quorum-policy属性设置为多少?是freeze偶然吗?您不能使用stop默认设置,因为没有仲裁的节点将无法停止其资源,因为 GFS2 需要仲裁才能卸载,否则,访问其数据。

另外,club您示例中的 DC(指定控制器)是;它负责跟踪集群的资源。其他节点必须达到法定人数才能选举新的 DC。

在三节点集群中,两个节点的 NIC 同时发生故障的可能性极小。但是,如果您出于某种原因仍然担心,您可以向集群添加更多节点,以仅充当仲裁节点(使用-inf:位置约束来阻止它们获取资源),直到该风险变得足够小。

为了摆脱这种情况,我只需“手动”重置所有三个框:echo b > /proc/sysrq-trigger

答案2

我遇到了类似的问题。就我而言,我没有关闭给定节点上的网络接口,而是更改了 AWS 安全组以禁止cluacluc(其中club是主节点)之间的通信。

clua当我执行此操作时,集群的所有节点似乎都认为所有节点都在线。所有节点在大约 20 分钟内都未检测到和之间缺少连接cluc。之后,节点显示以下状态:

  • clua看到clubcluc处于脱机状态并且所有资源都已停止
  • club视为clua离线,并且所有资源都在运行club
  • cluc视为clua离线,并且所有资源都在运行club

就您而言,等待一段时间后状态是否发生了变化?

相关内容