2012-09-04 70 views
0

現在我有兩個分片:shard3(16g),shard4(15g)和三臺機器: 部署如下: 10.10.10.5:(mongoS, configureserver,shard3小學,shard4主) 10.10.10.6:(mongoS,configureserver,shard3二次,二次shard4) 10.10.10.7:(mongoS,configureserver,shard3 arbitor,shard4 arbitor)MongoDb:有沒有更好的方法將生產環境數據複製到測試環境

現在我想打一個性能測試(關於添加新的碎片),我知道我不能使用生產環境進行測試,因爲這會影響生產性能,所以我想將所有數據複製到測試三臺機器:20.20.20.5,20.20。 20.6和20.20.20.7,我讀了馬但是找不到更好的方式,所以親愛的傢伙,請你給我一個建議。順便提一下兩個小問題:第一:像我的生產環境一樣,我如何將arbitor節點更改爲secondary,即我想將10.10.10.7更改爲輔助碎片,因爲我想要10.7分享讀取壓力10.6。 第二:如何指示Mongo讀取主節點但輔助節點,您知道mongoS在主節點上寫入時在輔助節點上讀取,但我希望在主節點上讀取和寫入以便立即獲取最新數據。 謝謝inadvance 插孔

回答

1

你應該看看下面的文檔:http://www.mongodb.org/display/DOCS/Import+Export+Tools。你可以使用mongoexport和mongoimport來做你想做的事情。或者你也可以使用mongodump & mongorestore。這將允許您備份數據並將其恢復到測試環境。

第一個問題:您無法將仲裁者「轉換」爲輔助者。這樣做的唯一方法是向副本集添加一個新節點,然後取下仲裁器,然後將其從副本集中刪除。您可以使用現有副本集節點上的rs.add()將新的mongod添加到副本集。你這樣做是爲了避免停機。如果你不介意停機時間,那麼訂單並不重要。有關將節點添加到副本集的文檔可以在此處找到:http://www.mongodb.org/display/DOCS/Replica+Sets+-+Basics

此外,如果您正在執行readScaling並使用SlaveOK(),請務必記住,如果複製從主節點延遲到任一節點次級,你有可能閱讀陳舊的數據。如果這對您的應用程序而言可以接受,那麼您應該認識到,如果您同時查詢副本集中的兩個節點,您可以根據複製滯後時間爲同一查詢讀取兩個不同的值。

第二個問題:如果您想始終只從主文件讀取/寫入,則不應使用SlaveOK運行。 SlaveOK關閉是默認設置,但是如果您已經打開它,只需再次調用false即可。

+0

嗨ChadsworthIII,非常感謝您的幫助〜 我怎樣才能最大限度地減少生產的衝擊,我不影響生產節點。 – Jack

+0

如果轉儲輔助節點比轉儲主節點更好 – Jack

+1

使用--host運行mongoExport並指定輔助節點。這個缺點是,如果你有複製滯後,你可能不會轉儲最新的數據。 – ChadsworthIII

0

只要您的主副本和副本集的大多數副本集都是可寫的。所以很自然,只要主服務器沒有超載,並且您沒有關閉4個節點中的2個,您就可以寫入主服務器。它只會複製到大部分已啓動的節點。

一般來說,我們試圖阻止偶數副本集,所以我會讓仲裁者脫機並堅持你的3副本集。這是因爲你沒有贏得仲裁者的任何勝利。如果兩個節點出現故障,您不會佔多數,副本集將變爲只讀。如果一個節點出現故障,您仍然可以寫入。仲裁人在偶數組中無助於任何事情。

當您試圖執行只有一個輔助的這些查詢時,新的輔助是否被數據查找?如果它處於「恢復」狀態,那麼讀取可能沒有進行,因爲它沒有複製所有的數據。除此之外,還可以指定讀取首選項。在所有不同的讀偏好以及如何使用它們

文檔可以在這裏找到:http://docs.mongodb.org/manual/applications/replication/#read-preference

相關問題