如何跨2个VM运行WordPress以实现高可用性


12

Microsoft Azure要求应用程序跨多个数据中心利用两个实例,以实现其“高可用性” SLA,并确保您的站点不会因日常维护而停机。他们甚至告诉您哪些数据中心永远不会同时进行维护。

很好,但是对于在同一台VM上具有MySQL数据库的WordPress之类的应用程序,您在实践中如何轻松地做到这一点?我对两个VM之间的负载平衡并不陌生,但是数据库复制设置使我难以理解。我们不希望两个版本的数据可能不同步。MySQL复制似乎需要主从设置,如果用户登陆到从实例上,该设置将无法将更改同步到主数据库。

我只是误解了这个概念吗?任何帮助深表感谢!


1
为什么要在Azure上托管WordPress?有更好,更便宜的WordPress托管服务。例如数字海洋。
Alexus

1
Alexus,这在这里并不重要,但是我们在Azure的基础架构中分布了相当多的堆栈,而WordPress只是其中的一个组件。Azure是一个很棒的平台,我们对此非常满意。
亚伦

1
知道了。您必须做自己必须做的事情:)我也喜欢Azure来处理大部分.NET内容,但始终单独托管WP网站。
Alexus

Yaron,您认为以下答案有用吗?到目前为止,它已收到3份投票,只是想检查您是否发现任何重要概念遗漏,因此我可以针对您的特定用例进行更新以解决它。
Bryan'BJ'Hoffpauir Jr.

1
非常感谢@ Bryan'BJ'Hoffpauir的详尽回答,对不起,我还没有时间尝试按照您的指示查看它们是否与我们的实现配合使用。我将答案标记为正确,如果遇到任何麻烦,它将再次伸出援手。再次感谢!!
亚伦

Answers:


11

坏消息:Wordpress的核心开源基础确实对在单个服务器上运行做了很多假设(wp内容,用户上传和媒体库仅举几例)

好消息:几乎所有云提供商(包括Azure)都具有抽象,可让您解决这些设计限制。

从根本上讲,您将解决以下问题:

  • 在两个(或更多)“前端” Wordpress Web /应用服务器之间进行负载平衡流量。除非您让用户登录到网站,否则Wordpress基本上是无状态的,这并不太难。这是通过DNS和负载平衡器的组合来完成的。您需要为应用服务器提供2个IP的支持-一组将连接到可通过Internet路由的子网(尽管希望受到下面未概述的防火墙的保护),而另外两个将位于与以下地址隔离的不同子网中另一个网络并包含数据库服务器实例,但基本概述如下:
                     /-(10.0.0.1-eth0)wp1.domain.com(10.0.1.1-eth2)
(公共IP)wp.domain.com          
                     \-(10.0.0.2-eth1)wp2.domain.com(10.0.1.2-eth3)
  • 如果允许用户登录站点,则管理会话。如果是这样,您将需要确保当他们登录到服务器1时,将来所有的请求都将路由到该服务器(粘性会话),或者访问哪个服务器都没有关系,因为会话是通过其他机制管理的(例如,通过Zend Server会话群集)。

  • 管理管理员登录信息如果您要让某些用户登录到后端以管理内容(类似于上面的内容)。

  • 选择还高度可用的数据库系统。如果您的数据库崩溃导致整个系统瘫痪,那么拥有两个前端服务器毫无意义。您需要通过ClearDB利用MySQL主/从复制,或者通过插件修改WordPress以利用SQL Server,以便可以使用其本机群集系统。如果要自己管理数据库层(2 x App和2 x DB),则意味着至少需要4个VM。这可能是这样的:

               /-wp1.domain.com(10.0.1.1)\ --- /(10.0.1.3)db1.domain.com(10.0.2.3)\
         wp.​​domain.com X |           
               \-wp2.domain.com(10.0.1.2)/ --- \(10.0.1.4)db2.domain.com(10.0.2.3)/

  • 注意 -为确保可靠的故障转移并保护系统的安全性,通常使用THIRD网络子网通过专用通道将两个数据库节点相互连接,该专用通道与应用服务器用来与之通信的其他通信网络分开数据库和应用服务器用于与外界通信。

  • 启用连接池可最大程度地提高应用服务器的数据库连接的性能和可靠性。

  • 利用W3 Total Cache或Super Cache之类的缓存插件来最大程度地减少前端服务器上的负载。

以下指南提供了有关如何应对上述每个挑战的具体说明。在Azure中有多种处理方法,因此您需要决定如何攻击每个挑战,然后处理在堆栈中上下移动时这些选择所施加的约束。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.