首页 > 解决方案 > 如何自动扩展 Java War 部署设置

问题描述

我在AWS EC2 Ubuntu Linux 机器上有一个Java Tomcat War部署设置。这个服务器基于一些 API 和一些计算。现在,它消耗了 15% 到 20% 的服务器 CPU 利用率。有时,它会上升到 80%(极少数情况)。如何动态自动缩放不同 AZ 上的多个设置?

我有亚洲孟买地区,它有三个可用区,我只部署在一个区中。如果负载上升,我会手动将实例添加到不同的可用区。但是我不知道如何在没有手动设置的情况下动态地执行此操作,因为 AWS 自动缩放组对无状态的事物所做的。

每条评论都将受到欢迎和赞赏。

标签: javaamazon-web-servicesrestjacksonwar

解决方案


您需要某种方式让实例在没有干预的情况下完全运行。这往往是复杂的部分,没有一个“答案”。它通常意味着以下两种情况之一:

  • 在实例启动时设置实例的 cloud-init 脚本(直接使用 bash 脚本或使用 Chef、Puppet 等配置管理工具)
  • “黄金映像”,即已完全设置并可以在启动后立即开始服务的 AMI

完成后,您可以创建一个启动配置来定义实例的外观 - 实例类型、磁盘、AMI、用户数据(云初始化脚本所在的位置)、机器角色、安全组、等等

然后创建一个自动缩放组并将 LC 附加到它。自动缩放组将创建您的实例,而不是您创建它们。如果需要,您可以将手卷实例附加到 ASG。ASG 允许您指定要在哪些子网中创建实例;为要创建实例的每个可用区至少为其提供一个子网。它将自动将创建的实例分布在 AZ 中。ASG 具有最小、最大和所需的实例计数。期望计数是在任何给定时间它应该有多少个实例;如果少于这个,它将创建更多,如果超过这个,它将根据终止策略(最旧的优先,最新的优先等)终止一些。最小值和最大值定义了期望计数的边界 - 期望永远不会小于最小值或大于最大值。

最后,您定义扩展和缩减规则以说明何时应该自动更改所需的计数。在您的情况下,这可能是在整个 ASG 的平均 CPU 使用率超过 50% 时进行横向扩展,并在其低于 25% 时进行横向扩展。

您还需要将 ASG 设置为负载均衡器的目标组,这样一旦新实例创建并运行良好,它就会占用流量 - 否则,创建它的意义何在?确保您进行了准确的运行状况检查,以便无法为流量提供服务的实例不会收到流量。


推荐阅读