Replication
MongoDB如何實現非同步異地複制
我已經閱讀了很多關於 MongoDB 複製和分片的背景知識。我所知道的預設解決方案都不能真正實現我想要實現的目標。
現在的情況
我們有一個時間緊迫的應用程序平衡在三個地理上分離的位置(稱為 A、B 和 C)上,它生成 JSON 文件的報告並將它們寫入集中式(外部)MongoDB 伺服器上。我們有一個不同的應用程序從集中式 MongoDB 伺服器讀取和處理這些報告。這工作得很好。
Application (A) ----> +---------------------+ | | Application (B) ----> | Centralized MongoDB | --> Processing | | Application (C) ----> +---------------------+
我們目前設置的問題是,如果集中式 MongoDB 伺服器由於某種原因沒有響應,則報告會失去,並且應用程序在等待響應時會受到很好的性能損失。所以基本上三個獨立的冗餘位置都依賴於一個位置來儲存報告。我們無法在應用程序中解決此問題。
期望的情況
我們希望有一個本地 MongoDB 服務在每個地理上分離的位置進行偵聽,以便我們的應用程序始終能夠在本地委託報告。但最終我們仍然希望將來自這三個位置的所有報告合併到集中式 MongoDB 伺服器上。
+---------------+ +-------------+ Application (A) --> | Local MongoDB | ----> | | +---------------+ | | +---------------+ | Centralized | Application (B) --> | Local MongoDB | ----> | | --> Processing +---------------+ | MongoDB | +---------------+ | | Application (C) --> | Local MongoDB | ----> | | +---------------+ +-------------+
所以在我看來,這是一種反向分片。
一些旁注:
- 這是單行道。我們的應用程序只插入。它不需要從儲存中讀取數據。在處理方面只需要閱讀。它不插入任何數據。
- 如果在中斷期間失去某些報告是可以接受的
- 如果報告在集中儲存中出現故障是可以接受的
- 複製應該是非同步的,但接近實時。我們需要在幾秒鐘內處理報告
- 如果本地 MongoDB 程序也使用本地儲存,那很好,但我們不需要它。
- 任何開源或商業解決方案都是可以接受的,第三方解決方案也是如此。
- 本地 MongoDB 程序始終立即接受報告至關重要,因此應用程序可以立即執行其他操作
- 該應用程序需要 MongoDB,因此我們需要堅持下去。
任何幫助或想法將不勝感激。
使用mongo-connector產品可以實時從多個“本地 MongoDB”源到一個“集中式 MongoDB”進行單向複製。只需為每個本地 MongoDB 啟動一個 mongo-connector。
我已經使用該產品將一個分片集合(從九個分片)複製到一個 mongodb。