我有一個非常具體的用例,因爲我對數據庫複製不太熟悉,所以我很樂意提供有關如何完成遵循最佳方式:數據庫複製:具有本地數據庫的多個地理位置,一個主遠程數據庫
Web應用程序+數據庫正在遠程服務器上運行。讓我們把這個設置R稱爲遠程。
現在假設有3個獨立的地理位置需要對數據庫進行讀寫訪問。我會將這些位置稱爲L1,L2和L3。
的主要問題:遠程服務器可能不可用或位置可能並不總是有效,使遠程應用程序不可用的一個互聯網連接;但我們希望應用程序能夠作爲高可用性解決方案(現場)工作,即使在遠程服務器關閉或互聯網連接出現問題時也是如此。
部分解決方案:所以我想爲每個地理位置提供一個本地的Web應用程序副本服務器。 Web應用程序本身可以在需要時從版本控制系統自動更新(例如使用git鉤子)。
到目前爲止好......(至少我這麼認爲?)
但對於我們的數據?真的很棘手的部分似乎是數據庫複製。我們假設沒有DNS或IP故障轉移,並假設用戶首先嚐試直接訪問遠程服務器,如果這不起作用,用戶仍可以使用本地服務器而不是現場服務器。這一切都發生在網絡瀏覽器(或類似的客戶端)內。
一種可能(但不令人滿意)的解決方案是使用從R(主站)到L1,L2和L3(從站)的主從複製。當這樣做異步這應該是相當快?我認爲當主服務器損壞或無法訪問時,這是臨時本地只讀數據庫訪問的可行解決方案。
但是......讀寫支持怎麼樣?我想在這種情況下我們需要多主複製,但恐怕使用像MySQL Cluster或Galera之類的東西進行同步複製會減慢速度,尤其是因爲L1,L2和L3使用較低的帶寬連接。他們通過廣域網連接。 (另外,L1,L2或L3可能並不總是在線。)
真正的問題:您將如何解決這個特定的用例?目前我傾向於多主複製,如果它不會減慢太多事情。應用程序本身將主要由現場員工使用,但也由一些外部人員通過WAN使用。多主複製能夠很好地工作嗎?如果例如L1下降24小時並突然回到在線狀態呢?如果R無法訪問,該怎麼辦?
附加:不是我的主要問題,但我也需要通過SSL安全地發送同步數據,如果可能的話,請考慮到您的答案。
也許我還忘記了一些必要的細節;如果是這樣,請回復一些反饋,我會盡力相應地更新我的問題。
請注意,我還沒有確定數據庫,數據庫模式將從頭開始開發,因此也歡迎使用其他數據庫或數據庫引擎的想法。 (目前我對MySQL和PostgreSQL有最豐富的經驗)