
[英]Node.js native mongodb losing connection with replica set when primary goes down
[英]MongoDB NodeJS client connection to Replica Set won't reconnect when the primary goes down
MongoClient.connect('mongodb://mongo1,mongo2,mongo3?replicaSet=rs', {
useUnifiedTopology: true,
}, (err, mongoClient) => {
setTimeout(() => {
mongoClient.db("mydb").collection('mycollection').insertOne({...})
}, 10000)
})
当主节点宕机和使用 UnifiedTopology 时,MongoClient 是否应该重新连接到副本集中的另一个 mongo 实例? 因为在这个例子中mongoClient仍然指向旧的主实例。 这是预期的行为吗?
编辑
尝试像这样使用**mongoose**
:
if(config.db.indexOf('replicaSet') > - 1) {
dbOptions = {
db: {native_parser: true},
replset: {
auto_reconnect:false,
poolSize: 10,
socketOptions: {
keepAlive: 1000,
connectTimeoutMS: 30000
}
},
server: {
poolSize: 5,
socketOptions: {
keepAlive: 1000,
connectTimeoutMS: 30000
}
}
};
}
var db = mongoose.connect(config.db, dbOptions);
在哪里
config.db = 'mongodb://USER:PW@host1:port1,host2:port2/DBNAME?replicaSet=RSNAME'
详细说明:
仅当连接 URI 包含单个非集群连接(也称为单个连接字符串)时,才会调用“服务器”块。
只有当连接 URL 包含逗号分隔的连接字符串列表(也称为复制集)时,才会调用“replset”块。
var options = {
db: {
native_parser: true
},
// This block gets run for a non replica set connection string (eg. localhost with a single DB)
server: {
poolSize: 5,
reconnectTries: Number.MAX_VALUE,
ssl: false,
sslValidate: false,
socketOptions: {
keepAlive: 1000,
connectTimeoutMS: 30000
}
},
// This block gets run when the connection string indicates a replica set (comma seperated connections)
replset: {
auto_reconnect: false,
poolSize: 10,
connectWithNoPrimary: true,
ssl: true,
sslValidate: false,
socketOptions: {
keepAlive: 1000,
connectTimeoutMS: 30000
}
}
};
此块适用于 localhost 和生产环境。
根据 Mongo 3.4 文档:在 3.4 中:
mongo "mongodb://host1,host2,host3/myDB?replicaSet=myRS"
或者
mongo "mongodb://host1:27017,host2:27017,host3:27017/myDB?replicaSet=myRS"
结果发现实际问题是一个错误的配置第三个节点的优先级为 0 并且投票为 0 而不是 1
{
"_id" : 2,
"host" : "mongo3:27017",
"arbiterOnly" : false,
"buildIndexes" : true,
"hidden" : false,
"priority" : 0,
"tags" : {
},
"slaveDelay" : NumberLong(0),
"votes" : 0
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.