2014-06-21 33 views
2

我們的一個客戶端有一臺運行MongoDB實例的服務器,我們必須使用存儲在MongoDB數據庫中的數據來構建分析應用程序,這些數據會經常更改。帶有遠程服務器索引的本地MongoDB實例

客戶的要求是:

  • ,我們不連接到他們的MongoDB實例直接或他們的服務器上運行的MongoDB的另一個實例,但不知怎麼竟用我們的機器上運行我們自己的MongoDB實例在我們的辦公室他們的MongoDB數據庫目錄具有遠程只讀訪問權限。

我們建議部署一個REST應用程序,獲取其數據庫轉儲的副本,但他們不希望這樣。他們只是希望我們運行我們自己的MongoDB實例,它與MongoDB實例目錄聯繫在一起。這甚至有可能嗎?

我一直在尋找過去兩天的解決方案,我們必須在星期一之前提交解決方案。我真的需要一些幫助。

回答

2

我認爲這是正常的請求,因爲分析查詢可能會對生產服務器造成太多的負載。將生產和分析數據庫分開是非常正常的。

最簡單的選擇是使用MongoDB複製。設置MongoDB 副本集將生產數據庫實例作爲主數據庫實例和分析數據庫實例作爲輔助數據庫,還要將分析實例配置爲永不成爲主數據庫實例。

如果無法使用複製 - 例如客戶端不需要這個,服務器就無法直接連接到對方...... - 還有另一種選擇。您可以從遠程數據庫中讀取oplog,並將操作應用於您的數據庫實例。這正是副本集的工作原理的低級機制,但您也可以手動完成。例如,MMS(Mongo Monitoring Sevice)Backup使用讀取oplog來在線備份MongoDB。

更新:mongooplog可能是實時應用複製oplog從本地服務器上的遠程服務器拉出的正確工具。

0

我不認爲運行指向相同數據庫文件的兩個數據庫是可能的,甚至建議。

您可以使用mongorestore直接從數據文件中恢復,但只有當它們的mongod實例沒有運行時(因爲mongorestore需要鎖定目錄),它纔會起作用。

另一個解決方案將是做file system snapshots,然後恢復到您的本地數據庫。

此備份/恢復解決方案的缺點是您的數據不會始終同步。

可能最好的解決方案是使用隱藏成員的副本集。 您可以創建一個只有兩個成員的副本集:

  1. 主要 - 這將是客戶端服務器。
  2. 次要 - 隱藏,投票和優先級設置爲0.這將是您的本地實例。

他們的服務器將永遠是主要的(因爲隱藏的成員不能成爲初選)。客戶無法看到隱藏的成員,因此出於所有意圖和目的,您的服務器將只能被讀取。 另一個好處是,MongoDB複製將執行所有在服務器之間同步數據的「繁重」工作,並且您的實例將始終具有最新數據。

相關問題