問題描述
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 中處理每個問題,因此,您可以決定如何攻擊每個挑戰,然後處理每個選項在您上下堆疊時所施加的約束。
-
How to host a Scalable and Optimized WordPress for Azure in minutes
-
Deploy an Ultra High Availability MVC Web App on Microsoft Azure – Part 1
-
Deploy an Ultra High Availability MVC Web App on Microsoft Azure – Part 2
-
How to run Enterprise Grade WordPress sites on Azure Websites
參考文獻
注:本文內容整合自 Google/Baidu/Bing 輔助翻譯的英文資料結果。如果您對結果不滿意,可以加入我們改善翻譯效果:薇曉朵技術論壇。