我有两台真实服务器,位于不同的子网上,每台服务器都有一个永久 IP,并且有一个可供任一服务器使用的故障转移 IP。托管商提供了一个 API,我可以使用该 API 将故障转移 IP 分配给任何服务器。所以我需要在每台服务器上运行一个守护进程,它将监视本地服务器的健康状况,同时与另一台服务器上的对应通信,以便两者一起(或者只有一个,如果其他失败)决定谁将获得故障转移 IP(并运行脚本告诉托管商的 API 适当地路由它)。
keepalived
不能这样做,除非(据称)使用 Willy Tarreau 的单播补丁,但我尝试过但未成功。此外,守护进程最好不要尝试从网络接口获取或释放 IP;首选设置是两台机器的接口始终具有故障转移 IP 地址。
可以heartbeat
吗?任何其他类似的程序都可以吗?我最终编写了自己的守护进程,它确实可以正常工作,但如果现有程序可以做到这一点,我认为没有理由维护它。
Heartbeat 可以做到,因为它能够运行任意脚本来管理资源,因此您可以编写脚本来调用托管提供商的 API 来移动 IP 地址。