我使用以下命令启动副本集:
./mongod --auth --keyFile /home/a/keyfile --replSet mydb --logpath rs1/logs.log --logappend --dbpath rs1/ --port 26381 --bind_ip 0.0.0.0 &
./mongod --auth --keyFile /home/a/keyfile --replSet mydb --logpath rs2/logs.log --logappend --dbpath rs2/ --port 26382 --bind_ip 0.0.0.0 &
./mongod --auth --keyFile /home/a/keyfile --replSet mydb --logpath rs3/logs.log --logappend --dbpath rs3/ --port 26383 --bind_ip 0.0.0.0 &
然后用这段代码将nodejs应用程序连接到mongo:
const url = "mongodb://"+credentials+ip1+":"+port1+","+ip2+":"+port2+","+ip3+":"+port3+"/"+dbName+"?replicaSet="+replicaSetName+"&w=2&readPreference=secondary&slaveOk=true";
MongoClient.connect(url, { useNewUrlParser: true }, function(err, client) {
console.log("SOMETIMES UNREACHABLE CODE");
assert.equal(null, err);
assert.ok(client != null);
client.db(dbName).collection('users').find({}).toArray(function(err, result) {
console.log(err, result);
client.close();
});
});
有时它可以工作,有时甚至在我完全重新启动副本集后也无法工作。我认为这是因为我经常出于测试目的而重新启动我的应用程序,但是经过几次身份验证尝试后,我没有发现任何有关阻止数据库的信息。此外,它每次都可与mongo客户一起使用。
如果使用防火墙保护数据库,添加身份验证真的有用吗?