Случайные ошибки подключения к MS SQL из приложения nodeJS - PullRequest
0 голосов
/ 21 декабря 2018

У нас есть сервер AWS, на котором запущены некоторые службы nodeJS.Службы, подключающиеся к MS sql, случайным образом аварийно завершают работу с сообщением «Не удалось подключиться к серверу базы данных: 1433 - Не удалось подключиться (последовательность)».

Мы работаем на:

Сервер приложений: Linux Ubuntu14.4 AWS m5 NodeJS: 8.11.2 Сервисы используют пакет mssql последней версии (4.3.0).Это включает в себя утомительный 2.7.1.

сервер БД: Windows server 2012. sql server 2012

пропускная способность: около 300 об / мин, ошибка также возникает, когда пропускная способность ниже (около 20 об / мин).Приложение работает в кластере через PM2 (запускается 4 раза).Мы видим, что ошибка происходит на всех 4 одновременно, но иногда также на 1 или 2 экземплярах.

Что мы пробовали:

  • Обновление до альфа-версии mssql с утомительным 3.0.1.Не имеет значения
  • Обновление с машины Amazon M4 до машины M5 с расширенными сетевыми возможностями
  • Изменение настроек пула в приложении.Мы попытались установить мин соединения на 0 или низкое / высокое значение.Макс также до низкого / высокого значения, но безрезультатно.
  • Дублировать сервер на новую машину.
  • Установка idleTimeoutMillis равной 1 секунде
  • Пинг-сервер БД, чтобы увидеть, есть ли проблема с подключением, но мы не видим странных пингов при возникновении ошибки.

Соединение при запуске приложения:

    App.sqlConnection = new App.SQL.ConnectionPool(config, function(err) {
            if(err){
                    Log.error(err);
                    process.exit(1);
            }

    App.sqlConnection.on('error', err => {
        Log.error(`There was a connection err : ${err}`);

        process.exit(1);
            });
    });

запрос;

var request = new App.SQL.Request(App.sqlConnection);
request.query(sQuery, function(err,results)
{
});

Ошибки отлавливаются обработчиком «при ошибке».

Ошибка происходит случайно в разных сервисах.Некоторые имеют больше случаев ошибки, чем другие.У нас заканчиваются варианты.Любая идея, если мы можем увидеть более подробные ошибки?

1 Ответ

0 голосов
/ 21 декабря 2018

У меня есть пара предложений.

Во-первых, насколько вы уверены, что эти ошибки на самом деле являются проблемой?Если ваш код просто повторяет, а не завершает работу, стабильны ли соединения после этого, или соединение может разорваться в середине запроса?

(Соединения, сбрасываемые в середине запросов, явно не годятся, но случайные сбои при подключении , которое может быть исправлено при повторных попытках, является лучшим видом проблемы с ИМХО.)

Игнорируя потенциальное исправление в коде, мне интересно, когда вы говорите, что вы "дублированный сервер на новую машину "- вы запустили новый AMI с использованием последней версии Windows Server 2012, или вы создали образ и клонировали его?Если вашему серверу баз данных уже пару лет, вы можете использовать устаревшие сетевые драйверы в своем экземпляре, что может дать вам некоторые ошибки.

Если вы хотите изучить это, вы можетепопытаться восстановить весь сервер базы данных с нуля на недавно запущенном AMI.Кроме того, вы можете обновить драйвер PV, сетевой адаптер и EC2Config в существующем экземпляре. Инструкции можно найти по следующим ссылкам:

https://docs.aws.amazon.com/AWSEC2/latest/WindowsGuide/Upgrading_PV_drivers.html#aws-pv-upgrade

https://docs.aws.amazon.com/AWSEC2/latest/WindowsGuide/sriov-networking.html#enable-enhanced-networking

https://docs.aws.amazon.com/AWSEC2/latest/WindowsGuide/UsingConfig_Install.html

...