分配弹性IP而不损失AWS上的域可用性

时间:2019-02-12 20:58:32

标签: amazon-web-services amazon-ec2 elastic-ip

我有一个EC2的IP地址,我将域DNS设置为该IP地址,现在可以正常使用了。但是我们只是发现公共IPv4不是永久性的,我们通过简单的重启就丢失了它,因此我们需要为其分配弹性IP。但是,通过分配和弹性IP,我们将丢失EC2的公共IP,并且该域将关闭,直到我们设置域DNS并等待传播时间增加为止。

我们如何在不造成域停机的情况下管理这种情况?

3 个答案:

答案 0 :(得分:2)

复制一份EC2实例,将Elastic IP附加到该新实例,然后执行DNS切断。等待DNS传播,然后关闭旧实例。您可以监视进入您的旧实例的流量,以确保(或至少合理地确定)可以终止它。这样做,应该没有停机时间。

答案 1 :(得分:0)

DNS“传播”本质上是一个神话。会有延迟,但这不是由于任何适当的“传播”造成的。这是由于分布式缓存和TTL。这种现象很容易理解,但可能难以解释。

观察当前DNS记录上的TTL(“生存时间”)。假设它是3600,该数字以秒为单位,因此为1小时。 current 值表示下一个更改记录的时间,您可以期望它花费这么长的时间来传播。 / p>

因此,记下该值,然后将TTL更改为一个非常小的数字,例如15。在上一个 TTL随时间流逝之后,15将是您的 current < / em> TTL,全局。 (如果以前的值为3600,则更改为15后一小时,即3600秒,这时全局范围内的新有效值为15。)

一旦建立,您就可以更改A记录以指向新的IP地址,并且更改将在15秒钟内“传播”。实际上,如果您使用Route 53,则将比此时间长35秒,因为Route 53在更改变得可见之前有一小段延迟...但是此策略允许快速更改,并且-最小程度地减少了干扰。

EC2允许您在不停止计算机的情况下将交换IP热交换为弹性IP,因此您可以将该IP放入DNS中,然后将其附加到实例,即可完成操作。在几秒钟之内,您的DNS是正确的并且已“传播”。一旦适应了新环境,就可以再次将DNS TTL更改为更大的值,以提高性能并减少Route 53需要处理的查询数量。

这听起来很简单,但是仍然有一个问题。

问题在于,进行更改时打开浏览器的任何人都可能会失去对该网站的访问权限,这是因为无论配置了什么TTL,浏览器都倾向于缓存DNS查找。 DNS记录是最新的并且是最新的,但是他们的浏览器不在寻找它。浏览器可能会缓存旧值,直到关闭为止。在这方面,浏览器的行为有点通配符。

您可以暂时使用一项AWS服务来防止这种情况发生-通过将您的站点暴露在未附加到实际实例的公共IP上。您可以将DNS临时迁移到该位置。

假设它是一个网站,请将Application Load Balancer连接到实例。切换DNS指向ALB。等待直到您的Web服务器日志显示所有请求都通过ALB传入。然后将实例更改为弹性IP。由于ALB使用其私有 IP地址连接到实例,因此不会受到影响。然后,将DNS更改为EIP。再次,等待直到Web服务器日志开始显示直接进入实例的流量,并停止显示任何通过ALB的流量-ALB日志显示没有有意义的流量。 (您不能为此简单地使用ALB请求计数指标,因为所有具有公共IP的Web服务器都会从扫描Web的人那里收到一定数量的垃圾流量。)一旦没有流量通过ALB,请将其删除。

答案 2 :(得分:0)

我设法解决了该问题,并希望与您分享。根据搜索,我找到了两种解决方案。

1-添加一个负载平衡器并将EC2附加到该负载平衡器,并为该负载平衡器分配IP。因此,您可以将域DNS更改为该负载平衡器,这样就不会造成停机或传播。然后,您可以为EC2分配一个弹性IP,然后再次将DNS更改为该IP,而不进行传播。

2-您可以通过添加完全覆盖here

的子网和网络接口来完成此操作