如何跨两个虚拟机运行WordPress以实现高可用性

时间:2015-07-13 作者:Yaron

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

这一切都很好,但对于像WordPress这样的应用程序,在同一个VM上使用MySQL数据库,您如何在实践中轻松做到这一点?我对两个VM之间的负载平衡并不陌生,但数据库复制设置让我很困惑。我们不希望两个版本的数据不同步。MySQL复制似乎需要主从设置,如果用户登录到从实例,则无法将更改同步到主DB。

我只是误解了这个概念吗?非常感谢您的帮助!

1 个回复
最合适的回答,由SO网友:Bryan \'BJ\' Hoffpauir Jr. 整理而成

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

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

基本上,您将解决以下问题:

两个(或多个)之间的负载平衡流量;“前端”;WordPress web/应用服务器。不太难,因为WordPress基本上是无状态的,除非您允许用户登录到这些站点。这是通过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, 例如)。

如果您允许一些用户登录到后端来管理内容,请管理管理员登录(与上文类似)。

选择同样具有高可用性的DB系统。如果数据库崩溃导致整个系统瘫痪,那么使用两个前端服务器没有任何意义。您需要通过ClearDB或modify WordPress via plugin to leverage SQL Server 所以你可以使用native clustering systems. 这意味着如果您想自己管理DB层(2个应用程序和2个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)/

结束

相关推荐

$wpdb->Prepare的工作方式与MYSQL_REAL_EASH_STRING不同

我正在开发WordPress插件,最近我计划从SQL迁移到$wpdb. 我正在使用一个名为$wpdb->prepare 而不是mysql_real_escape_string 但它不起作用。以下是我尝试的内容:代码:echo $fetch_row; 输出:a: 5:{s:9:“task\\u name”;s:10:“立即备份”;s:9:“机制”;s:10:“singleCall”代码:echo mysql_real_escape_string( $fetch_row ) 输出:\