Рейтинг:0

Что-то закрывает соединения на моих виртуальных машинах CentOS — как лучше всего устранить неполадки?

флаг cn

У меня есть установка с 3 виртуальными машинами (1 сервер приложений на CentOS6 и 2 сервера баз данных на CentOS7).Последние 1-2 недели у нас были проблемы с тайм-аутами при подключении к серверам баз данных (и между двумя серверами, которые находятся в кластере).

Поставщик базы данных (Couchbase) может видеть из журналов, что соединения принудительно закрываются:

ПРЕДУПРЕЖДЕНИЕ com.couchbase.endpoint - [com.couchbase.endpoint][UnexpectedEndpointDisconnectedEvent] Удаленная сторона неожиданно отключила конечную точку

Журналы также показывают, что пакеты удалены, например:

[предупреждение] Интерфейс âens32â (удален ip) сбои: RX: 2863 / TX: 0 - Детали:
- Пакеты RX: 308 593 167 ошибок: 0
выпало: 2863 переполнение: 0 кадр: 0

Виртуальные машины размещены на том же хосте, что и VMware ESXi (версия 6.5). Поэтому они должен иметь хорошие связи друг с другом.

И что изменилось за последние пару недель? Обновления безопасности для ОС ВМ и версии сервера баз данных (с 6.6.0 до 7.0.0). Обновление базы данных не должен изменить что-либо в сети, но, очевидно, это причина, по которой я сначала связался с поставщиком базы данных...

Любые идеи по поиску виновника высоко ценятся :-)

Редактировать:

Следуя предложению Кэмерона, я просто запустил короткую трассировку сети и загрузил ее в Wireshark на моем локальном компьютере. Потом я открыл "Экспертную информацию" и получил вот это: Wireshark - Экспертная информация Нужно сказать, что перед сервером приложений стоит прокси-сервер Nginx. Он обрабатывает SSL и «снимает его» перед тем, как попасть в приложение. сервер. Просто глядя на информацию, я ожидаю, что два «красных» блока будут связаны с запросами, поступающими извне, а не из приложения. сервера к серверам баз данных.

Но я не совсем уверен, что искать в результатах? - и я думаю, мне нужно дать ему поработать еще немного - но, возможно, без информации извне?

Редактировать 2

Когда я сидел и смотрел на это, проблема действительно возникла ... - поэтому я снова быстро запустил tcpdump. Таким образом, результаты могут не содержать основной причины, но должны быть более актуальными, чем первые: Wireshark - Экспертная информация (2) Блоки, которые я расширил, похоже, связаны с связью с одним из серверов баз данных.... :-)

Но что означают эти результаты и как мне приблизиться к поиску причины?

Cameron Kerr avatar
флаг id
Полное окно TCP указывает на то, что по какой-то причине что-то зависает и не читает доступный ввод. Пакеты Couchbase вызывают особую озабоченность; если вы нажмете на них, вы обнаружите, что пакет выбран в главном окне Wireshark. Щелкните правой кнопкой мыши и используйте функцию Follow TCP Stream, чтобы увидеть, что на самом деле было сказано. Я подозреваю, что вы имеете дело с несовместимостью версии клиента, или сервер теперь более чувствителен к некоторым типам запросов, таким как недопустимые символы в имени заголовка.
John Dalsgaard avatar
флаг cn
Спасибо @CameronKerr. Я не могу сказать, если что-то не так, как должно быть... но я отправил последний снимок инженеру в Couchbase. Посмотрим, что это значит для него :-)
Рейтинг:0
флаг id

Добро пожаловать в Server Fault.

Учитывая возраст; CentOS 6 сейчас не поддерживается, очень вероятно, что вы страдаете от несовместимости SSL/TLS; при условии, конечно, что вы подключаетесь через это. Мы, безусловно, испытали множество таких событий за время работы с RHEL6, поскольку SSL2 и т. д. постепенно отключались по умолчанию. Аналогично с различными точечными версиями Java (некоторые точечные выпуски в серии 1.7 были особенно капризными)

Другая возможная причина, связанная с тем, что вы используете рабочую нагрузку CentOS на ESXi, заключается в том, что вам может не хватать энтропии, что приводит к блокировке, которая может привести к тайм-аутам и проблемам с кластером, что приводит к прерыванию соединения. Где-то в пределах Java 8 Java была особенно восприимчива к этому. Вы можете судить, является ли это проблемой для вас, просматривая /proc/sys/kernel/random/entropy_avail с течением времени; если он доходит до 128 или около того и не приходит в норму, то у вас энтропийное голодание. Распространено на виртуальной машине, где нет активности клавиатуры и мыши; вы можете попробовать запустить демон сбора энтропии, если это так.

Кстати, из этих журналов я бы не сделал вывод, что что-то [еще] активно принудительно закрывает эти соединения; просто соединение закрылось в то время, когда одна из сторон этого не ожидала. Это может быть связано с такими вещами, как тайм-аут, исключения, сбой процесса и т. д. и т. д.

