2013-09-23 32 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配置标签集) –