MongoClientURI连接字符串中是否需要ReplicaSet名称?

时间:2016-04-08 20:54:03

标签: mongodb mongodb-replica-set

在指定从Java应用程序连接到MongoDB副本集的客户端URI时,我对MongoDB连接字符串replicaSet选项的 use / need 感到困惑。

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

以下是我启动3节点MongoDB实例的方法。

  1. Server1 $:mongod --replSet“ rs0
  2. Server2 $:mongod --replSet“ rs0
  3. Server3 $:mongod --replSet“ rs0
  4. 我假设然后进行协商,选出一个主要,剩下的就是 被标记为Secondaries。

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

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

    我是否需要replicaSet选项?

1 个答案:

答案 0 :(得分:0)

如果您没有指定复制副本,则会将其连接到“#stand;独立”状态。模式,您在应用程序端丢失replicaset功能(没有故障转移)。因此,如果您连接的服务器要故障转移到另一台服务器,您的应用程序将无法跟随并重新连接到新的主服务器。

来自docs

  

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