Amazon EC2 AutoScaling WordPress

Amazon EC2 AutoScaling WordPress

我目前正在寻找在 Amazon EC2 上自动扩展我的 wordpress 安装的方法。一切正常,我可以捆绑我的 EBS 实例,制定一些策略,然后如果需要,Amazon 会自动在我的负载均衡器后面运行实例。

但是如果我在 wordpress 上有一个插件,它不会在每个实例上安装。我希望当我安装插件时它也会自动安装在其他服务器上。

我能为你做些什么?你有什么想法吗?

答案1

你的问题有两个方面:

  1. 如何保持数据/文件在多个实例之间同步
  2. 如何启动遵循相同“规则”的新节点。

同步:

安装 Wordpress 插件会更改文件和数据库。因此,要在所有服务器上模拟更改,您需要修改每个实例的文件和数据库。具体实施将取决于您的所有实例是否相同(即所有实例都运行 Web 服务器和数据库服务器)或者您是否在不同的实例上运行 Web 服务器和数据库服务器。

在您的 Web 服务器上运行一个实例(然后自动缩放该实例),并在您的数据库服务器上运行另一个实例(例如http://www.mysqlperformanceblog.com/2006/10/16/should-mysql-and-web-server-share-the-same-box/)。当然,一旦你自动扩展数据库,你就会遇到在所有实例中保持数据一致性的问题。

同步文件: 同步数据最简单的解决方案是使用 rsync。您可以让它定期运行(通过 cron),也可以使用 incron 触发它,这将允许它在目录内容发生变化时运行。另一个选项是 lsyncd,它使用 inotify 来监视目录的更改并触发 rsync。

另一种文件同步方法是使用网络/分布式/集群文件系统。例如,您可以使用 Gluster 进行复制(多份)和/或分布式(分散)。

您可能还希望在节点之间共享 PHP 会话。

同步数据库: 可以说,保持文件同步是比较容易的部分。保持数据库同步则更具挑战性。当使用不同数量的节点时,难度会增加。

  • 最简单的解决方案就是将数据库放在单独的实例上。
  • 复制是常见的解决方案 - 但当您不确定哪个实例将被终止时,维护主节点是一个问题。如果您使用配置框架,您可能更容易控制这一点。使用诸如“pacemaker”(来自 Linux-HA)之类的东西也可能有助于解决这个问题。或者只是将主节点排除在自动缩放组之外(但这会使它成为单点故障)。
  • MySQL 集群有一些前景,但我不知道 WordPress 是否可以在 NDBCluster 上运行(它也需要一个管理节点)。
  • 有人声称 MySQL 可以在共享文件系统(特别是 Gluster)上运行 - 它可能可行,但我对它并不太有信心。

我建议使用单独的 MySQL 实例和基于 rsync 的脚本之一(可能是 lsyncd)来保持文件同步。自动扩展您的 Web 服务器,可能要过一段时间您才需要担心数据库服务器。如果您自动扩展数据库,请将主节点置于组之外,然后扩展从属节点。

部署:

在这方面,您可能希望每个节点略有不同(例如一个是主节点,一个是从节点,等等)。框架(如 voretaq7 的回答中所述)将是这里的出路。在许多方面,您的实现越好,您对自动缩放的需求就越少。一个设置可能包括 Corosync 和 Pacemaker 来监视每个节点的状态及其上运行的服务 - 选择主节点,然后运行脚本以根据需要扩展您的集群。

答案2

调查部署和配置管理框架(木偶厨师radmind)。
管理您的后端实例,使它们相同,并让弹性负载均衡器确定哪个客户端去哪里。

相关内容