【问题标题】:MongoDB error not master and slaveOk=false on primary node with mongoosemongoose 主节点上的 MongoDB 错误不是 master 和 slaveOk=false
【发布时间】:2019-05-21 09:07:57
【问题描述】:

我正在运行一个复制的 mongoDB,我可以使用 mongo 连接到集合中的主数据库没有问题:

bash-4.2$ mongo --port 25023
MongoDB shell version: 3.2.6
rs0:PRIMARY>

但是当像这样使用猫鼬时:

mongoose.connect('mongodb://127.0.0.1:25023/XXX', { useNewUrlParser: true });

我明白了:

XXX/node_modules/mongoose/lib/utils.js:452       
throw err;
    ^
MongoError: not master and slaveOk=false
   at queryCallback (/XXX/node_modules/mongodb-core/lib/cursor.js:247:25)

建议这样做:

mongodb://user:password@host:port,replicaSetHost:replicaSetPort/database?replicaSet=rs-someServer.

但这有点笨拙。有没有办法告诉猫鼬我们连接的是主服务器而不是从服务器?

第二个问题......即使列出其他主机也不起作用:

mongoose.connect('mongodb://localhost:P,S1:P,S2:P/XXX?replicaSet=rs0', { useNewUrlParser: true });

即使我提供了副本集,我也会收到此错误:

(node:13757) UnhandledPromiseRejectionWarning: Unhandled promise rejection  (rejection id: 1): MongoError: seed list contains no mongos proxies, replicaset connections requires the parameter replicaSet to be supplied in the URI or options object, mongodb://server:port/db?replicaSet=name

这就是奇怪的地方:我可以做到这一点。如果我使用这一行:

mongoose.connect('mongodb://127.0.0.1:25023/XXX', { useNewUrlParser: true });

让它失败,然后碰一个JS文件强制重启NodeJS,然后它似乎开始工作了?

【问题讨论】:

    标签: node.js mongodb mongoose


    【解决方案1】:

    同样的问题,基本上我想连接到副本集中的主节点(写入问题),但我间歇性地连接到辅助节点(竞争条件)。

    解决方案/TLDR;

    ?replicaSet=test&w=majority 添加到您的 MONGO_URL 连接字符串中。


    From the documentation...

    具有高写入关注度的副本集

    以下内容连接到具有写入关注点的副本集,该副本集配置为等待复制在大多数承载数据的投票成员中成功,超时时间为 2 秒。

    注意

    对于副本集,指定副本集配置中列出的 mongod 实例的主机名。

    mongodb://example1.com,example2.com,example3.com/?replicaSet=test&w=majority&wtimeoutMS=2000
    

    【讨论】:

      猜你喜欢
      • 2018-12-07
      • 2015-07-17
      • 2015-03-31
      • 2023-03-10
      • 2014-03-06
      • 2022-01-05
      • 2018-06-15
      • 2014-12-04
      相关资源
      最近更新 更多