我有一个两节点群集心跳和DRBDpipe理一个MySQL资源。 如果我暂停主服务器,重新启动服务器或断开networking连接,则故障切换会很好。
但是,如果主服务器遇到内核恐慌(通过运行echo c > /proc/sysrq-trigger模拟),则辅助服务器不会echo c > /proc/sysrq-trigger资源。
这是次要的心跳日志看起来像:
Jul 11 21:33:32 rad11 heartbeat: [7519]: WARN: node rad10: is dead Jul 11 21:33:32 rad11 heartbeat: [7519]: info: Link rad10:eth0 dead. Jul 11 21:33:32 rad11 heartbeat: [8442]: info: Resetting node rad10 with [Meatware STONITH device] Jul 11 21:33:32 rad11 heartbeat: [8442]: ERROR: glib: OPERATOR INTERVENTION REQUIRED to reset rad10. Jul 11 21:33:32 rad11 heartbeat: [8442]: ERROR: glib: Run "meatclient -c rad10" AFTER power-cycling the machine.
有没有人知道为什么中学在这种情况下无法接pipe? 通常故障转移很好,但我试图模拟主节点上的内核恐慌。
编辑:这是我的心跳configuration,ha.cf
# /etc/ha.d/ha.cf logfile /var/log/ha-log keepalive 1 deadtime 10 udpport 695 ucast eth0 rad11 auto_failback on stonith_host rad10 meatware rad11 stonith_host rad11 meatware rad10 node rad10 rad11
当集群节点彼此失去联系时,为避免出现裂脑情景,两个节点都认为它们是主节点,并试图同时运行具有潜在灾难的共享资源(这在两个节点集群中尤其是一个大问题,因为如果两个节点每个都有一个投票,那么谁有法定人数?),所以为了减轻这一点,一些集群实施了各种forms的击剑。
在linux-ha wiki页面上:
击剑是将资源从状态不确定的节点locking的过程。
有各种各样的击剑技术可用。
可以使用节点防护来隔离节点,也可以使用资源防护来隔离节点资源。 有些types的资源是“自我击剑资源”,有些types的资源不会被同时使用损坏,也根本不需要击剑。
当节点执行干净closures时,它将很好地离开集群,从而其他节点将知道发生了什么,因此只会接pipe节点可能已经运行的任何服务,然后继续进行。 当节点而不是离开集群很好地得到一个内核恐慌,其他集群成员将不知道另一个节点的状态。 从他们的angular度来看,这将是“不确定的”,相反,他们将执行configuration的“击剑”动作,在STONITH的情况下意味着试图通过强制从集群中去除虚假节点(通过电源循环等)。
看看你的日志,看起来meatware STONITH机制是为你的群集configurationselect的。 就像名称所暗示的那样,它意味着手动重启另一个节点,然后运行该命令。 从doc :
meatware
奇怪的名字和一个简单的概念。 肉类需要来自人类的帮助来操作。 无论什么时候调用,肉食品都会logging一个应该显示在节点控制台上的CRIT严重性消息。 然后,操作员应确保节点已closures,并发出一个肉客户端命令,告诉肉类可以告诉群集它可能认为该节点已经死亡。 有关更多信息,请参阅README.meatware。
还有其他的方法来configuration屏蔽。 在创build群集时,我通常会为PSU获取两个APC交换机:并configuration“APC防护” ( stonith -t apcmaster -h )。 这样,当一个节点出现故障时,另一个节点将通过login到APC接口对故障组件进行断电重启,并在连接的PSU插槽上发送shutdown / reboot命令(我得到两个以避免单点故障) 。