TL;DR:以下问题以粗体显示
这里http://www.howto-expert.com/how-to-create-a-server-failover-solution/这是一篇(我认为)很旧的博客文章,解释了如何设置 2 台服务器(一个主服务器和一个从服务器),每个服务器位于不同的地理位置。
上下文是关于自托管网站(+数据库)服务,并使之成为这样一种状态:当主服务器未通过健全性检查(例如,由于机器关闭、互联网连接中断或管理员正在进行更新等)时,从服务器接管网站并向访问者提供服务。
此处使用的软件解决方案是“DNS Made Easy”,它似乎
- 在第三台机器上旋转,
- 将网站 IP 关联到第三台机器(当必须通过注册商选择域名时),
- 并且似乎将访问者重新路由到两个网站主机之一。
(我最终会选择像 HAproxy+KeepAliveD 这样的解决方案,因为它是免费的。)
但现在,假设我为第二台从机提供了硬件,以防主机发生故障,那么投资将是如果没用第三台机器(故障转移监视器在圖上)崩溃。
主要问题:如何将故障转移监控嵌入到两台机器中?
或者,如何仅使用两台物理机进行故障转移?
(为了得到 2 个故障点而不是 1 个)
它隐含着以下问题:
为什么人们总是会遇到单点故障(隔离的故障转移监视器)?
我是否应该使用 KVM 在每台机器中设置“2 个服务器”(主服务器中的监视器 1 + 主服务器,从服务器中的监视器 2 + 从服务器)或者我可以在一台机器中安装所有不同的服务?
是否有可能让两台机器彼此远离但仍共享相同的 IP 地址?
答案1
DNS Made Easy 教程描述了一个能够进行 DNS 更改的监控节点;基于 DNS 的负载平衡器。是的,一个监控节点是单点故障。但是,只要活动节点处于启动状态,连接就会继续工作。即使监控节点已关闭。此外,它可以位于第三个托管站点,以便更好地检测从外部访问它的问题。一个缺点是 DNS 更新可能需要一段时间,它们会被缓存很长时间。
haproxy 则不同。它代理连接到后端,因此位于数据路径中。通常,这些后端位于同一数据中心位置,以减少延迟。代理意味着它可以巧妙地处理请求,快速重新路由到另一个后端,终止 TLS,处理 HTTP 标头等等。计划外的停机会导致服务中断,因此请考虑它们的高可用性。
集群是另一回事。在这些情况下,应用程序资源(如 IP 地址或共享存储)在主机之间移动。共享存储使使用完全相同的数据对数据库进行故障转移成为可能。然而,这些很难安全地实现,集群分区(裂脑)可能对系统完整性造成危险。此外,他们的存储和网络技巧适用于传统数据中心,可能不会在典型的 VM 托管提供商上使用。
两台相距很远的机器是否能共享同一个 IP 地址?
这并不容易,这是该项目的另一个层次。在互联网上,您需要使用某种 BGP 技巧,例如任播。您需要自己的 IP 空间、ASN 和一些 BGP 路由器。或者将其外包给某些提供商的负载均衡器作为服务。
最后,确定您对恢复速度的要求以及必须避免的故障模式。然后实施一些措施来满足这些要求。
如果您的服务器具有不同的 IP,并且可以处理几个小时的停机时间,则手动更改 IP 地址可能会有效。简单又方便。
如果您需要立即自动故障转移、无单点故障和全局 CDN 样式路由,那么这是一个相当复杂的设计。