2013-09-23 34 views
1

我正在使用mongodb,它在javascript中是本機驅動程序。在MongoDB中動態更改節點副本集

通過指定哪些節點是在設置連接到replicaset:

var mainReplSet = new MongoDB.ReplSet([ 
       new MongoDB.Server('0.0.0.0, 27017, { auto_reconnect: true }), 
       new MongoDB.Server('0.0.0.0', 27017, { auto_reconnect: true }), 
       new MongoDB.Server('0.0.0.0', 27017, { auto_reconnect: true }) 
      ], { rs_name:'ReplicaSetName', readPreference: MongoDB.ReadPreference.NEAREST }); 

所以,如果我動態節點添加到這個集合,我需要更新連接到副本集中的所有腳本。因此重新啓動它運行的任何服務器。無論如何要包含新節點而不必更新此腳本?

回答

1

在添加(並有條件地刪除)成員時,不必更新腳本。你需要的是提供種子列表。基本上你可以提供一個,但不建議這樣做,因爲它可能在那個時候停止。

即使您的副本集中有更多成員,仲裁服務器也應該足夠。所以對於你的三名成員來說,兩臺服務器就足夠了。

每個成員持有它自己的設置配置對象的副本,並知道主人是誰。甚至沒有必要在種子列表中指定主人。

Have a look here

+0

當你寫入數據庫時​​怎麼辦?對於寫入首選項,您可以指定數據在返回之前傳播到的節點數。這在mongo shell中的getLastErrorDefaults中設置,或者可以在腳本中設置。無論如何只是將「w」設置爲「全部」而不是「多數」?否則,我將不得不更新寫入數據庫的任何服務器的腳本。 –

+0

沒有將w設置爲「全部」的選項。您可以通過設置w = X來實現這一點,其中X是數據節點副本的數量。然而,這遠非推薦的緩慢和風險(一些複製品處於非活動狀態)。您可以輕鬆設置一個寫入關注點,以確保使用[標記集]寫入所有或大部分數據中心(http://docs.mongodb.org/manual/tutorial/configure-replica-set-tag-sets/#replica -set配置標籤集) –