【问题标题】:Mongo: How to automatically connect to secondary in case of primary failureMongo:如何在主要故障的情况下自动连接到辅助
【发布时间】:2016-12-17 22:19:04
【问题描述】:

我有三个 mongod 实例的副本,其中一个是主实例,另外两个是辅助实例。我将一个 mongo 实例连接到主实例,然后我关闭了 mongod 主实例,模拟失败。

通常,只要我启动一个命令,mongo 就会生成一个 DBClientCursor::init call() failed 错误。

我的问题是,如果出现这种故障,主节点无法恢复服务,并且肯定会选举新主节点,有没有办法告诉 mongo 自动搜索并连接到新主节点副本集的主节点?

【问题讨论】:

    标签: mongodb mongodb-query failover automatic-failover


    【解决方案1】:

    这不是问题。副本集的定义和配置都很好。这个问题真的很奇怪,我猜这是终端中的一个错误。我所做的只是关闭终端,打开一个新终端,它就像一个魅力一样工作

    【讨论】:

      【解决方案2】:

      您的问题可能是您连接到一个节点,即当时的主要节点。您需要做的是在连接时指定副本集是什么以及每个可用节点的地址是什么 - 这样您的客户端就可以在其主节点发生故障时重新连接到不同的节点。

      Mongo URI connection string format 上的文档解释了这一点:

      hostX :可选。您可以根据需要指定任意数量的主机。您可以指定多个主机,例如,用于连接到副本集。

      它给出了这个例子:

      示例
      描述与名为 test 的副本集的连接,使用以下 mongod 主机:

      db1.example.net 在端口 27017 和
      db2.example.net 在 2500 端口上。
      您将使用类似于以下内容的连接字符串:

      mongodb://db1.example.net,db2.example.net:2500/?replicaSet=test

      您可能还需要检查驱动程序的文档,以防它需要以特定方式指定副本集和节点列表。

      【讨论】:

      • 不,这应该不是问题。任何理智的客户端只要连接到任何一个节点,就会发现完整的副本集配置。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-12-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多