我正在尝试使用 HAproxy 和 mysql 建立一个基本的高可用性解决方案。目前看起来像这样
如果发生host1
故障,host2
应该获取其 IP 和流量(使用我的 VPS 提供商的称为故障转移 IP 的功能。我认为不可能在那里让 CARP 工作)。
我想在节点上运行监控软件。这可行吗?我担心如果节点之间的链接出现问题(裂脑情况),监控软件的每个实例都会认为另一个节点已死,并试图为自己获取浮动 IP。
这并不可怕,但似乎会变得更糟。由于服务器之间没有链接,并且两台主机都认为它们是唯一存活的,因此数据库很快就会变得不一致。
有没有办法摆脱这种情况而不涉及第三台服务器?如果出现以下情况,我真的应该关心裂脑情况吗:
- 两台服务器位于同一提供商的两个数据中心(彼此相距仅 3 跳)。
- 看起来(traceroute)用于路由和之间的流量的机器
host1
与host2
用于路由来自互联网的流量的机器相同。因此,实际写入的裂脑情况(因为互联网是唯一的写入源)可能不可能发生?
答案1
这是一个合理的场景,STONITH(Shoot The Other Node In The Head)就是专门为解决这一问题而设计的。
如果您要这样做,并且您想确保永远不会发生裂脑,那么您需要使用一些带外控制,通常是可远程控制的电源板,为每个节点提供电源,以确保另一个节点在接管服务之前确实已关闭(通过拔掉插头)。