我使用node.js的mongodb本机驱动程序连接到3个节点(PRIMARY和2个SECONDARIES)的副本集,如下所述: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发生变化时,驱动程序足够聪明,可以重新连接。
答案 0 :(得分:2)
为了允许客户端根据需要在副本集成员之间切换,您需要告诉它存在这些备用副本集成员。为此,请提供以逗号分隔的所有副本集成员的URL。
var url = "mongodb://admin:pass@hostname1:27017,mongodb://admin:pass@hostname2:27017,mongodb://admin:pass@hostname3:27017,";
如果要从应用程序抽象副本集配置以获得更大的灵活性,可以构建分片群集并让应用程序连接到路由器。然后,路由器将负责将连接转发到适当的副本集成员