![在没有 AWS 弹性负载均衡器的情况下,是否可以更新网站而不停机?](https://linux22.com/image/674716/%E5%9C%A8%E6%B2%A1%E6%9C%89%20AWS%20%E5%BC%B9%E6%80%A7%E8%B4%9F%E8%BD%BD%E5%9D%87%E8%A1%A1%E5%99%A8%E7%9A%84%E6%83%85%E5%86%B5%E4%B8%8B%EF%BC%8C%E6%98%AF%E5%90%A6%E5%8F%AF%E4%BB%A5%E6%9B%B4%E6%96%B0%E7%BD%91%E7%AB%99%E8%80%8C%E4%B8%8D%E5%81%9C%E6%9C%BA%EF%BC%9F.png)
我有一个 ASP.NET MVC 应用程序托管在独立的 EC2 实例上。我的 Route53 托管区域有一条 EC2 实例的弹性 IP 记录。
我没有弹性负载均衡器,而且我也不要求弹性负载均衡器。
是否可以使用以下方式将我的网站的新版本部署到 AWS停机时间极少或没有停机时间和没有必须建立并支付弹性负载均衡器的费用吗?
答案1
切换到新的应用程序部署(EC2 实例)的最简单方法可能是这样的:
- 启动/配置另一个 EC2 实例并在其上部署新版本的应用程序
- 测试新部署
- 当您准备好将 EIP 从旧 EC2 实例重新分配给新实例时
这种方法肯定会在重新分配 EIP 地址时引入一些最小停机时间。这不是实时操作。
您还可以执行经典 DNS 切换(一种蓝/绿部署)以从旧应用程序部署切换到新应用程序部署。您可以在指定的 Route53 DNS 区域中拥有两个加权资源记录(例如 CNAME),指向您的旧部署和新部署。在处理 DNS 查询时,Route53 将使用基于这些权重计算的概率选择一个答案。要执行切换,您最初将“旧”记录的权重设为 100,将“新”记录的权重设为 0。最后,您只需简单地交换这些权重即可。这种方法的唯一缺点是传播 DNS 更改可能需要一些时间,因此您无法控制用户何时会感知到它。这是因为许多客户端不遵守 DNS TTL 值,并且会缓存 DNS 数天,即使记录的 TTL 为 60 秒。
顺便说一句,有一个很好的介绍“AWS 上的蓝/绿部署”。