问题描述

Microsoft Azure 要求应用程序在多个数据中心中使用两个实例,以实现其”high availability” SLA,并确保您的站点不会停机进行日常维护。他们甚至告诉你,哪一对数据中心将永远不会同时进行维护。

这一切都很好,但是如何在一个像同一个虚拟机上的 MySQL 数据库的 WordPress 应用程序中轻松实现这一点?在两台虚拟机之间进行负载均衡并不陌生,但数据库复制设置不包括在内。我们不会想要两个版本的数据可能会失去同步。 MySQL 复制似乎需要一个 master-slave 设置,如果用户降落在从站实例上,则无法将更改同步到主数据库。

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

最佳解决方案

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

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

从根本上说,您将会遇到以下问题:

  • 两个 (或更多)”front-end” WordPress Web /应用服务器之间的负载平衡流量。不要太困难,因为 Wordpress 是 MOSTLY 无状态的,除非你让用户登录到网站。这通过 DNS 和负载平衡器的组合完成。您将需要为应用服务器支持 2 个 IP 地址 – 1 个设置将连接到可通过 Internet 进行路由的子网 (尽管希望受防火墙保护,未在下面概述),另外两个将位于不同的子网上另一个网络包含数据库服务器实例,但基本概要如下:


                     /-- (10.0.0.1 - eth0) wp1.domain.com (10.0.1.1 - eth2)
(Public IP) wp.domain.com
                     -- (10.0.0.2 - eth1) wp2.domain.com (10.0.1.2 - eth3)
  • 管理会话如果您让用户登录到网站。如果是这样,您需要确保他们登录到服务器 1 时,他们将来的所有请求都被路由到该服务器 (粘性会话),或者访问哪个服务器并不重要,因为会话通过其他机制进行管理 (例如通过 Zend Server Session Clustering) 。

  • 管理管理登录如果您让某些用户登录到 back-end 来管理内容 (与上述相似) 。

  • 选择非常可用的数据库系统。如果您的数据库崩溃导致整个系统崩溃,则无法使用两个前端服务器。您需要通过 ClearDB 或 modify WordPress via plugin to leverage SQL Server 来利用 MySQL 主/从复制,以便您可以使用其 native clustering systems 。如果您想自己管理 DB 层 (2 x App& 2 x DB),则这意味着您需要至少 4 个虚拟机。以下是可能的样子:



               /-- 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)/

  • 注 – 确保可靠的故障切换和保护系统的安全性,第三方网络子网通常用于通过与应用服务器用于与数据库和数据库通信的其他通信网络分离的专用信道将两个数据库节点彼此连接。应用服务器用于与外界通信。

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

  • 利用缓存插件,如 W3 Total Cache 或 Super Cache,以最大限度地减少前端服务器的负载。

以下指南提供了如何解决上述每个挑战的具体细节。有几种方法可以在 Azure 中处理每个问题,因此,您可以决定如何攻击每个挑战,然后处理每个选项在您上下堆叠时所施加的约束。

参考文献

注:本文内容整合自 Google/Baidu/Bing 辅助翻译的英文资料结果。如果您对结果不满意,可以加入我们改善翻译效果:薇晓朵技术论坛。