我目前正在寻找自动缩放在Amazon EC2上的wordpress安装。 一切正常,我可以绑定我的EBS实例,把一些策略,然后亚马逊自动实例运行在我的负载均衡器,如果需要的话。
但是,如果我有一个WordPress的插件,它不会安装在每个实例。 我的愿望是,当我安装一个插件,也自动安装在其他服务器上。
我能为你做什么? 你有什么想法吗?
你的问题有两个方面:
同步处理:
安装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会话。
同步数据库:可以说,保持文件同步是很容易的部分。 保持数据库同步更是一个挑战。 当与不同数量的节点一起使用时,难度会增加。
我build议使用一个单独的MySQL实例,并使用其中一个基于rsync的脚本(可能是lsyncd)来保持文件同步。 自动调整您的Web服务器,这可能需要一段时间,然后才需要担心数据库服务器。 如果您自动缩放数据库,请将主节点保留在组外,然后缩放从站。
部署:
在这方面,你可能需要在每个节点(例如,一个主人,一个奴隶等)中稍有不同。 框架(如voretaq7的答案中所提到的)将成为这里的方式。 在很多方面,你的实现越好,但是对自动扩展的需求就越less。 一个设置可能包括Corosync和Pacemaker来监视每个节点的状态以及运行在其上的服务 – select一个主节点,然后根据需要运行一个脚本来扩展你的集群。
调查部署和configurationpipe理框架( Puppet , Chef , Radmind )。
pipe理您的后端实例,使其相同,并让弹性负载均衡器找出哪个客户端在哪里。