2016-04-08 33 views
2

当指定用于连接到来自Java应用程序的MongoDB副本集的客户端URI时,我对MongoDB连接字符串replicaSet选项的use/need选项感到困惑。MongoClientURI连接字符串中是必需的副本集名称吗?

我有3个运行MongoDB的节点实例组成副本集,每个都被指定为同一副本集的成员。我想从我的Java应用程序连接到副本集。当我给出超过2个主机名的列表时,如果甚至有必要在连接字符串中指定副本集名称,我从我读过的文档中感到困惑。

以下是我如何启动我的3节点MongoDB实例。

  1. 服务器1 $:mongod的--replSet “RS0
  2. Server2上$:mongod的--replSet “RS0
  3. Server3的$:mongod的--replSet “RS0

我假设一个协商会发生,并且一个主要被选中,其余的 被标记为次要。

然后,我想通过来自我的Java应用程序的MongoClient调用来连接到副本集。是否需要实际的副本集名称?我是否需要列出副本集的每个成员,或者MongoDB驱动程序是否只需要副本集的单个成员来确定其余成员?

MongoClient mongoClient = new MongoClient(
    new MongoClientURI(
    "mongodb://Server1,Server2,Server3/?replicaSet=rs0" 
) 
); 

我需要replicaSet选项吗?

回答

0

如果您未指定复制套件,它将以“独立”模式进行连接,并且会在应用程序端丢失复制套件功能(不进行故障转移)。因此,如果您连接的服务器要故障转移到另一台服务器,那么您的应用程序将不会跟随并重新连接到新的主服务器。

docs

当连接到副本集给至少两个的mongod实例的种子列表 是很重要的。如果只提供单个mongod实例的连接点 ,并省略replicaSet,则客户端 将创建独立连接。

相关问题