扩展服务器群集设置

我正在重build一个网站,目前每个月大概有4百万人次的访问量(最近这个数字是直线上升的)。 它目前正在运行,并由外部公司托pipe,但我们正在倾销他们,所以我需要devise托pipe。

我正在考虑build立一个小群集(可能在Linode上):

WP本身运行W3 Total Cache与Xcache,我正在考虑为图像和其他静态文件的CDN,caching头已被用于这些静态文件…

这个计划是,当我们扩展时,我可以根据需要添加更多的应用程序和/或数据库服务器。

简而言之:这个设置是否工作? 它会有效吗? 我从来没有build立过这样的事情,所以我想确保我不会错过任何东西。

仅供参考:这是一个新闻网站。 我们在几个部分运行文章,一些媒体,游客可以评论文章,注册我们的电子邮件列表等。

我正在build立类似于你与另一家公司的东西。 我不一定就Linode的工作发表评论,但是想要强调一下我在研究VPS时遇到的一些问题:

  • 我不知道linode的负载平衡器的成本,但我发现我喜欢控制一个运行HAProxy或NGINX的通用VPS的configuration进行负载平衡(我select了HAproxy)。

  • 确保你有足够的RAM。 不幸的是,我发现迄今为止的公开发行不会让你调整内存和硬盘的数量(我需要更多的内存,但几乎没有这么多的硬盘,哦)。

  • 确保你的VPS是持久的。 如果closures或硬件故障,您不希望丢失在VPS上运行的数据(特别是MySQL)。 这是针对EC2的MySQL文档 ,但也有一些相同的概念适用)。

  • 绝对要确保你将MySQl复制到不同的服务器,甚至是多个从服务器上。 不想丢失数据。

  • 绝对要确保将备份检索到异地服务器。

  • 如果您正在部署到多个负载平衡服务器(2台或更多应用程序服务器),请使用备份rsync来更新代码的“主”服务器。 这简化了你的开发过程(把主从负载平衡scheme,确保奴隶不老同步从主机,推码到主,确保一切按预期工作,从主机到奴隶,再次rsyncing回来添加master到负载均衡scheme)。

我相信还有更多,但问题中概述的设置似乎很好。

这个设置与我们使用的networking服务器集群非常相似。 我们在我们的“余额”服务器上使用Nginx上游来将请求传递给我们的Web服务器。 我不明白为什么你的上面的configuration不起作用,它将允许您根据需要水平扩展。

  • 我也build议在负载均衡器上使用Heartbeat HA。 这里是一个很好的参考

您目前是否有任何备份/存储,或者您是否使用冗余RAID? 您可以考虑使用NAS来获取快照/备份。 只是一个想法。

确保你意识到,当你决定采取保活路线时,在2个linode群上build立你自己的haproxy将会失败。 我确定不支持多播。 有一个haproxy修复使用单播,这是传闻在这些networking上工作。

但是要意识到像rackspace / linode这样的提供商知道,否则这种混乱的负载均衡产品就会变得混乱。

这就是说,你可以让组播工作在openvpn链接(提示)

对haproxy的单播支持限制了2个节点控制1个VIP地址。

我已经有了大概的build议。

  • 确保至less使用两个LoadBalancer,使用一个LoadBalancer是单点故障
  • 使用集群文件系统(gfs / OCFS2)可以确保在集群上运行的代码是单一副本/版本,否则,每次需要推送一些新代码时,都需要将网站置于维护模式或者做一些更新,直到更改应用到所有集群节点(但是您可能会忘记更新其中之一)

你让我更深入地思考,我有几个Linode机器(和Rackspace也在我的控制之下)。

我的个人网站按照您的计划运行:

  • W3TC插件(有很好的CDN集成,我可以看到Idea从哪里来)
  • PHP / FPM
  • NGINX(1.2)
  • MariaDB 5.2

我有更多的服务,它与上游nginx背后无关,tracd(edgewall),也是一个couchdb dev实例。

所有在768Mb林德(第二低)。 它每秒可以处理多达50个连接,并启用memcached和磁盘caching(因此不需要APC或CDN)。 caching插件使其从5 / s到50 / s(最大的块是MariaDB)。

至于HAPROXY,我也有一个在Linode上运行的程序。 顺便说一下,因为你不能从同一个账户内select你的地理位置(你可以在我们外面有两个账户),所以find的机架空间不如Linode。 他们的界面也不像Linode那样光滑。

就MariaDB的扩展而言,我不觉得那么容易,运行2个主数据库是让他们同步的一大麻烦。 我会采取的经典路线是build立一个主服务器和几个奴隶(也许每个节点)。 然后在haproxy中将它们在TCP模式下集中在一起,但是在你的数据库和HAPROXY之间,我会把mysql-proxy放在它们之间,以确保写入正在发送到正确的主节点,你可以在LUA中进行编程。 增加的好处是创build到mysql的连接大大减less。 一个巨大的性能消失了,每一个mysql连接占用了我在这里经历的至less5Mb。

这仍然给你一个单一的失败,是MySQL主服务器。

为此,您可以使用第二个主人的主 – 主方法,而不是直接在任何地方直接使用,除非第一个主人员出现故障。 我发现Mysql DB是build立大型还原剂集群的最大限制因素。 couchDB在这方面是非常容易的,但它是一个NOSQL解决scheme…

我会做的最大的不同点是,我会放弃Apache的东西,你不需要它,因为PHP / fpm + nginx在那里。 所以我不会使用nginx作为caching,而是作为前端服务器。 Apache会吃掉你的Linode早餐比较nginx可以提供Linode …

希望这有助于你的计划。 一如既往,先自己动手,先testing一下这个东西。 在您的解决scheme中保持dynamic,在您开始在生产环境中使用之前先放下一些不起作用的东西,然后再做更多的工作。