1

我在副本集中使用只有一个分片和 3 个成员的 Mongodb。我在不同的机器上拥有每个副本集成员。两个成员每个都有一个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,因为没有发出 mongooseerror事件connection,并且我的应用程序挂起,直到我重新启动节点服务器。

这里可能出了什么问题?

更新:

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

4

0 回答 0