3

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

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

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

  1. Server1$: 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 选项吗?

4

1 回答 1

0

如果您不指定副本集,它将以“独立”模式连接,并且您将失去应用程序端的副本集功能(无故障转移)。因此,如果您连接的服务器要故障转移到另一台服务器,您的应用程序将不会跟随并重新连接到新的主服务器。

文档

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

于 2017-12-08T19:03:48.700 回答