【问题标题】:MongoDB replica set write with node.js使用 node.js 写入 MongoDB 副本集
【发布时间】:2015-09-18 07:14:17
【问题描述】:

我使用 node.js 的 mongodb 本机驱动程序连接到 3 个节点(主节点和两个辅助节点)的副本集,如下所述:http://mongodb.github.io/node-mongodb-native/2.0/api/MongoClient.html

 var MongoClient = require("mongodb").MongoClient;     

 var url = "mongodb://admin:pass@hostname:27017";
 var options = {
  db: {
    readPreference: 'primaryPreferred',
    slaveOk: true
  },
  replSet: {
    replicaSet: 'rs0'
  },
  server: {
    w: 1,
    autoReconnect: true
  };

 MongoClient.connect(url, options);

请注意,slaveOk: true 没有记录在案,没有它我不断收到 slaveOk 是错误的错误。 我不断收到Potentially unhandled rejection [83] MongoError: not master 的写信。 您能帮忙从节点应用程序连接到副本集吗?也许我应该为连接指定所有服务器?但是文档中说驱动程序足够聪明,可以在 PRIMARY 更改时重新连接。

【问题讨论】:

    标签: javascript node.js mongodb node-mongodb-native


    【解决方案1】:

    为了允许客户端根据需要在副本集成员之间切换,您需要告诉它这些替代副本集成员存在。为此,请提供以逗号分隔的所有副本集成员的 URL。

    var url = "mongodb://admin:pass@hostname1:27017,mongodb://admin:pass@hostname2:27017,mongodb://admin:pass@hostname3:27017,";
    

    当您想从应用程序中抽象出副本集配置以获得更大的灵活性时,您可以构建一个分片集群并让应用程序连接到路由器。然后,路由器将负责将连接转发给适当的副本集成员

    【讨论】:

    • 谢谢 Philipp,它使用这样的字符串:mongodb://admin:pass@host_one:27017,host_two:27017,host_three:27017/dbName 你能编辑你的答案吗 Mongo docs 肯定错过了一些例子 :(
    • @Philip 这很奇怪。对于所有其他驱动程序,我知道应该足以说明我们正在连接字符串中使用适当的选项(replSet=replSetName)连接到副本集,并且驱动程序将发现其他replicaset成员。驱动程序隐含地假设您正在连接到一个副本集,以防给出更多的 URL,iirc。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-07-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-08-23
    • 1970-01-01
    相关资源
    最近更新 更多