Replication

MongoDB如何實現非同步異地複制

  • February 28, 2018

我已經閱讀了很多關於 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。

引用自:https://dba.stackexchange.com/questions/198950