我有一个共享的 Wordpress 托管服务器,上面有大约 50 个站点,它是通过 Ansible 完全配置的。
我试图在两者之间找到一个好的界限
a) 每次添加站点或更改配置时更新 AMI,例如这会影响虚拟主机和 PHP 池文件
b) 使用自定义启动脚本运行其中一些配置更改,并在实例接收来自负载均衡器的流量之前在启动时给予更多时间
目前只有一个实例,可能暂时不需要自动伸缩来应对流量的巨大变化。相反,如果实例在数小时内失败,则需要使用 Auto Scaling 来自动替换实例。
根据我目前良好成本管理的规模,我最好在晚上运行一个 c5.large,并在白天安排 2 个 c5.large 的自动缩放,这将使我以相同的成本获得多可用区可靠性的额外好处单个 c5.xlarge
我计划使用 EFS 共享所有 Wordpress 文件,并可能使用 Redis 进行共享会话管理,但这不是这个问题的主题。
我对解决方案 a) 的担忧是,每次添加新站点、创建临时站点或需要任何其他配置更改时,我都需要创建一个新实例、进行更改、创建一个 AMI 并将 AMI 轮换到我的自动缩放中团体。即使完全自动化,我预计这需要很长时间才能达到可接受的周转速度。
相反,我可以在少数实例上进行这些更改并以编程方式更新 AMI。然后它只会被使用 - 在失败场景中或 - 当正在完成恢复测试时或 - 当在测试堆栈上测试开发时
这是管理共享主机环境的好方法吗?
嗯,可惜了。我正要建议您应该将所有配置和用户数据从实例卸载到持久的共享存储,并将实例纯粹用作无状态 Web 服务器 - 易于扩展,易于替换。从本地存储到 EFS 的转换很容易(实际上并不是重新构建系统,只是将一些目录移动到 EFS)并且可以在很少停机的情况下完成。
然后,所有 Apache / Nginx / PHP 和 Wordpress 配置文件以及上传的用户媒体文件将存储在共享文件系统上,实例将从那里进行自我配置。
无论如何,如果您立即放弃最佳和明显的解决方案,我们就会提出一些劣质的选择。我有一个 CloudFormation 模板,它可以做一些接近你想要的事情:
这适用于不经常更改的实例。例如,我们的 CMS 拥有数据库中的所有数据以及 EFS 上的所有应用程序配置和用户文件,并且实例上只有一些包和系统配置文件不时更新,但不经常更新。
可能这样的事情对你有用吗?然而,实现这一点的努力很可能比首先迁移到 EFS 更高,结果也没有那么好和弹性。
希望有帮助:)