在现代云计算环境中,企业需要能够快速应对不断变化的业务需求,尤其是在流量波动较大的情况下。Amazon Web Services(AWS)提供的EC2自动扩展(Auto Scaling)功能,为开发者和企业提供了一种有效的解决方案。通过自动调整计算资源的规模,AWS EC2自动扩展能够根据实际负载自动增加或减少实例数量,从而优化成本并确保系统高效运行。无论是流量高峰还是低谷,自动扩展都能够确保应用的稳定性和可用性,极大提升业务连续性和灵活性。
- 根据需求,Amazon EC2 Auto Scaling 会修改您的应用程序的 EC2 实例数量。
- 创建“Auto Scaling 组”是为了控制 EC2 实例组。
- 您可以设置:
- 最小实例数:这是该组所拥有的最小数量。
- 最大实例数:这是该组所能拥有的最大实例数。
- 所需容量:该组将尝试保留此数量的实例。
- 根据需求,扩展策略可能会自动添加或删除实例。
示例:具有以下内容的 Auto Scaling 组:
- 最小规模:6 个实例
- 所需容量:8 个实例
- 最大大小:14 个实例
- 根据设定的标准,通过扩展策略来修改此范围内的实例。
AWS EC2 Auto Scaling 的特点
- 为了实现更简单的可扩展性和管理,Amazon EC2 自动可扩展性将 EC2 实例分组为 Auto Scaling 组。
- Auto Scaling 组使用启动模板或启动配置来构建实例。
主要特点
- 健康监控:使用 EC2 健康检查自动验证和维护实例健康。为了保留所需的容量,将替换发生故障或终止的实例。
- 自定义健康检查:针对某些应用要求,您可以设计自己的健康检查。当这些检查不满足时,实例将被替换。
- 均衡容量:为了提高可用性和适应性,实例均匀分布在多个可用区之间。
- 多种实例类型:支持在单个组中使用各种实例类型和购买选择(预留、按需和现货),以降低开支。
- 自动竞价型实例替换:自动替换中断的竞价型实例。如果发生中断,可通过容量重新平衡来替换竞价型实例。
- 负载平衡:通过与弹性负载平衡集成,使流量能够在健康实例之间均匀分配。随着实例的增长,它们会自动注册和注销。
- 可扩展性:您可以手动选择组大小,它会自动调整以处理不断变化的负载。
- 实例刷新:每当启动模板或 AMI 被修改时,实例都会通过滚动或金丝雀部署进行更新。
- 生命周期挂钩:当启动或终止实例时,它允许自定义操作,这对于事件驱动的架构很有帮助。
- 支持有状态工作负载:使用生命周期挂钩、扩展保护或独特的终止策略来保证有状态的应用程序持续运行。
平衡 EC2 实例
- 自动扩展重新平衡:如果 EC2 实例在可用区 (AZ) 之间分布不均匀,则自动扩展 (AS) 将自动重新平衡它们。
- 重新平衡操作:从其他可用区中删除多余的实例,并在实例较少的可用区中启动新实例。
不平衡的原因
- 可以从 Auto Scaling 中添加或删除可用区。
- EC2 实例从 ASG 手动终止。
- 实例的分布受到可用区容量增加或减少的影响。
连接 EC2 实例
附加条件
- EC2 需要可运行。
- EC2 仍必须使用相同的 AMI 启动。
- 一个实例不能包含在另一个 ASG 中。
- 实例和ASG需要在同一个AZ内。
容量检查
- 如果添加实例超出了 ASG 的最大容量,则请求失败。
分离 EC2 实例
- 手动分离:要从 ASG 中删除 EC2 实例,请使用 CLI 或 AWS 控制台。
- 分离后:分离的实例可以转移到另一个 ASG 或单独管理。
- 所需容量调整:在分离实例时,您可以选择减少 ASG 的所需容量。
- 如果没有减少,ASG 将启动一个新实例。
- 删除 ASG:当删除 ASG 时,所有 EC2 实例都将终止,并且其功能将重置为零。
- 在销毁 ASG 之前分离 EC2 实例以保存它们。
弹性负载均衡器 (ELB) 集成:
- 将 ELB 附加到 ASG:只要在同一个区域和 VPC,就可以将 ELB 添加到 ASG。
- ELB 将自动注册 ASG 中的所有 EC2 实例,无论是新的还是现有的。
EC2 健康检查
- 健康检查分类:根据 EC2 和 ELB 状态检查,EC2 实例被归类为健康或不健康。
- 健康检查设置:Auto Scaling 默认采用 EC2 状态检查。
- 可以设置为使用 ELB 和 EC2 健康检查。
- 宽限期:进行健康检查之前的宽限时间默认设置为 300 秒。
- 一旦实例投入使用,就会通过将宽限期设置为零来检查其健康状况。
- 在宽限期内,任何不健康状态都会被忽略。
- 不健康实例处理:ASG 会在宽限期后部署替换并结束不健康的实例。
- 弹性 IP 和 EBS:附加到新实例并手动与终止的实例分离。
自动扩展策略
- SNS 通知:ASG 在以下情况下发送电子邮件通知:
- 实例已启动。
- 实例已终止。
- 实例启动失败。
- 实例终止失败。
结合 ASG
- 只能使用 AWS CLI(而不是 AWS 控制台)进行合并。
- 可以通过组合多个单可用区 ASG 来创建一个多可用区 ASG。
- 扩展:启动额外的 EC2 实例。
- 缩减:终止 EC2 实例(建议为每个扩展事件生成一个缩减事件)。
- EC2 指标被发送到CloudWatch以监控 ASG 实例。
- 基本监控:每 300 秒(免费)。
- 详细监控:每 60 秒(收费,使用 AWS CLI 时默认启用)。
待机状态
- 在 ASG 中,可以手动将 EC2 实例置于待机模式。
- Auto Scaling 仍用于管理待机实例,但是
- 与正在使用的实例一样,它们也需要计费。
- 可供工作负载访问的 EC2 实例不会受到它们的影响。
- 备用实例不受健康检查。
扩展策略的类型
- 手动扩展:可以手动更改 EC2 实例的数量。
- 动态扩展:根据条件和实时警报。
- 目标跟踪:根据指标的预期值(例如修改家用恒温器)缩放组。
- 简单缩放:响应警报(有 300 秒的冷却期)一次性更改组的大小。
- 步进缩放:根据设定的步进缩放,根据警报违规的大小进行缩放调整。它支持预热计时器,但不支持冷却时间。
预测、计划和周期扩展
- 预测扩展:预测每日和每周的负载模式,并使用机器学习规划实例调整。
- 计划扩展:您可以安排特定时间和容量的扩展操作,以应对预测的负载波动。计划操作的日期和时间必须是唯一的。
- 周期扩展:它使用历史数据预测未来的扩展需求,类似于计划扩展。
关键注释
- 警报和策略由扩展策略用来决定何时扩展。
- 扩展变化不能超出 ASG 的最小或最大容量。
- 为了确保最佳的应用程序性能,需要仔细规划扩展和缩小的过程。
EC2 Auto Scaling 的常见用例
Web 应用程序
- 根据流量水平自动扩展 Web 服务器 EC2 实例,以确保应用程序无需人工协助即可管理峰值。
数据处理
- 为了在特定时间内处理大量数据集,请根据数据处理要求扩展实例。
电子商务
- 在需求旺盛的时期,例如网络星期一或黑色星期五,扩展实例以确保应用程序可以处理更多用户。
赌博
- 根据玩家活动自动扩展多人游戏后端服务器,以确保即使在繁忙时段也能顺畅进行游戏。
EC2 Auto Scaling 的最佳实践
- ELB 和 Auto Scaling 可以一起使用,在实例之间均匀划分流量。
- 为了快速识别和替换不健康的实例,请设置适当的健康检查参数。
- 当您看到流量模式时,请从少量的最小实例开始,然后逐渐扩大它们。
- 通过频繁测试确保您的扩展策略在各种流量场景下都能按预期运行。
- 利用预测性扩展来根据具有可预测流量模式的工作负载的历史数据来预见扩展操作。
总结
AWS EC2自动扩展是云计算架构中不可或缺的一部分,尤其适用于动态负载环境。通过与其他AWS服务的紧密集成,自动扩展不仅能够提高资源利用率,降低运维成本,还能提升用户体验。随着企业对高可用性和灵活性的需求不断增加,AWS EC2自动扩展无疑是实现这些目标的强大工具。