如何在 AWS EC2 实例上横向扩展 Tomcat?

How to scale out Tomcat on AWS EC2 instance?

有很多关于自动缩放的问题。但其中 none 讨论了扩展安装在这些服务器上的软件堆栈。 AWS Auto Scaling 仅扩展资源。不是它上面的软件。就我而言,我期待扩展安装在第一个实例上的 Tomcat 服务器(和 Apache HTTPD 服务器),使其成为 AWS Scaling Service 创建的新实例的一部分。

我按照常规流程在 Amazon Web Services EC2 实例上为我的应用程序建立扩展。

  1. 使用 运行 实例的确切配置从现有实例创建快照 - 成功
  2. 从上面的快照创建了一个 AMI - 成功
  3. 已创建 Auto Scaling 组并启动配置 - 成功
  4. 扩展策略是在 CPU >= 65% 时创建一个新实例 2 次。 - 成功

上述过程仅创建一个新实例,但不会复制映像中存在的软件堆栈。

如何实现自动缩放,以便在发生 AWS 自动缩放时,AMI 的 Tomcat 服务器部分也被复制并在新的扩展实例中启动。

我一定要使用 Puppet/Chef 或任何此类工具来实现吗?或者 AWS 中是否有使用命令行的选项?

请注意,Elastic Load Balancer 会根据启动配置自动将新实例添加到其中,但它显示 'Out of Service',因为新扩展实例上没有安装 Apache 服务器。

您直接从 EC2 实例而不是快照创建 AMI。快照用于 EBS 卷。检查您是否从安装了 Apache/Tomcat 和 运行 的 运行 EC2 实例正确创建了 AMI(并配置为在重启时自动启动)。

不,您不必使用 Puppet/Chef 或任何其他 CM 工具。您可以通过几种方式做您想做的事:

  1. 最简单的方法是从您的 运行 创建一个 AMI EC2 实例,然后配置您的 Auto Scaling 组以启动 基于某些指标的来自该 AMI 的新实例。
  2. 使用没有 Apache/Tomcat 或您的软件的基础 AMI,然后在启动时 bootstrap 新实例下载和配置所需的一切。

#1 的缺点是您的 AMI 会很快过时。 #2 的缺点是您的实例需要更长的时间才能投入使用。我会推荐 #1 和 #2 的组合,特别是您每隔几个月捕获一个新的 AMI,它成为您启动的基础 AMI,并在启动时通过用户数据初始化脚本更新实例。