Amazon autoscale 配置教程
什么是 Auto Scaling?
Auto Scaling 可帮助确保您拥有适量的 Amazon EC2 实例来处理您的应用程序负载。您可创建 EC2 实例的集合,称为 Auto Scaling 组 。您可以指定每个 Auto Scaling 组中最少的实例数量,Auto Scaling 会确保您的组中的实例永远不会低于这个数量。您可以指定每个 Auto Scaling 组中最大的实例数量,Auto Scaling 会确保您的组中的实例永远不会高于这个数量。如果您在创建组的时候或在创建组之后的任何时候指定了所需容量,Auto Scaling 会确保您的组一直具有此数量的实例。如果您指定了扩展策略,则 Auto Scaling 可以在您的应用程序的需求增加或降低时启动或终止实例。
例如,以下 Auto Scaling 组的最小容量为 1 个实例,所需容量为 2 个实例,最大容量为和 4 个实例。您制定的扩展策略是按照您指定的条件,在最大最小实例数范围内调整实例的数量。
有关 Auto Scaling 优点的更多信息,请参阅 Auto Scaling 的优势。
Auto Scaling 组件
下表描述 Auto Scaling 的关键组件。
组 您的 EC2 实例整理到组 中,从而当作一个逻辑单位进行扩展和管理。当您创建一个组时,您可以指定其中 EC2 实例的最小数量、最大数量以及所需数量。有关更多信息,请参阅 Auto Scaling 组。 |
|
启动配置 组使用启动配置 作为其 EC2 实例的模板。创建启动配置时,您可以为实例指定诸如 AMI ID、实例类型、密钥对、安全组和块储存设备映射等信息。关于更多信息,请参阅 启动配置。 |
|
扩展计划 扩展计划 告知 Auto Scaling 进行扩展的时间和方式。例如,您可以根据指定条件的发生(动态扩展)或根据时间表来制定扩展计划。有关更多信息,请参阅扩展计划。 |
入门
如果您刚刚接触 Auto Scaling,建议您在开始工作之前查看 Auto Scaling 生命周期。
若要开始使用,请学完Getting Started With Auto Scaling教程,以创建一个 Auto Scaling 组并了解它在该组中的实例终止时如何进行响应。如果您已有 EC2 实例正在运行,则可用一个现有 EC2 实例创建 Auto Scaling 组,并可随时从该组中删除实例。
访问 Auto Scaling
AWS 提供基于 Web 的用户界面,即 AWS 管理控制台。如果您已注册 AWS 账户,则可通过登录 AWS 管理控制台访问 Auto Scaling。首先,从控制台主页选择 EC2,然后从导航窗格选择 Launch Configurations。
如果倾向于使用命令行界面,您可使用以下选项:
- AWS 命令行界面 (CLI)
- 提供大量 AWS 产品的相关命令,同时被 Windows、Mac 和 Linux 支持。要了解其用法,请参阅 AWS Command Line Interface 用户指南。有关 Auto Scaling 命令的更多信息,请参阅 AWS Command Line Interface Reference中的 autoscaling。
- 适用于 Windows PowerShell 的 AWS 工具
- 为在 PowerShell 环境中编写脚本的用户提供大量 AWS 产品的相关命令。要开始使用,请参阅 适用于 Windows PowerShell 的 AWS 工具 用户指南。有关 Auto Scaling 的 Cmdlet 的更多信息,请参阅 适用于 Windows PowerShell 的 AWS 工具 Reference。
Auto Scaling 提供 Query API。这些请求属于 HTTP 或 HTTPS 请求,需要使用 HTTP 动词 GET 或 POST 以及一个名为 Action
的查询参数。有关 Auto Scaling 的 API 操作的更多信息,请参阅 Auto Scaling API 参考 中的 Actions 。
如果您倾向于使用特定语言的 API 而非通过 HTTP 或 HTTPS 提交请求来构建应用程序,AWS 为软件开发人员提供了库文件、示例代码、教程和其他资源。这些库文件提供可自动执行任务的基本功能,例如以加密方式对请求签名、重试请求和处理错误响应,因此您可以更轻松地上手。有关更多信息,请参阅 AWS SDKs and Tools。
有关用于访问 AWS 的证书的信息,请参阅 Amazon Web Services 一般参考 中的 AWS Security Credentials。
Auto Scaling 定价
Auto Scaling 不产生额外费用,因此可方便地试用它并了解它如何使您的 AWS 架构获益。
PCI DSS 合规性
Auto Scaling 支持由商家或服务提供商处理、存储和传输信用卡数据,而且已经验证符合支付卡行业 (PCI) 数据安全标准 (DSS)。有关 PCI DSS 的更多信息,包括如何请求 AWS PCI Compliance Package 的副本,请参阅 PCI DSS 第 1 级。
相关服务
使用 Elastic Load Balancing 在 Auto Scaling 组的多个实例之间自动分配应用程序的传入流量。有关更多信息,请参阅 Elastic Load Balancing 用户指南。
要监控您的实例和 Amazon EBS 卷的基本统计数据,可使用 Amazon CloudWatch。有关更多信息,请参阅 Amazon CloudWatch 用户指南。
要监控对您的账户的 Auto Scaling API 的调用(包括由 AWS 管理控制台、命令行工具和其他服务进行的调用),请使用 AWS CloudTrail。有关更多信息,请参阅 AWS CloudTrail User Guide。
Auto Scaling 的优势
向应用程序架构添加 Auto Scaling 是最大程度利用 AWS 云的一种方式。当您使用 Auto Scaling 时,您的应用程序将获得以下优势:
- 提高容错能力。Auto Scaling 可以检测到实例何时运行状况不佳并终止实例,然后启动新实例以替换它。您还可以配置 Auto Scaling 以使用多个可用区。如果一个可用区变得不可用,则 Auto Scaling 可以在另一个可用区中启动实例以进行弥补。
- 提高可用性。Auto Scaling 组可帮助确保应用程序始终拥有合适的容量以满足当前流量需求。
- 加强成本管理。Auto Scaling 可以按需要动态地增加或降低容量。您只需为使用的 EC2 实例付费,在实际需要的时候启动实例,在不需要的时候终止实例,从而节约成本。
示例:覆盖可变需求
为了更好地演示 Auto Scaling 的一些优势,请设想有一个在 AWS 上运行的基本 Web 应用程序。此应用程序允许员工搜索可用于开会的会议室。每周开始和结束时段,此应用程序的使用率最低。每周中期,有更多的员工安排会议,因此对此应用程序的需求会显著提高。
下图显示此应用程序的容量在一周中的使用情况。
按照传统做法,可通过两种方式为这些容量变化做好规划。第一种选择是添加足够多的服务器,以便应用程序始终具有足够的容量来满足需求。但是,这种做法的缺点是应用程序在某些天并不需要这么多容量。额外容量闲置不用,并且实际上提高了使应用程序保持运行的成本。
第二种选择是采用处理应用程序平均需求所需的容量。这种做法成本更低,因为不用购买仅仅偶尔使用的设备。然而,这样做的风险是:当对应用程序的需求超过其容量时,可能造成糟糕的客户体验。
通过向此应用程序添加 Auto Scaling,您就有了第三种选择。您可以仅在需要时才向应用程序添加新实例,并在不再需要这些实例时终止它们。由于 Auto Scaling 使用 EC2 实例,因此您只需在使用时为使用的实例付费。您现在有了一个具有成本效益的架构,可在尽量减少支出的同时提供最佳客户体验。
示例:Web 应用程序架构
在常见的 Web 应用程序场景中,您同时运行应用程序的多个副本来满足客户流量。将在相同的 EC2 实例(云服务器)上托管应用程序的多个副本,每个实例都可以处理客户请求。
Auto Scaling 代表您管理 EC2 实例的启动和终止。您定义一组条件(如 Amazon CloudWatch 警报),用于确定 Auto Scaling 组何时启动或终止 EC2 实例。向网络架构添加 Auto Scaling 组可帮助提高应用程序的可用性和容错能力。
您可以根据需要创建任意数量的 Auto Scaling 组。例如,您可以为每个层创建一个 Auto Scaling 组。
要在您的 Auto Scaling 组的各实例之间分配流量,可在您的架构中引入一个负载均衡器。有关更多信息,请参阅 将负载均衡器与 Auto Scaling 组结合使用。
示例:在可用区之间分配实例
AWS 资源,如 EC2 实例,置于高度可用的数据中心之内。为了提供额外的扩展性和可靠性,这些数据中心位于不同的物理位置。地区是指大型、分布范围广泛的地理位置。每个区域含有多个不同的位置,被称为可用区,是设计用于隔离其他可用区内故障的位置,可向相同区域中的其他可用区提供低成本、低延迟的网络连接。有关更多信息,请参阅 Amazon Web Services 一般参考 中的区域和终端节点:Auto Scaling。
通过使 Auto Scaling 组跨越区域中的多个可用区,Auto Scaling 使您可以利用地理冗余的安全性和可靠性。当一个可用区运行状况不佳或无法使用时,Auto Scaling 将在不受影响的可用区中启动新实例。当运行状况不佳的可用区恢复运行状况时,Auto Scaling 会自动在所有指定的可用区中重新均匀分配应用程序实例。
Auto Scaling 组可以包含来自同一区域的一个或多个可用区的 EC2 实例。但是,Auto Scaling 组不能跨多个区域。
对于 VPC 中的 Auto Scaling 组,在子网中启动 EC2 实例。在您创建或更新 Auto Scaling 组时,要为您的 EC2 实例选择子网。您可为每个可用区选择一个或多个子网。有关更多信息,请参阅 在 VPC 中启动 Auto Scaling 实例。
实例分配
Auto Scaling 尝试在为您的 Auto Scaling 组启用的可用区之间均匀分配实例。Auto Scaling 通过尝试在实例最少的可用区中启动新实例来执行此操作。但是,如果尝试失败,Auto Scaling 将尝试在另一可用区中启动实例,直到成功。对于 VPC 中的 Auto Scaling 组,如果可用区内有多个子网,Auto Scaling 将从可用区中随机选择一个子网。
再平衡活动
在某些操作发生后,您的 Auto Scaling 组可能会在不同可用区之间变得不平衡。Auto Scaling 将通过重新平衡可用区来进行补偿。以下操作可能导致重新平衡活动:
- 更改组的可用区。
- 您明确地终止或断开实例,组变得不平衡。
- 之前没有足够容量的可用区已恢复,并提供了额外容量。
- 之前竞价市场价格超出您的竞价出价的可用区现在的市场价格低于您的出价。
再平衡时,Auto Scaling 在终止旧实例之前启动新实例,所以再平衡不会损害应用程序的性能或可用性。
因为 Auto Scaling 尝试在终止旧实例之前启动新实例,所以达到或接近指定的最大容量可能会阻碍或完全停止再平衡活动。为避免此问题,在再平衡活动期间,系统可以暂时超出某组的指定最大容量的 10%(或超出 1 个实例,以较大者为准)。仅当该组达到或接近最大容量,并需要重新平衡时,才可超出容量限制;此类情况的原因是用户请求重新分区,或者是为了弥补区域可用性问题。该超出状态仅持续重新平衡该组所需的时间(通常为几分钟)。
Auto Scaling 生命周期
Auto Scaling 组中的 EC2 实例具有的路径或生命周期不同于其他 EC2 实例中的路径或生命周期。生命周期从 Auto Scaling 组启动实例并将其投入使用时开始。生命周期在您终止实例或 Auto Scaling 组禁用实例并将其终止时结束。
注意
一旦启动实例,您就需要为实例付费,包括尚未将实例投入使用的时间。
下图阐释了 Auto Scaling 生命周期内的实例状态之间的过渡。
扩大
以下扩大事件指示 Auto Scaling 组启动 EC2 实例并将其附加到组:
在发生扩大事件时,Auto Scaling 组将使用分配的启动配置来启动所需数目的 EC2 实例。这些实例最初处于 Pending
状态。如果您向 Auto Scaling 组添加生命周期挂钩,则可在此处执行自定义操作。有关更多信息,请参阅 生命周期挂钩。
在每个实例完全配置并通过 Amazon EC2 运行状况检查后,该实例将附加到 Auto Scaling 组并进入 InService
状态。针对 Auto Scaling 组的所需容量对实例进行计数。
已投入使用的实例
实例将保持 InService
状态,直至出现下列情况之一:
- 发生缩小事件,并且 Auto Scaling 选择终止此实例来减小 Auto Scaling 组的大小。有关更多信息,请参阅 控制 Auto Scaling 在缩小过程中终止哪些实例。
- 将实例置于
Standby
状态。有关更多信息,请参阅 进入和退出备用状态。 - 您从 Auto Scaling 组分离实例。有关更多信息,请参阅 分离实例。
- 实例未通过所需数目的运行状况检查,因此将从 Auto Scaling 组中删除实例、终止实例和替换实例。有关更多信息,请参阅 Auto Scaling 实例的运行状况检查。
缩小
重要的是,您要为您创建的每个扩展事件创建一个相应的缩小事件。这有助于确保分配给您的应用程序的资源与对这些资源的需求尽可能相符。
以下缩小事件指示 Auto Scaling 组从组中分离 EC2 实例并将其终止:
- 手动减小组的大小。
- 您创建一个扩展策略,自动根据指定的所需减少量来减小组的大小。
- 您可以通过安排在某个特定时间减小组的大小来设置扩展。
发生缩小事件时,Auto Scaling 组分离一个或多个实例。Auto Scaling 组使用其终止策略来确定要终止的实例。正在从 Auto Scaling 组中分离和关闭的实例将进入 Terminating
状态,且无法重新将其投入使用。如果您向 Auto Scaling 组添加生命周期挂钩,则可在此处执行自定义操作。最后,实例将完全终止并进入 Terminated
状态。
附加实例
您可以将符合特定条件的正在运行的 EC2 实例附加到您的 Auto Scaling 组。在附加实例后,将该实例作为 Auto Scaling 组的一部分进行管理。
有关更多信息,请参阅 将 EC2 实例附加到 Auto Scaling 组。
分离实例
您可以从 Auto Scaling 组中分离实例。分离实例后,您可以独立于 Auto Scaling 组管理实例或者将实例附加到其他 Auto Scaling 组。
有关更多信息,请参阅 从 Auto Scaling 组中分离 EC2 实例。
生命周期挂钩
您可以将生命周期挂钩添加到 Auto Scaling 组,以便在实例启动或终止时执行自定义操作。
当 Auto Scaling 响应扩大事件时,它将启动一个或多个实例。这些实例最初处于 Pending
状态。如果您已将一个 autoscaling:EC2_INSTANCE_LAUNCHING
生命周期挂钩添加到您的 Auto Scaling 组,则实例将从 Pending
状态转换为 Pending:Wait
状态。完成生命周期操作后,实例将进入 Pending:Proceed
状态。在完全配置实例后,实例将附加到 Auto Scaling 组并进入 InService
状态。
当 Auto Scaling 响应缩小事件时,它将终止一个或多个实例。这些实例将从 Auto Scaling 组中分离并进入 Terminating
状态。如果您已将一个 autoscaling:EC2_INSTANCE_TERMINATING
生命周期挂钩添加到您的 Auto Scaling 组,则实例将从 Terminating
状态转换为 Terminating:Wait
状态。完成生命周期操作后,实例将进入 Terminating:Proceed
状态。在完全终止实例后,实例将进入 Terminated
状态。
有关更多信息,请参阅 Auto Scaling 生命周期挂钩。
进入和退出备用状态
可以将任何处于 InService
状态的实例置于 Standby
状态。这使您能够终止对实例的使用,排查实例的问题或对实例进行更改,然后重新将实例投入使用。
处于 Standby
状态的实例继续由 Auto Scaling 组管理。但是,在将这些实例重新投入使用前,它们不是您的应用程序的有效部分。
有关更多信息,请参阅 临时从 Auto Scaling 组中删除实例。
Auto Scaling 限制
要查看 Auto Scaling 资源的当前限制,请使用 Amazon EC2 控制台的 Limits 页或使用 describe-account-limits (AWS CLI) 命令。要请求增大限制,请使用 Auto Scaling 限制表。
下表列出与您的 Auto Scaling 资源相关的默认限制。
资源 | 默认限制 |
---|---|
每个区域的启动配置 | 100 |
每个区域的 Auto Scaling 组 | 20 |
每个 Auto Scaling 组的扩展策略 | 50 |
每个 Auto Scaling 组的计划操作 | 125 |
每个 Auto Scaling 组的生命周期挂钩 | 50 |
每个 Auto Scaling 组的 SNS 主题 | 10 |
每个 Auto Scaling 组的 Classic 负载均衡器 | 50* |
每个 Auto Scaling 组的目标组 | 50* |
每个扩展策略的步进调整 | 20 |
* 请注意,您一次最多可以附加或分离 10 个项。
有关其他服务的限制的信息,请参阅 Amazon Web Services 一般参考 中的 AWS 服务限制。