2015-12-26 30 views
0

我正在擴展web應用程序並提供一些數據庫冗餘以防止故障,並在需要更新時保持服務器正常運行。該應用程序仍處於開發階段,因此我選擇了一個簡單的多主站冗餘以及兩個獨立的數據庫服務器來嘗試實現此目標。每個服務器將擁有Django代碼並託管它自己的數據庫,並且數據庫應儘可能接近鏡像(在幾秒鐘內更新)。使用Django webapp和MySQL進行多主數據庫複製

我想弄清楚如何設置與Django和MySQL數據庫之間的多主(主 - 主)複製。有很多關於僅使用MySQL進行設置的文檔(使用各種配置),但是我從Django方面找不到任何工作。

據我所知,我需要通過在Django設置中添加兩個數據庫條目(每個主數據庫條目),然後編寫一個數據庫路由器來指定要從哪個數據庫讀取數據以及從哪個數據庫寫入數據。在這種情況下,兩個數據庫都應該接受讀取和寫入,並且應該將寫入/更新鏡像到另一個數據庫。路由器中的邏輯可以簡單地使用循環技術來決定使用哪個數據庫。從那裏開始,進一步的配置來設置實際的複製應該通過MySQL配置完成。

這種方法聽起來是否正確,有沒有人有任何經驗來實現這個工作?

回答

0

你對路由器的想法很棒!我會補充說,你需要自動檢測數據庫是否[緩慢]下來。您可以通過響應時間和連接/讀取/寫入錯誤來檢測。如果發生這種情況,那麼您將該數據庫從循環列表中排除一段時間,嘗試立即連接回數據庫以檢測數據庫是否還活着。

換句話說,根據數據庫機器的運行狀況,循環列表會動態增長和收縮。

另一個重要的通知是,幸運的是,您不需要維護所有Web服務器通用的循環列表。每個Web服務器都可以將自己的循環列表副本以及自己的包含和排除數據庫的狀態存儲到此列表中。這只是因爲數據庫服務器可以從一個Web服務器上看到,並且由於本地網絡問題而無法從另一個Web服務器上看到。