到目前为止,我们的 NAT 服务器已经发生过 3 次故障 - 一次是由于 EIP 问题,两次是由于主机 CPU 受限。虽然我知道这些事情会发生,但我们不能承受持续的中断。我们如何为我们的 VPC 实施冗余、有弹性的 NAT 解决方案?例如,是否可以使用多个 NAT 服务器?
我的 VPC(Amazon Virtual Private Cloud)由 2 个子网组成,1 个公有子网和 1 个私有子网。私有子网中的实例通过公有子网中的 NAT 服务器进行路由。据我所知,每个 VPC 只能有 1 个 NAT 服务器。
答案1
鉴于您更新的问题,您可能正在使用配置为作为 NAT 实例运行的官方 Amazon Linux AMI('ami-vpc-nat')并根据以下设置NAT 实例?这显然不是必需的,但当然可以提供实现所需稳定性的良好基础。关于您的问题:
幸运的是,AWS 最近宣布虚拟私有云中的弹性网络接口,它允许您创建低预算高可用性解决方案(请参阅弹性网络接口请参阅用户指南了解详情):
如果您的一个实例 [...] 发生故障,其网络接口可以连接到到预先配置为相同角色的替换或热备用实例以便快速恢复服务。例如,您可以使用 ENI 作为关键服务(例如数据库实例)的主要或辅助网络接口或 NAT 实例如果实例发生故障,您(或者更可能是代表您运行的代码)可以将 ENI 附加到热备用实例。由于接口保留其私有 IP 地址、弹性 IP 地址和 MAC 地址,将 ENI 附加到替换实例后,网络流量将开始流向备用实例。 [...][重点是我的]。
因此,您应该能够使用少量的自动化代码来实现您的目标 - 这取决于您对冗余/弹性的重视程度,您有两种选择:
- 热备用 NAT 实例(最大限度地减少停机时间)
- 按需 NAT 实例替换(最小化成本)
您可以通过以下方式实现此场景自动扩展策略, 那维持您的 NAT 实例扩展级别1 通过适当的健康检查
更新:根据 sborsje 的评论,这目前无法起作用,感谢您的见解!
答案2
您的问题太模糊、太宽泛。您需要提供更多有关您的设置、其功能以及您要实现的目标的信息。
但看起来你正在寻找的是负载平衡。看一下 haproxy:http://haproxy.1wt.eu/
答案3
每个 VPC 可以有多个 NAT。您可以配置 VPC 路由表以将 0/0 路由指向 NAT 服务器的网络接口。如果该 NAT 实例出现故障,您可以将该网络接口从实例中分离出来,并将其连接到热备用 NAT 实例。这样,您的网络就可以重新启动并运行,并且流量只会出现很小的波动。
ELB 不会帮助您完成您想要做的事情。