Случайные ошибки подключения к MS SQL из приложения nodeJS

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

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

Сервер приложений: Linux Ubuntu 14.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 ответ

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

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

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

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

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

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

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

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

Другие вопросы по тегам