我为云应用分配了 2 个 EIP,用于循环 DNS。我希望为与这些 EIP 关联的 2 个网关(代理)提供某种高可用性模式,因此我考虑在 3 个 AWS 可用区中分别设置一个网关,并在网关前面放置 2 个 NLB:EIP 1 连接到 NLB 1,后者在网关 A 和网关 C 之间循环;EIP 2 连接到 NLB 2,后者在网关 B 和网关 C 之间循环。
根据文档(参见 NLB 部分):
网络负载均衡器自动为每个可用区域向负载均衡器提供一个静态 IP,同时还支持为每个可用区域向负载均衡器分配一个弹性 IP。
由此,我了解到 NLB 只能将 EIP 与可用区域关联,这让我认为我无法将其用于我的设置。这是正确的吗?
假设我想要 3 个网关实例(一个是冗余的)并且希望每个实例都位于单独的可用区域,那么我有什么替代方案?
答案1
事实证明,NLB 可以在这种情况下使用,因为它们现在支持跨区域负载均衡。
NLB 提供内置高可用性而且它们被设计为在整个可用区受到影响时也不会宕机,因此我决定使用单个实例就足够了。由于 EIP 只能与单个可用区相关联,因此我最终采用了以下设置:
- 分配了 2 个公共 EIP,用于循环 DNS
- 设置一个 NLB,将 EIP_1 与 AZ_a 关联,将 EIP2 与 AZ_b 关联
- 4 个网关实例,其中 2 个部署在 AZ_a,2 个部署在 AZ_b,并与 NLB 的目标组关联
此设置可确保每个实例在正常情况下承担 25% 的流量,并且通过在 NLB 上启用跨区域负载平衡,我们可以容忍一个可用区发生故障,因为 NLB 只会将所有流量转发到另一个健康可用区中的其余两个网关。请注意,启用跨区域负载平衡时可能会收取区域数据传输费用。请参阅文档了解详情。