問題描述

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 輔助翻譯的英文資料結果。如果您對結果不滿意,可以加入我們改善翻譯效果:薇曉朵技術論壇。