我正在考虑将我们的应用程序迁移到 Amazon Web Services。计划是让所有 EC2 实例在两个可用区之间进行镜像。由于数据传输成本,我们将停留在一个 AWS 区域(俄勒冈州)。
多个可用区消除了应用程序和数据库服务器的单点故障,但 ELB 怎么办?如果我有一个 ELB 在两个可用区之间分配流量,那么 ELB 是否也托管在这两个可用区中?
亚马逊采取了什么措施来防止 ELB 成为 SPoF?
答案1
从本质上讲,ELB 只是 EC2 实例的集合。当你创建一个ELB,您指定希望该负载均衡器所在的可用区域。组成负载均衡器的实例将在这些区域中创建。它们避免单点故障的方法是,当您进行 DNS 查找时返回多个 IP 地址。例如:
- website.example.com 的 DNS 查找返回 CNAME website-elb-12345.eu-west-1.elb.amazonaws.com
- 查询还返回 website-elb-12345.eu-west-1.elb.amazonaws.com 的信息。它指出该网站的 IP 地址为 1.2.3.4 和 IP 地址为 2.3.4.5
客户端可以选择使用哪个 IP 地址进行连接。DNS 查找返回的 IP 地址并不总是按照相同的顺序。如果客户端第一次尝试无法连接,则可以尝试使用其他 IP 地址进行重试。
ELB 的 DNS 记录的 TTL 仅为 60 秒,这意味着如果 ELB 实例死亡并被替换,DNS 将相当快地在所有地方更新。
答案2
它实际上可能是一个 SPoF,但我相信它只会是同一地区内的 SPoF。
这就是为什么 AWS 建议使用 Route 53 健康检查来检测和重新路由最终流向不健康 ELB 的流量。
您可以使用 Amazon Route 53 健康检查和 DNS 故障转移功能来增强在 Elastic Load Balancer 后面运行的应用程序的可用性。如果没有在负载均衡器中注册的正常 EC2 实例,Route 53 将无法与负载均衡器通信或者负载均衡器本身不健康。
答案3
您可以通过创建一个自动扩展组来解决单个可用区 SPoF 问题,如果您的单个 ELB 不满足 X 因素(无论是通过负载、响应时间等),则会创建一个新的 ELB。ELB 本质上是运行专有 AWS 代码的 EC2 实例。