MongoS连接从应用程序超时

时间:2018-10-19 04:09:26

标签: node.js mongodb connection-timeout

我们的nodejs应用程序连接到mongos实例,而这些实例连接到mongod实例。

我们随机从应用程序中获取超时,并显示以下错误

connection 10 to <IP of mongos>:27017 timed out

我们的应用程序的池大小为20。

这些超时主要是峰值,并且存在1-2秒,然后确保正常。

超时仅在单个实例上发生,并且不会扩展。但是它们发生在不同时间的不同实例上。

如何进一步调试此问题?

mongos实例上的日志没有任何与断开连接有关的消息

1 个答案:

答案 0 :(得分:0)

您的某些查询需要很长时间。您可以通过使用connectTimeoutMS,reconnectTries传递选项来避免超时

    var uri = 'mongodb://USENAME:PASSWORD@host1:port1,host2:port2/database?authSource=admin';

    var options = {};
    options.server = {
      auto_reconnect: true,
      poolSize: 5,
      socketOptions: { keepAlive: 1, connectTimeoutMS: 30000 },
      reconnectTries: 3000
    };

    options.replset = {  //For Replica set
      auto_reconnect: true,
      poolSize: 5,
      socketOptions: { keepAlive: 1, connectTimeoutMS: 30000 },
      reconnectTries: 3000
    };

    var db = mongoose.createConnection(uri, options);
   mongoose.connection.on('error', function(err) {
      console.log('MONGODB ERROR MONGOOSE LEVEL ' + server, err);
    });

    db.on('connecting', function() {
      console.info('MONGODB ' + server + ' connecting.');
    });

    db.on('error', function(err) {
      console.log('MONGODB ERROR ' + server, err);
    });

    db.on('close', function(err) {
      console.log('MONGODB CLOSE ' + server, err);
    });

    db.on('connected', function() {
      console.log('MONGODB ' + server + ' connected successfully.');
    });

    db.once('open', function callback() {
      console.log('MONGODB ' + server + ' opened successfully.');
    });

    db.on('reconnected', function() {
      console.log('MONGODB ' + server + ' reconnected.');
    });

    db.on('timeout', function() {
      console.log('MONGODB ' + server + ' timeout.');
    });

    db.on('disconnected', function() {
      console.log('MONGODB ' + server + ' disconnected');
    });