AWS - ELB 可用区 + VPC 最佳实践?

AWS - ELB Availability Zones + VPC best practices?

设置 ELB 时,会显示以下内容:

You must specify subnets from at least two Availability Zones to increase the availability of your load balancer.

我目前有两个 VPC:

  1. WebVPC
    1. public-subnet-us-east-1a
    2. 私有子网-us-east-1b
  2. 数据库VPC
    1. public-subnet-us-east-1a
    2. 私有子网-us-east-1b

ELB 仅适用于 WebVPC(为网络流量提供服务)。我目前每个 VPC 只有一个 public 和一个私有子网,这意味着我只能从我的 WebVPC 为 ELB 提供一个 public 子网。

这是否意味着最好有至少两个 public 和至少两个私有子网?

是的。最好的做法是提供至少两个可用区。

如果 EC2 实例在私有子网中启动,则负载均衡器应在 Public 子网中启动,该子网应附加互联网网关。

负载均衡器可以处理通过互联网网关的流量并重定向到 EC2 实例的私有 IP。只有注册的 EC2 实例才能接收来自负载均衡器的流量。

你的情况:

  1. 根据最佳实践,您必须在私有子网而不是 Public 子网中启动数据库。 Web 层和数据库层都可以在同一个 VPC 中。如果您有不同的环境,如开发、测试和生产——都应该在不同的 VPC 中启动。您可以使用 VPC Peering 连接 VPC。
  2. 与其在 Public 子网中启动 EC2 实例,不如在私有子网中启动。因为,您将使用负载均衡器将网络流量重定向到 EC2 实例。

您的架构不是高可用。最佳做法是跨多个可用区 (AZ) 复制服务,以防一个可用区出现故障(实际上,如果数据中心发生故障)。

此外,通常最好将应用程序的所有相关服务保留在同一个 VPC 中,除非您有特殊原因将它们分开。

此外,通过将您的应用程序放在私有子网中可以提高安全性,只有您的负载均衡器位于 public 个子网中

因此,推荐的架构是:

  • 一个VPC
  • public 子网在 AZ-a
  • public 子网在 AZ-b
  • 连接到两个 public 子网的负载均衡器
  • AZ-a
  • 中的私有子网
  • AZ-b
  • 中的私有子网
  • 您的 Web 应用程序 运行 同时在两个私有子网中运行(假设它可以 运行 在多个 Amazon EC2 实例上)
  • 您的数据库 运行 位于一个私有子网中,能够 fail-over 到另一个私有子网。 Amazon RDS 可以使用 Multi-AZ 选项自动执行此操作(需要支付额外费用)。

要了解有关构建高度可扩展解决方案的更多信息,我推荐 ARC201: Scaling Up to Your First 10 Million Users session from the AWS re:Invent conference in 2016 (YouTube, SlideShare, Podcast)。