Node.js 使用分片和复制Mongodb设置进行自动故障切换时出现问题

Node.js 使用分片和复制Mongodb设置进行自动故障切换时出现问题,node.js,mongodb,amazon-web-services,mongoose,failover,Node.js,Mongodb,Amazon Web Services,Mongoose,Failover,我使用的Mongodb副本集中只有一个碎片和3个成员。我在不同的机器上拥有每个副本集成员。两个成员各有一个mongos路由器,一个成员(有路由器)有一个config服务器,三个成员都有一个shard服务器。我有一个主机名,它解析为每个具有mongos路由器的mongodb实例的两个ip地址。我使用mongoose v.2.5.10从node.js应用程序连接到mongodb,代码如下: var mongoose = require('mongoose'); mongoose.connection

我使用的Mongodb副本集中只有一个碎片和3个成员。我在不同的机器上拥有每个副本集成员。两个成员各有一个
mongos
路由器,一个成员(有路由器)有一个
config
服务器,三个成员都有一个shard服务器。我有一个主机名,它解析为每个具有
mongos
路由器的mongodb实例的两个ip地址。我使用mongoose v.2.5.10从node.js应用程序连接到mongodb,代码如下:

var mongoose = require('mongoose');
mongoose.connection.on('error', function(err){
  console.error('Mongodb connection error: ', err);
});
var db = mongoose.connect('mongodb://username:password@' + mongoHost + '/database');
我通过终止一个具有
mongos
路由器的mongodb实例来模拟故障切换场景中会发生的情况,当这种情况发生时,我检测到该实例已关闭,并从DNS记录中删除该实例的ip地址。但是,我的应用程序似乎没有正确地重新连接到mongodb,因为没有发出mongoose
连接的
错误
事件,并且我的应用程序挂起,直到我重新启动节点服务器

这里可能出了什么问题

更新:


我刚刚确认,mongodb node.js客户端用于连接的
net
客户端(
this.connection=net.createConnection(this.socketOptions.port,this.socketOptions.host);
)在我手动终止Amazon实例时没有收到
关闭
错误
事件。所以这似乎是一个内部节点问题…

看看我的问题是否对你有帮助:啊,还有,更新你的mongoose版本,它现在在v3.6.x上:D@gustavohenke是的,虽然当我更新mongoose时,我发现一个错误,我现在不想调试HahayYou应该运行任何带有三个配置服务器的分片集群-看起来您只有一个…为什么不给您的应用程序多个mongos地址(对于每个mongos)-然后,如果与它对话的mongos消失,它将故障切换到下一个可用的mongos-您需要使用相对较新的驱动程序版本才能使用该功能。