【问题标题】:No primary server available when failover happens: MongoDB, Node.js, Mongoose发生故障转移时没有可用的主服务器:MongoDB、Node.js、Mongoose
【发布时间】:2016-11-08 08:19:15
【问题描述】:

我目前在 mongodb 副本集中发生故障转移时遇到问题。应用无法重新连接到新选出的主服务器,并且无法执行所有后续的写入操作。

重新启动应用重新连接成功。

故障转移立即发生,并选出了一个新的主节点。但是,该应用无法连接到新的主节点。

mongodb 版本:3.2.6 猫鼬版本:4.3.4 node.js 版本:0.10.26

【问题讨论】:

  • 需要更多细节。 mongoose.connect 代码是什么样的?您可以为服务器详细信息加注星标。
  • 这与github.com/Automattic/mongoose/issues/3634类似,但没有提供解决方案
  • 已通过替换 rs.conf 中的主机名并将所有替换为 ips 来解决此问题
  • 您能否分享更多信息。请分享副本集的配置,例如您为每个副本集分配的优先级,以便在投票后发生故障时其他机器将接管为主。 --- 第二次分享您的连接字符串 --- 托管您正在使用的主机,并且您的所有副本集都可以从主服务器访问,例如来自 api 服务器的白名单 ping 以检查所有数据库服务器。

标签: node.js mongodb mongoose


【解决方案1】:

我也遇到了类似的问题,然后我就换了

mongoose.connect(db)

mongoose.connect(db, {useNewUrlParser: true})

现在一切正常

【讨论】:

    【解决方案2】:

    我在三个不同的节点上设置了一个主节点、辅助节点和一个仲裁节点。这就是我使用猫鼬连接的方式,并且故障转移工作得非常好。

    mongoose.connect('mongodb://user:pwd@a.com:27017,b.com:27017,c.com:27017/dbName');
    

    所以,所有期望 mongodb:// 的东西都是变量。

    【讨论】:

      【解决方案3】:

      我遇到了这个问题,但结果是我试图从未列入白名单的 IP 访问。

      【讨论】:

        【解决方案4】:

        mongoose.connect(url, { useNewUrlParser: true, useUnifiedTopology: true }) 像这样使用,它会正常工作。

        【讨论】:

          猜你喜欢
          • 2018-06-13
          • 2014-01-14
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2010-11-06
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多