我在Mongodb中只使用一个碎片和一个副本集中的3个成员。我在不同的机器上有每个副本集成员。两个成员各有一个mongos
路由器,一个成员(有一个路由器)有一个config
服务器,所有三个都有一个分片服务器。我有一个主机名解析为每个具有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 error
的{{1}}事件,并且我的应用程序挂起,直到我重新启动节点服务器。
这里可能出现什么问题?
更新
我刚刚确认mongodb node.js客户端用于连接的connection
客户端(net
)未收到this.connection = net.createConnection(this.socketOptions.port, this.socketOptions.host);
或close
事件当我手动终止亚马逊实例时。所以这似乎可能是内部节点问题......