我对Amazazon Web Services提供的弹性IP服务的使用感到有些困惑 . 我想主要的想法是,我可以按照这个简单的过程切换到新版本的Web应用程序,无需停机:
-
在新的EC2实例上部署新版本
-
正确配置新版本并使用暂存数据库对其进行测试
-
经过适当测试,使这个新版本使用实时数据库
-
将弹性IP与此实例相关联
-
终止所有无用的服务(登台DB和旧的EC2实例)
这是部署新版Web应用程序的常用方法吗?
现在,如果应用程序在更多实例上扩展,该怎么办?我在Elastic Beanstalk设置中配置了自动缩放,这创建了一个负载均衡器(我可以在AWS管理控制台的EC2部分看到) . 问题是我显然无法将弹性IP与负载均衡器相关联,我必须将其与现有实例相关联 . 我应该将它与哪个实例相关联?我糊涂了...
对不起,如果有些问题可能听起来很愚蠢,但我只是程序员,这是我第一次 Build Cloud 系统 .
谢谢!
3 回答
Elastic Load Balancing (ELB)不适用于Amazon EC2 Elastic IP addresses,实际上这两个概念根本不合用 .
弹性负载 balancer 弹性
相反,ELB通常通过CNAME records使用(但见下文),如果需要,它通过允许别名DNS地址更改正在使用的ELB的IP来提供第一级弹性/可用性 . 当您在已注册的EC2实例之间分配流量时,负载均衡器会执行第二级弹性/可用性 .
可以这样想:CNAME永远不会改变(就像弹性IP地址一样)并且EC2实例的替换是通过负载均衡器,Auto Scaling或您自己(通过注册/取消注册实例)来处理的 .
Shlomo Swidler的优秀分析The “Elastic” in “Elastic Load Balancing”: ELB Elasticity and How to Test it更详细地解释了这一点,该分析又反映了AWS最近提供的Best Practices in Evaluating Elastic Load Balancing,它确认了他的分析并提供了关于Elastic Load Balancing服务的体系结构及其工作原理的良好总体读数 . (但缺少Shlomo提供的说明性逐步样品) .
域名
请注意,前一个需要CNAME的限制同时通过Amazon Route 53的相应添加来解决,以允许使用根域(或区域Apex),请参阅Moving Ahead With Amazon Route 53中的别名和区域Apex以获取快速概述,有关详细信息,请参阅Using Domain Names with Elastic Load Balancing .
Elastic Beanstalk的弹性
首先,如上所述,AWS Elastic Beanstalk依次使用Elastic Load Balancing . 如果是这样,它增加了应用程序生命周期管理:
这是通过在混合中添加环境概念来实现的,这在_2628202中有解释:
请注意,每个环境都有一个指向负载均衡器的CNAME(URL),就像使用ELB一样 .
所有这些都汇集在Managing and Configuring Applications and Environments中,它详细讨论了AWS Elastic Beanstalk的一些最重要的功能,包括使用AWS管理控制台,CLI和API的使用示例 .
零停机时间
很难确定最相关的部分用于说明目的,但是Deploying Versions With Zero Downtime精确地解决了您的使用案例并且暗示了所有必需的前面步骤(例如Creating New Application Versions和Launching New Environments),因此阅读部分AWS管理控制台可能会为您提供此平台工作原理的最佳总体情况 .
祝好运!
除了Steffen的精彩答案中描述的选项之外,如果您不需要Elastic Load的全部功能,Elastic Beanstalk似乎最近也可以选择 enabled Elastic IP . balancer 器(如自动缩放超过一个实例) .
我在my answer to a similar question中描述了该选项 . Elastic Beanstalk现在允许您在两个Environment Types之间进行选择,而单实例选项可以创建弹性IP .
我认为在大多数情况下使用ELB将是更好的选择,但是对于一个临时服务器,有一个不太复杂(和更便宜)的替代品是很好的 .
几年之后回答帖子的道歉,但对于那些确实需要ELB上的一组静态IP地址的人,可以很好地向AWS请求将他们称之为“稳定IP”的地址添加到ELB,从而给它静态IP地址功能 .
他们当然不喜欢这样做 - 但是如果你可以证明这一点(主要的理由是你的客户端通过防火墙对出站连接有IP白名单限制,而且完全不愿意采取这种立场) .
请注意,基于流量选项的“自动缩放”不再是直接的 - AWS无法动态地向ELB添加更多的ELB endpoints ,因为它们使用开箱即用的解决方案,您必须经历随着时间的推移,与您的客户一起开辟新IP地址的痛苦 .
但是对于原始问题,EB使用ELB来实现EC2实例,其中实际上不需要静态IP地址(没有客户端出站防火墙问题)是根据接受的答案的最佳方式 .