我有一个安装了 Web 服务器的 EC2 实例,其中托管了几个带有数据库的动态网站。我设置了一个自动扩展组,在 CPU 负载较高时启动新实例。
我感到困惑的是,当自动扩展启动新实例时,它是完全空的,没有安装 Web 服务器,也没有来自我的网站的数据。因此,当用户被路由到这个新实例时,他将无法看到我的网站。我认为它应该克隆新实例的文件系统,以便自动扩展组启动的所有实例都可以访问相同的数据。
因此,我假设我应该以某种方式克隆我的实例,以便将其用于自动扩展和负载平衡。那么我该怎么做呢?我是否应该从正在运行的实例中创建 AMI 并将其用于启动配置,并且它是否包含我的网站数据?或者我应该使用像 CodeDeployment 这样的工具,是否可以部署多个应用程序(我的所有网站),这会如何影响实例启动时间?
答案1
从您配置的网站(EC2 实例)创建 AMI。在您的启动配置中使用此 AMI。这是使用 Auto Scaling 组启动新实例(或替换实例)的最简单方法。
您也可以在启动时配置服务器,但您需要考虑安装软件、配置所有内容以及等待软件上线需要多长时间。对于简单的网站,这可能非常快,但对于带有数据库等的复杂网站,这可能太长了。
当 ASG 确定需要另一个实例时,您希望该实例尽快上线。预配置的 AMI 是一个好的(或最佳的)解决方案。
[根据 Tim 的评论进行编辑]
预配置的 AMI 基本上要求自动扩展的 EC2 实例是“无状态的”或在启动时下载其状态(想想 EC2 用户数据脚本)。数据库通常是有状态的,因此应该将它们移出 ASG。RDS 是一种很好的数据库托管服务。最终设计需要考虑系统提供的所有组件和服务。