我知道这个问题的很多变种已经被问到了,但我仍然无法find一个好的答案来满足我的需求。
我想要做的是设置一些(至less2个)VPS来托pipe我的networking应用程序。 我想提供一些负载平衡 (这是很容易实现与我们说的光油),和相对较高的可用性 – 这是我的问题。
使用负载平衡器(我需要在VPS的主机上托pipe)引入了单点故障 ,与只有一台机器服务内容几乎一样糟糕。
而AFAIK DNS轮询方法不仅是负载平衡的好主意,而且也不提供故障切换机制 。 如果其中一台服务器出现故障,某些人(使用caching的DNS IP)仍将尝试连接到不可用的服务器。 忘记短TTL – 这不是正确的解决scheme。
一个非常重要的事情要考虑:我想让我的VPS分布在许多数据中心 ,所以如果电力或ISP在一个数据中心失败,网站将不会崩溃。
我能想到的唯一的两个解决scheme是依靠dns循环(如果发生服务器故障,至less将某些内容提供给一定比例的用户,直到恢复),或者在数据中心购买一台专门的服务器,为数据中心做好充分的准备有几个互联网连接(与租用甚至10个VPS相比,这是非常昂贵的)。
所以问题是: 有几个负载均衡的VPS时,避免单点故障的正确方法是什么?
请原谅图像。 他们就是我所说的“尽可能基本”的例子。
笔记:
你愿意花多less钱,我还没有看到有人依赖VPS,真的想把钱花在数据中心失败的案例上。
关于你的图纸:
如果(且仅当)负载平衡器是单个机器,如果是单个系统(如在由多个主机构build的系统中那样),那么第一个失败就是真的。
SPA(最短的答案):
真的很简短的答案:你需要获得一个服务的IP在你所有的位置可用。 并build立BGP路由。
再长一点:通常情况下,这是通过使用BGP并在2个不同的位置通告IP来完成的。 你可以设置它的方式是知识产权是一直宣布,但有一个较低的优先级比另一个。 这种方式在正常情况下你的stream量只能到达一个站点,否则BGP路由被丢弃,stream量切换到IP仍然可用。
我们有一些类似的设置,典型的布局是:
(每个位置):
2个负载均衡器
这也是BGP运行的地方,并宣布它的IP。 通常Quagga和一些IPVS设置(我们使用keepalived)
n服务器来处理负载(FE)
失败案例:
任何1 Loadbalancer(在一个站点)失败
任何FE的失败( k是在没有我们遇到问题的情况下可能失败的FE的数量)
n-(k+1) FEs失败(在一个站点)
任何重大的停电在一个单一的网站
对不起,我现在没有心情去进一步手动做这个细节。 我的猜测是你会通过租用一个负载均衡服务来更好(也更便宜),这对你来说是很有用的。 我读过,亚马逊提供这些,但我不知道如果他们的使用是可能的,而不使用其他基础设施。
我试图达到完全一样的东西,如果你find一个好的解决scheme,请发布! 🙂
到目前为止,我所知道的是Amazon EC2“Elastic IP”(也称为“Elastic Load Balaning”),它可以路由到一个地区不同数据中心的实例。 (具有讽刺意味的是,他们曾经有一次中断了一个地区的所有数据中心)。
另外我GOOGLE了这一个: http : //www.fibercloud.com/MatrixTechnology – 看起来他们也提供你在找什么。 (我自己也不敢问价格:)
到目前为止,我看到最终的答案是pipe理自己的BGP,但至less对我来说是没有问题的。
对于DNS选项,我通常会认为这不是完美的,因为一些不可避免的caching,主要是在最终用户的浏览器内部。 我也同意低TTL并不完美,因为我认为对于小型站点TTL较低会导致较小的减速,因为对于大多数用户来说,recursionDNSparsing器不会将其放在caching中。 (虽然值得一提的是google.com的TTL为300秒)。 顺便说一句,AFAIK浏览器将故障转移到第二个IP在DNS中广告,一旦超时连接到第一个,所以它不会完全失败,而是我会叫它降级。
我正在考虑将两者结合起来 – 使用2个VPS提供者,每个主机托pipe2个主机 – 在同一个数据中心的主机之间使用IP故障切换,跨数据中心使用DNS(通常是两个广播的IP,TTL低,一旦失败,失败的IP删除)。
您应该了解两个网站都会因为互相认为彼此不可用而拼杀对方知识产权的情况。 我想我已经find了一个很好的解决scheme – 在每个主机上运行你的DNS服务器,所以每个站点在拆分大脑时只能从其自己的DNS服务器上删除另一个,因此能够到达一个主机的用户也将得到DNSparsing(他到达了,对吗?)主持人。
如果有4个主机太贵,我认为最好在某些可靠的提供商处使用IP故障转移,而不要单独依靠DNS。
问候,亚历克斯