我们有一个负载较低但可用性要求较高的 Web 应用程序。它由一个前端负载平衡器和几个后端服务器组成。负载平衡器主要用于掩盖故障,而不是分散负载。
后端服务器通过跨两个可用区进行复制来实现高可用性。但如何让前端本身也具有高可用性呢?目前它存在单点故障。
我们可能会使用 AWS Elastic Load Balancing,但它有点贵,而且我们并不真正需要负载平衡部分,那么:您会如何以其他方式解决这个问题?
一个接近的想法是使用 ping 或心跳来监控前端;超时后,将前端的 Elastic IP 切换到另一台配置为前端的机器。我对这种方法的主要担忧是,它显然会占用10分钟以便弹性 IP 分配能够传播。
有没有比这种方法响应时间更快的方法?您认为零停机时间是可能的吗?
换个方式来思考这个问题:在没有 AWS Elastic Load Balancing 的常规自托管数据中心中,您如何实现这一点?
答案1
快速、可靠、便宜。任选两项即可。
但说实话,“零停机时间”无论从哪方面来说都是不可能的。你想要零停机时间,但你似乎不愿意为此花费必要的金钱。
我相信您使用心跳并将前端 IP 转移到另一个节点的做法是正确的。任何比这更复杂的操作要么涉及签订 Akamai 或 Limelight 等 CDN 的服务,要么获取 AS 编号、配置 BGP、获取 IP 分配、在两个地理上相距遥远的托管地设置设备并在它们之间复制数据。这两种选择中的任何一种实施起来都非常昂贵且复杂。
答案2
在查看亚马逊的 ELB 服务时,请记住它使用CNAME 记录因此您将无法对域的根 (example.com) 进行负载平衡。您必须使用像 www.example.com 这样的子域,并让接受发送到 example.com 的流量的机器将客户端重定向到 www.example.com。这给您带来了单点故障。有关此问题的更多讨论可以在 Amazon 论坛上找到:http://developer.amazonwebservices.com/connect/thread.jspa?threadID=32044
答案3
您自己的 AS 编号跨两个或多个运营商级网络,停机时间几乎为零。多个物理站点在线。也就是说,EC2 停机时间几乎为零。
答案4
通过在主动/被动或主动/主动上安装两个负载均衡器,您可以避免斑点。
只需记住,在主动/主动场景中,您的两个磅将同时工作,并且如果其中一个失败,则另一个将接管。