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