use*_*921 5 domain-name-system vps high-availability load-balancing round-robin
我知道已经问过这个问题的许多变体,但我仍然找不到满足我需求的好答案。
我想要做的是设置几个(至少 2 个)VPS来托管我的网络应用程序。我想提供一些负载平衡(使用 Varnish 很容易实现)和相对较高的可用性 - 这是我的问题。
使用负载平衡器(我需要在其中一个 VPS 上托管)会引入单点故障,这几乎与只有一台机器来提供内容一样糟糕。
http://i.stack.imgur.com/lFafj.png
而且 AFAIK DNS 循环方法不仅是负载平衡的坏主意,而且不提供故障转移机制。如果其中一台服务器出现故障,一些人(使用缓存的 DNS IP)仍会尝试连接到不可用的服务器。忘记短 TTL - 这不是正确的解决方案。
http://i.stack.imgur.com/mTLRf.png
需要考虑的一件非常重要的事情:我希望将我的VPS 划分到多个数据中心,这样如果一个数据中心的电力或 ISP 出现故障,网站就不会关闭。
我能想到的唯一 2 个解决方案是依赖 dns 循环(如果服务器出现故障,至少将内容提供给一定比例的用户直到恢复),或者在数据中心购买专用服务器,为停电做好准备并配备有几个互联网连接(与租用甚至 10 个 VPS 相比,这是非常昂贵的)。
所以问题是:在拥有多个负载平衡 VPS 时避免单点故障的正确方法是 什么?
请原谅图片。它们只是我的意思的基本示例。
笔记:
你愿意花多少钱,我还没有看到有人依赖 VPS 并且真的愿意为数据中心故障案例花钱。
关于你的图纸:
当(且仅当)负载均衡器是一台机器时,第一个失败是正确的,如果它是单个系统(如在由多个主机构建的系统中),则它不再正确。
SPA(最短的可能答案):
非常简短的回答:您需要获得一个在您的所有位置都可用的服务 IP。并设置BGP路由。
稍微长一点:通常这是通过使用 BGP 并在 2 个不同位置公布 IP 来完成的。您可以将其设置为始终公布 IP,但其中一个的优先级低于另一个。这样,在正常情况下,您的流量将仅流向一个站点,如果失败,BGP 路由将被丢弃,并且流量会切换到仍然可用的 IP。
我们有一些与此类似的设置,典型的布局是:
(每个地点):
2 个负载均衡器
这也是 BGP 运行并公布其 IP 的地方。通常是 Quagga 和一些 IPVS 设置(我们使用 keepalived)
n处理负载的服务器 (FE)
失败案例:
任何 1 个负载均衡器(位于单个站点)失败
任何n-kFE 失败(k即在我们不会遇到问题的情况下可能发生故障的 FE 的数量)
n-(k+1)FE 失败(在单个站点)
单个站点的任何重大中断
很抱歉,我现在没有心情进一步了解手动执行此操作的细节。我的猜测是,租用负载均衡器服务会更好(而且更便宜),它将为您带来魔力。我读过亚马逊提供了这些,但我不知道在不使用其其余基础设施的情况下是否可以使用它们。