【问题标题】:Is the ReplicaSet name necessary in MongoClientURI Connection String?MongoClientURI 连接字符串中是否需要 ReplicaSet 名称?
【发布时间】:2016-07-30 06:48:02
【问题描述】:

在指定用于从 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"

我假设会发生协商,选出一个 Primary,剩下的 被标记为辅助节点。

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

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

我需要 replicaSet 选项吗?

【问题讨论】:

    标签: mongodb mongodb-replica-set


    【解决方案1】:

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

    来自docs

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

    【讨论】:

    • 当前文档不再这么说,但即使在您引用的版本中,它也会说“如果您只提供单个 mongod 实例的连接点,并且......”。这会让人相信,如果你提供了多个连接点,replicaSet 参数可以省略。
    猜你喜欢
    • 2012-05-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-02-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多