Amazon EC2 AutoScaling WordPress

我目前正在寻找自动缩放在Amazon EC2上的wordpress安装。 一切正常,我可以绑定我的EBS实例,把一些策略,然后亚马逊自动实例运行在我的负载均衡器,如果需要的话。

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

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

你的问题有两个方面:

  1. 你如何保持多个实例的数据/文件同步
  2. 你如何提出遵循相同“规则”的新节点。

同步处理:

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

有可能有一个很好的参数来运行一个实例与您的Web服务器(然后自动调整该实例)和另一个实例与您的数据库服务器(例如http://www.mysqlperformanceblog.com/2006/10/16/应-mysql-web-server-share-the-same-box / )。 当然,只要您自动调整数据库,就会遇到在所有实例中保持数据一致的问题。

同步文件:同步数据最简单的解决scheme是使用rsync。 你可以定期运行它(通过cron),或者可以使用incron来触发它,当目录内容改变时它可以运行。 另一个选项lsyncd使用inotify来监视对目录的更改并触发rsync。

另一种文件同步的方法是使用networking/分布式/群集文件系统。 例如,您可以使用Gluster保持复制(多个副本)和/或分布式(展开)。

你也可能想要在你的节点之间分享你的PHP会话。

同步数据库:可以说,保持文件同步是很容易的部分。 保持数据库同步更是一个挑战。 当与不同数量的节点一起使用时,难度会增加。

  • 最简单的解决scheme是将您的数据库放在单独的实例上。
  • 复制是常见的解决scheme – 但是当您不确定哪个实例将被终止时维护主节点是一个问题。 如果你正在使用一个configuration框架,你可能更容易控制这个。 使用诸如“起搏器”(来自Linux-HA)的东西也可能对此有所帮助。 或者只是将主节点保留在自动缩放组之外(但这会使其成为单点故障)。
  • MySQL集群有一些承诺,但我不知道WordPress是否会在NDBCluster上运行(它也需要一个pipe理节点)。
  • 有一些关于MySQL运行在共享文件系统(特别是Gluster)上的说法 – 它可能工作,但是我不会对它有太多的信心。

我build议使用一个单独的MySQL实例,并使用其中一个基于rsync的脚本(可能是lsyncd)来保持文件同步。 自动调整您的Web服务器,这可能需要一段时间,然后才需要担心数据库服务器。 如果您自动缩放数据库,请将主节点保留在组外,然后缩放从站。

部署:

在这方面,你可能需要在每个节点(例如,一个主人,一个奴隶等)中稍有不同。 框架(如voretaq7的答案中所提到的)将成为这里的方式。 在很多方面,你的实现越好,但是对自动扩展的需求就越less。 一个设置可能包括Corosync和Pacemaker来监视每个节点的状态以及运行在其上的服务 – select一个主节点,然后根据需要运行一个脚本来扩展你的集群。

调查部署和configurationpipe理框架( Puppet , Chef , Radmind )。
pipe理您的后端实例,使其相同,并让弹性负载均衡器找出哪个客户端在哪里。