簡體   English   中英

使用Django Webapp和MySQL進行多主數據庫復制

[英]Multi-master database replication with Django webapp and MySQL

我正在努力擴展Web應用程序並提供一些數據庫冗余,以防止出現故障並在需要更新時保持服務器正常運行。 該應用程序仍在開發中,因此我選擇了帶有兩個單獨的數據庫服務器的簡單多主機冗余來嘗試實現此目的。 每個服務器將具有Django代碼並托管自己的數據庫,並且數據庫應盡可能緊密地鏡像(在幾秒鍾內更新)。

我試圖弄清楚如何在使用Django和MySQL的數據庫之間設置多主機(master-master)復制。 有很多關於僅使用MySQL進行設置(使用各種配置)的文檔,但是我找不到從Django方面進行這項工作的任何文檔。

據我了解,我需要通過在Django設置中添加兩個數據庫條目(每個主數據庫一個)來解決此問題,然后編寫一個數據庫路由器,該路由器將指定從哪個數據庫讀取和從哪個數據庫寫入。 在這種情況下,兩個數據庫都應同時接受讀取和寫入,並且寫入/更新應鏡像到另一個數據庫。 路由器中的邏輯可以簡單地使用輪詢技術來決定使用哪個數據庫。 從那里開始,應該通過MySQL配置完成進一步的配置以設置實際的復制。

這種方法聽起來是否正確,是否有人有使其工作的經驗?

您對路由器的想法很棒! 我要補充一點,您需要自動檢測數據庫是否[運行緩慢]。 您可以通過響應時間以及連接/讀取/寫入錯誤來檢測到該錯誤。 如果發生這種情況,則將您的數據庫從循環列表中排除一段時間,嘗試不時嘗試重新連接至該數據庫,然后檢測數據庫是否處於活動狀態。

換句話說,輪詢列表根據數據庫計算機的運行狀況動態地增長和縮小。

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM