我在一家小公司工作,该公司为数千名用户提供 Web 应用程序。今年早些时候,他们为一家公司托管了一台服务器。我们最近在另一个位置购买了另一台服务器,希望有一天能使其成为一台冗余故障转移机器。我知道如何处理 mysql 复制,我计划使用主-主复制设置,并使用 rsync 来同步脚本和文件,但是我对如何配置故障转移一无所知。理想情况下,我希望两台机器接受请求,就像循环 DNS 一样,但是如果一台机器出现故障,我不希望请求流向那台机器。我遇到的所有解决方案都假设同一位置的服务器具有高可用性,但这些服务器位于两个完全不同的位置,具有不同的公共 IP 地址。任何帮助都将不胜感激。谢谢
答案1
通常,心跳(起搏器) 或者嗯用于管理动态故障转移的 IP 资源。为了使其有效工作,您需要共享同一网段。
如果服务器不在同一个物理空间内,即使拥有两个不同的互联网链接进行监控,也比其中一个链接是几英尺长的串行电缆更容易出错。
您需要衡量风险并根据您的需求确定优先级。您的首要任务是什么?可用性还是数据完整性?如果数据完整性不是首要任务,您可能会自动进行故障转移,但仍然面临分区风险。CAP 定理更详细地探讨了这一点。
通常不建议同时写入两个主服务器,因为可能会发生 ID 冲突。您可以配置偏移量,但这需要结合整个架构来考虑。
根据我从您描述中了解到的情况,我可能更倾向于数据完整性。我会设置双主服务器,只从您的应用程序写入一个主 IP。如果您的主服务器出现故障,我会让手动故障转移程序将 Web 应用程序重新指向辅助数据库。
如果您坚持自动故障转移,您可以编写一个脚本来考虑两个以上的故障点,并且可以使用附加逻辑将数据风险降至最低。但是,这种架构要复杂得多,您必须自己设计其中的一些内容。
MySQL 集群(NDB)和 Google 的补丁之间存在多种可用的技术,但没有一种可以完全消除 CAP 定理。