TL;DR:我需要帮助在我的起搏器集群上设置隔离。
我有一组由三台机器组成的集群,它们运行着 Pacemaker。这台机器在我的家庭实验室中,不是工作环境。
两台是戴尔物理服务器。一台 R720xd 和一台 R710。第三台是在 libvirtd/qemu 下运行在米色盒子上的虚拟机。物理服务器和虚拟机都是 Ubuntu Server 22.04。
这三台机器也是 innodb 集群的成员。虚拟机会不断重新启动,导致 mysql 数据库损坏,而 innodb 集群无法处理。
有三个 Pacemaker 资源——一个用于 haproxy 的 VIP、一个用于 haproxy 本身的 VIP 和一个用于 mysqlrouter 的 VIP,位于 innodb 集群的前面。用于 haproxy 的两个资源位于同一位置,并配置为首选 R720xd,而 innodb VIP 配置为首选 R710。所有资源对于 VM 的优先级均为 -1000——VM 的作用是充当两个集群中的决胜投票,而不是处理连接。
造成不稳定的原因是 sbd。我在检查软件包时偶然发现了 sbd。我安装了它,并使用 softdog 内核模块为其配置了软件看门狗,发现运行它并在集群上重新启用 stonith 可以清除有关无隔离的集群警告。
在虚拟机上,watchdog 一直无法 ping 默认网关,该网关是运行 DD-WRT 的路由器。然后我将其更改为网络中的 Cisco 第 3 层交换机,并将 ping 次数从 2 增加到 10。它仍然没有得到响应,因此 watchdog 或 sbd 之一会硬重置虚拟机。
于是我删除了 ping。但它仍然有问题——我已将其设置为监视 /var/log/syslog,上次更新间隔为 900 秒……但它一直发现日志文件变化不够快,因此不断发生重启。
然后我将其更改为 /var/log/auth.log,由于 pacemaker 的一部分 -- crm_mon,它发生了很大变化。它一直存在重启问题,这破坏了 innodb 集群上的 HA 容错性。
因此,此时我已从所有 3 台服务器中删除了 sbd。这样我就没有任何 stonith 了。
我在戴尔服务器上安装了 idrac,并尝试使用 idrac 隔离模块。但我无法让它工作。我还尝试在所有 3 台服务器上使用 ssh 隔离模块,但也无法让它工作。
即使我可以让 idrac 隔离模块正常工作,它也会严重损坏戴尔服务器,导致 innodb 集群问题发生在那里。所以我认为我最好的选择可能是在所有 3 台服务器上设置 ssh 隔离模块。我读过所有警告,说它不是为生产而设计的,如果服务器真的处于糟糕的状态,它实际上无法正确地隔离它。
我确实有一个脚本程序,用于在问题发生后修复 innodb 集群,但恢复需要大量资源,尤其是在虚拟机上。复制 17GB 的 mysql 数据需要一段时间。
我使用 zabbix 监控所有服务器,并为上述 3 台服务器设置了 Pacemaker 模板,两台戴尔服务器还运行了一个脚本,如果 innodb 集群的状态不是“OK”,该脚本会向我发送电子邮件,因此当虚拟机硬重置时,我收到了许多电子邮件,告诉我状态为 OK_NO_TOLERANCE_PARTIAL。我每天都会密切关注这两台服务器。因此,我会知道集群是否有问题。
总结:
如果有人能解释如何设置 ssh 隔离模块以使其正常工作,我将不胜感激。这三台服务器都具有 ssh 密钥,用于以 root 身份进行无密码 ssh。除了 idrac 之外没有其他硬件隔离设备,但任何硬性关闭服务器的隔离都会导致与不良软件状态相同的问题……并且我已安装监控,当出现需要手动修复的问题时会提醒我。