Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/google-maps/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Amazon web services 如果弹性ip与另一个正在运行的ec2实例关联,那么在重新启动后是否可以将弹性ip与ec2实例重新关联?_Amazon Web Services_Amazon Ec2_Elastic Ip - Fatal编程技术网

Amazon web services 如果弹性ip与另一个正在运行的ec2实例关联,那么在重新启动后是否可以将弹性ip与ec2实例重新关联?

Amazon web services 如果弹性ip与另一个正在运行的ec2实例关联,那么在重新启动后是否可以将弹性ip与ec2实例重新关联?,amazon-web-services,amazon-ec2,elastic-ip,Amazon Web Services,Amazon Ec2,Elastic Ip,我们有一个设置,其中3个ec2实例各自与其主网络接口eth0上的弹性ip相关联,因此传入的请求可以由这些实例提供服务 这些实例中的每一个都有一个辅助网络接口eth1,在实例发生故障/崩溃/重新启动的情况下,与该实例关联的弹性ip将与该接口上其余运行的ec2实例之一关联。这是一种故障转移机制,因为我们总是希望那些弹性IP由某个正在运行的实例提供服务,这样我们就不会丢失任何传入的请求 我遇到的问题特别是在实例重新启动时。当一个实例重新启动时,它无法恢复它拥有的公共ip,而该公共ip是现在与另一个实例

我们有一个设置,其中3个ec2实例各自与其主网络接口eth0上的弹性ip相关联,因此传入的请求可以由这些实例提供服务

这些实例中的每一个都有一个辅助网络接口eth1,在实例发生故障/崩溃/重新启动的情况下,与该实例关联的弹性ip将与该接口上其余运行的ec2实例之一关联。这是一种故障转移机制,因为我们总是希望那些弹性IP由某个正在运行的实例提供服务,这样我们就不会丢失任何传入的请求

我遇到的问题特别是在实例重新启动时。当一个实例重新启动时,它无法恢复它拥有的公共ip,而该公共ip是现在与另一个实例关联的弹性ip的公共ip。因此,除非我手动将弹性ip重新分配给该实例,否则该实例无法访问internet

是否可以在重新启动时自动回收/重新关联它曾经拥有的弹性ip到其eth1接口上?如果没有,您是否有解决方案的建议

重新启动是必要的,因为我们将在实例上进行无人值守的升级

更新:
还请注意,我需要使用这些弹性IP,因为它们是我们与之集成的合作伙伴公司的防火墙中允许使用的IP。使用ELBs不会起作用,因为它的IP会随着时间的推移而变化。

听起来使用弹性负载平衡器(ELB)会更好。您可以只使用一个ELB,它将为您的3个应用程序服务器提供请求

如果其中一个出现故障,ELB会检测到并停止在那里路由请求。当它重新联机时,ELB会检测到这一点并再次将其添加到路由组中


我终于解决了这个问题。我错过的是,Amazon只在两种情况下为实例提供新的公共IP

  • 它的弹性IP是分离的
  • 它只有一个网络接口
因此,基于此,在启动时,我将实例配置为两个实例,但我分离了辅助eth1接口。因此,这使得实例有资格获得新的公共IP(如果出于任何原因重新启动)

现在,对于故障转移,一旦一个正在运行的实例检测到一个实例已从集群脱机(在本例中,让我们假设它已重新启动),它将动态连接辅助接口并将弹性IP与之关联。因此,弹性IP现在至少由一个正在运行的实例提供服务。效果立竿见影

现在,当失败的实例在重新启动后恢复时,amazon已经为它提供了一个新的非弹性公共IP。这是因为它满足了只有一个网络接口的两个条件,并且它的弹性IP被解除关联并重新关联到另一个正在运行的实例。因此,这个重新启动的实例现在有一个新的公共IP,可以在启动时连接到internet,并执行必要的任务来配置自身并重新加入集群。之后,它重新关联回它需要的弹性ip

此外,当接管弹性IP的正在运行的实例检测到新实例或重新启动的实例已联机时,它会再次分离辅助接口,以便在重新启动时也有资格获得新的公共IP

这就是我处理故障切换并确保始终为弹性IP提供服务的方式。然而,这个解决方案并不完美,可以改进。它可以扩展到处理N个失败/重新启动的实例,前提是N个网络接口可用于故障切换

但是,如果在故障转移期间连接辅助接口的实例重新启动,它将不会获得新的公共IP,并将保持与群集的断开连接,但至少弹性IP仍将由剩余的活动实例提供服务。这仅适用于重新启动的情况


顺便说一句,至少从我读到的所有内容来看,这些获得新公共ip的条件在amazon文档中没有明确提到。

感谢您的反馈。但我需要对这些实例使用弹性IP,因为它们是我们正在与之集成的合作伙伴公司防火墙中唯一允许的。ELBs IPs会随着时间而变化,因此不会有帮助。我将更新描述以使其更清楚。您是否已经有了用于第1部分(将非响应服务器的弹性IP重新分配给故障转移服务器eth1)的脚本?是的。该脚本使用python编写,使用boto库将非响应服务器的弹性IP重新分配给eth1上的故障转移服务器。