MongoS连接因应用程序而超时

问题描述 投票:0回答:1

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

随机我们从应用程序中获得超时,并出现以下错误

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

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

这些超时大多是尖峰并存在1-2秒,然后确保正常。

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

如何进一步调试此问题?

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

node.js mongodb connection-timeout
1个回答
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');
    });
© www.soinside.com 2019 - 2024. All rights reserved.