gpt4 book ai didi

node.js - 副本集故障转移后无法自动重新连接到新的 PRIMARY,来自 Mongoose(MongoDB、NodeJS 驱动程序)

转载 作者:太空宇宙 更新时间:2023-11-03 22:36:18 27 4
gpt4 key购买 nike

我制作了一个简单的 NodeJS 应用程序,使用 Mongoose 作为 MongoDB 驱动程序。并连接到 mongodb 副本集。该应用程序工作正常,直到我关闭当前主 Node ,当主 Node 关闭时,副本集自动选举一个新的主 Node 。但是,之后 Node 应用程序似乎没有响应数据库查询。

代码:数据库连接

var options = { 
server: {
socketOptions: {
keepAlive: 1,
connectTimeoutMS:30000,
socketTimeoutMS:90000 }
},
replset: {
socketOptions: {
keepAlive: 1,
connectTimeoutMS : 30000 ,
socketTimeoutMS: 90000
},
rs_name: 'rs0'
} };

var uri = "mongodb://xxx.xxx.xxx.xxx:27017,xxx.xxx.xxx.xxx:27017,xxx.xxx.xxx.xxx:27017/rstest";

mongoose.connect(uri,options);

代码:数据库查询

  router.('/test',function(req,res){

var testmodel = new testModel('test') ;
testmodel.save(function (err, doc,numberAffected) {
if (err) {
console.log("ERROR: "+ err);
res.status = 404;
res.end;
}else{
console.log("Response sent ");
res.status = 200;
res.end;
}
});
});

遵循的步骤

  1. 在三个虚拟机中创建了 MongoDB 副本集。
  2. 使用上述测试 API 创建了一个简单的 NodeJS 应用程序(Express + Mongoose)
  3. 从本地系统以一定时间间隔向应用连续发送 GET 请求以进行“测试”。
  4. 关闭了 PRIMARY 实例
  5. 控制台将记录“错误:错误:连接已关闭”
  6. 应用程序已停止响应请求

版本: “ express ”:“4.10.6”, “mongodb”:“1.4.23”, “ Mongoose ”:“3.8.21”,

我为调试此问题所做的示例应用程序可在 https://melvingeorge@bitbucket.org/melvingeorge/nodejsmongorssample.git 上找到。

我不确定这是否是一个错误或我的配置错误。如何解决这个问题?

最佳答案

写操作仅在主实例上进行。副本集需要一些时间来选择新的主服务器。

来自 http://docs.mongodb.org/manual/faq/replica-sets/

How long does replica set failover take?

It varies, but a replica set will select a new primary within a minute.

It may take 10-30 seconds for the members of a replica set to declare a primary inaccessible. This triggers an election. During the election, the cluster is unavailable for writes.

The election itself may take another 10-30 seconds.

使用读取操作检查代码(查找/计数)

只要没有主实例,就无法进行写操作

关于node.js - 副本集故障转移后无法自动重新连接到新的 PRIMARY,来自 Mongoose(MongoDB、NodeJS 驱动程序),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28028034/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com