将静态私有 IP 地址设置为使用 AWS Elastic Load Balancer 注册的 AWS EC2 实例

Set static private IP addresses to AWS EC2 Instances registered with an AWS Elastic Load Balancer

我正在尝试将静态私有 IP 地址设置为使用 AWS 弹性负载均衡器注册的 AWS EC2 实例。

到目前为止,我遇到的最流行的方法是使用 Auto Scaling 组。 this 论坛讨论中详细阐述了这种方法。

后来,我遇到了 AWS Auto Recovery for Amazon EC2 Instances 功能,它简化了与上述论坛讨论(自动扩展方法)中讨论的 AWS 弹性网络接口附件相关的大部分工作。

但是对我来说,基于自动恢复的方法的一个不清楚的部分(这将是一个问题)是它在故障期间成功地动态注册恢复的 EC2 实例,以及它们已注册的任何负载平衡器。没有找到关于如何使用自动恢复的实例以及如何与负载均衡器一起工作的信息。 This 自动恢复功能简介定义了自动恢复功能的以下优点:

  • The running instance is automatically transferred to the new underlying hardware.
  • There is no need of migration to a new EC2 instance.
  • The instance-id does not get changed.
  • The IP address, if it is an Elastic IP address remain same.
  • The instance metadata and the private IP addresses also remain same.

以上好处给我的印象是,自动恢复的实例可以成功地与它们在故障和恢复期间附加到的任何负载均衡器一起工作(主要是由于恒定的实例 ID)。

但是我的问题如下:

  1. EC2 实例的自动恢复功能能否成功地与它们连接的任何负载均衡器一起工作(就故障和恢复期间成功的实例注册和注销而言)?
  2. 为注册到 AWS 弹性负载均衡器的 AWS EC2 实例设置静态私有 IP 地址的最佳方法是什么?

首先,您不能为弹性负载均衡器(内部或外部)分配私有 IP,因为它由 AWS 管理。您分享的 forum 是为 ENI 分配固定私有 IP 地址,并在 EC2 启动时通过向 UserData 部分添加 CLI 命令来分配它。

  1. 如果您可以使用固定私有 IP 保留额外的 ENI,这种方法应该适用于自动恢复。这是为了处理意外情况,如果多个 EC2 实例在启动时失败,则由于 ENI 不可用而无法启动新实例。此外,您还需要编写额外的 CLI 命令以在故障转移时为新实例关联可用的 ENI。

  2. 为自动缩放实例保留静态私有 IP 不是常见做法,因此以上是一种解决方法。自动缩放的全部目的是在任何给定的时间点,任何实例都可能失败并恢复,或者可以创建新实例来处理额外的负载,从而消除了其他组件直接调用实例(而不是通过 ELB)的需要。

Does auto recovery feature of EC2 instances successfully work with any load balancers they are attached to (in terms of successful instance registration and deregistration during failure and recovery)?

是的,它有效,因为没有 registration/deregistration 发生。该实例保持注册状态。实例自动恢复的要点是 EC2 中没有其他组件意识到该实例已被替换。实例恢复后,关于实例的一切都保持原样——实例 ID、私有 IP 地址、EBS 和 ENI 附件。

A recovered instance is identical to the original instance, including the instance ID, private IP addresses, Elastic IP addresses, and all instance metadata.

http://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-instance-recover.html

换句话说,它在 每种 重要方式中都是完全相同的实例......只是为其提供动力的物理硬件不同。

平衡器会在实例失败时断定实例不健康,但不会意识到它已经消失并被自动恢复所取代,因此平衡器将一直继续对实例进行健康检查......并且当实例恢复后健康检查开始成功时,平衡器开始再次向实例发送流量。

Which is the best approach for setting static private IP addresses to AWS EC2 Instances registered with AWS Elastic Load Balancers?

你不需要这样做。平衡器与实例相关联,而不是 IP 地址。如果您终止一个实例并使用相同的私有 IP 创建一个新实例,none 之前将流量发送到该私有 IP 的平衡器将继续这样做,因为平衡器知道它们的预期目标——一个特定的具有特定实例 ID 的实例 -- 已消失。

当然,如果实例不在自动缩放组中,您可以对实例使用静态 IP,但就手头的问题而言,没有理由这样做.