Время подключения к MongoS из приложения истекло - PullRequest
0 голосов
/ 19 октября 2018

Наши приложения nodejs подключаются к экземплярам mongos, и эти экземпляры подключаются к экземплярам mongod.

Случайно мы получаем тайм-ауты из нашего приложения со следующей ошибкой

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

Наши приложения имеют размер пула 20.

Эти тайм-ауты в основном являются скачками и существуют для 1-2 секунды, а затем нормальность обеспечена.

Тайм-ауты происходят только в одном экземпляре и не распространяются.Но они встречаются в разных случаях в разное время.

Как мне отладить эту проблему дальше?

В журналах экземпляров mongos нет сообщений, связанных с отключением

1 Ответ

0 голосов
/ 19 октября 2018

Часть вашего запроса занимает много времени.Вы можете избежать тайм-аута, передав параметры с 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');
    });
...