Вы говорите, что сервер базы данных был обновлен... это обновление ОС с CentOS 6? Приложение тоже было обновлено, или его подняли и сдвинули?

Ваше здоровье, Кэмерон

John Dalsgaard avatar
флаг cn
Спасибо за ответ Кэмерон! Я работаю без TLS «внутри», где серверы недоступны публично, так что это вряд ли проблема.entropy_avail на сервере CentOS6 составляет от 129 до 177 за последние 5-10 минут. На коробке CentOS7 это прибл. 3500. Обновился только софт БД (ням). Когда я в последний раз проверял, не было опции «обновить» для CentOS 6 -> 7, что в некоторой степени объясняет, почему app.server все еще находится на 6 ;-)
John Dalsgaard avatar
флаг cn
Под _"активным принудительным закрытием соединений"_ я имел в виду именно что-то "вокруг" приложения. Сервер базы данных (и SDK) не ожидал его закрытия. Я согласен, что это, скорее всего, может быть связано либо с тайм-аутами, либо с нехваткой ресурсов где-то .... Просто не знаю, где это найти!
Cameron Kerr avatar
флаг id
Я был бы обеспокоен тем, что ваша доступная «энтропия» (на самом деле это неправильное название) довольно подавлена. Я обычно запускаю свои серверы с аналогичными настройками со следующим: `echo 1024 > /proc/sys/kernel/random/read_wakeup_threshold` (по умолчанию 64). Я делал это в течение многих лет на RHEL5, 6, 7, 8 в производственных средах, в том числе на устройствах поставщиков, которые работают на VMware (это приятно, потому что это очень мало)
Cameron Kerr avatar
флаг id
Каков был скачок версии на стороне базы данных? Должна ли клиентская библиотека базы данных совпадать? (Я не знаком с Couchbase). Поскольку вы используете открытый текст, просматривая захват трафика (например, tcpdump -i eth0 -s0 -w /tmp/capture.pcap, а затем копируете завершенный захват на машину с помощью wireshark, вы можете найти полезные подсказки, используя Функции «Экспертная информация» и «Следовать за TCP-потоком».
John Dalsgaard avatar
флаг cn
База обновлена ​​с версии 6.6.0 до 7.0.0. Установленный SDK должен работать с обоими. Я также обновил SDK до последней версии, чтобы исключить эту проблему. Регистрация из SDK показывает, что, скорее всего, есть проблемы на базовом сетевом уровне. Я искал дополнительную информацию о `read_wakeup_threshold` и `энтропии` и нашел это: https://redhatlinux.guru/2016/04/03/increase-system-entropy-on-rhel-centos-6-and-7/ - предполагается, что `энтропия_доступность` должна быть в диапазоне 3-3.500. Так что, возможно, мне следует попытаться увеличить его в приложении. сервер?
John Dalsgaard avatar
флаг cn
Хммм... ничего не зная об "энтропии", я прочитал пару статей... кажется, это связано с криптографией (SSL) и рандомизацией.... Может ли это быть проблемой в моей ситуации, когда я не знаю? не использовать SSL? Но я вижу, что `entropy_avail` в моем приложении намного ниже 3000.сервер (128-190ish)
John Dalsgaard avatar
флаг cn
Особенно эта статья: https://www.2uo.de/myths-about-urandom/ - хотя я не собирался понимать все это, поскольку это указывает на SSL....
John Dalsgaard avatar
флаг cn
Я увеличил `read_wakeup_threshold`, как вы описали, как раз перед тем, как он снова сообщил о тайм-ауте (когда я взял второй tcpdump). Так что не `entropy_avail` сообщает в диапазоне около 2500-2600
John Dalsgaard avatar
флаг cn
Я только что узнал от хостеров, что они размещают эти серверы на 3 серверах ESXi. Таким образом, в какой-то момент серверы могли работать на разных хостах — я попросил их проверить, могут ли они это проверить. После изменений в `entropy_avail` (или по совпадению) серверы стали работать лучше. Я еще не получил ответа от инженера Couchbase.
John Dalsgaard avatar
флаг cn
Если они продолжат работать без сбоев, я рассмотрю возможность проведения новой трассировки на сервере приложений и двух серверах БД — просто чтобы увидеть, сохраняются ли предыдущие проблемы.

Ответить или комментировать

Большинство людей не понимают, что склонность к познанию нового открывает путь к обучению и улучшает межличностные связи. В исследованиях Элисон, например, хотя люди могли точно вспомнить, сколько вопросов было задано в их разговорах, они не чувствовали интуитивно связи между вопросами и симпатиями. В четырех исследованиях, в которых участники сами участвовали в разговорах или читали стенограммы чужих разговоров, люди, как правило, не осознавали, что задаваемый вопрос повлияет — или повлиял — на уровень дружбы между собеседниками.