Последовательные развертывания с Tomcats за экземпляром HAProxy

Последовательные развертывания с Tomcats за экземпляром HAProxy

У меня есть три экземпляра Tomcat, запущенных за HAProxy. Когда я выкатываю изменения в свои веб-приложения, я хотел бы сделать скользящее развертывание (т. е. отбрасывать по одному Tomcat за раз), чтобы пользователи не видели простоев.

Как это сделать? Я вижу, что работающий экземпляр haproxy может быть перенастроен на горячем уровне (что удобно для добавления или удаления новых серверов пула), но как HAProxy реагирует, когда один из его целевых серверов временно отключен?

Если есть решение лучше, чем HAProxy, я бы его тоже рассмотрел.

Спасибо!

решение1

Я отправил электронное письмо Вилли Тарро и получил в ответ следующие варианты:

  1. Вы можете использовать горячую реконфигурацию или команды socat для сервера статистики, чтобы установить вес вашего целевого сервера на 0. Это предотвратит балансировку новых сеансов на этом сервере, но не повлияет на существующие соединения.

  2. Вы можете установить опцию http-check disable-on-404 в сочетании с "option httpcheck /myurl", а затем заставить ваши целевые серверы отвечать на /myurl таким образом, чтобы они отправляли статус 200, если все в порядке, 404, если сервер должен прекратить получать новые запросы, и 500, если сервер не должен ничего получать (т. е. когда вы готовы отклонить сервер). HAProxy будет повторно проверять сервер с интервалом, указанным в вашей строке сервера.

решение2

Поскольку HAProxy не поддерживает удаление без перенастройки согласно @Эрнест Мюллерв егоотвечать, я предоставлю вам альтернативу, поскольку вы запросили и другие сценарии.

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

С помощью LVS вы можете использовать ipvsadmдля ручного добавления и удаления серверов. Примером удаления является следующая команда:

/sbin/ipvsadm -e -t VIP:443 -r SERVERIP:443 -g -w WEIGHT

В отличие от ручного добавления и удаления посредством взаимодействия с LVS, я часто предпочитаю использовать опцию requestсldirectord. ldirector — это демон, который опрашивает и управляет вашей конфигурацией ipvs. Вы можете указать файл с путем URI, используя этот параметр. Во время развертывания вы удаляете файл и ждете, пока сервер не перестанет быть доступным. В этот момент вы можете развернуть код, не влияя на производственные клиенты.

решение3

Многое из этого зависит от того, делаете ли вы какое-либо управление сеансом/состоянием на Tomcats. Если сеанс пользователя уничтожен перезапуском, то откат не предотвращает влияние на пользователя (он может помешать им увидеть 500, но не от необходимости начинать сеанс заново). Если вы не используете закрепленные сеансы, то вам, вероятно, не нужно об этом беспокоиться.

HAproxy и другие балансировщики нагрузки имеют способы попытаться довольно быстро определить, находится ли сервер за ним в рабочем состоянии или нет, и перенаправить трафик на основе этого («проверка работоспособности» в HAProxy). Однако они не могут сделать это идеально. С Tomcat нет просто «в рабочем состоянии» и «в рабочем состоянии»; есть «в рабочем состоянии, как при ответе на порт, но пока все не готово». Поэтому не стоит полагаться на LB, чтобы полностью предотвратить воздействие на пользователя — даже при хорошей проверке работоспособности будет интервал, когда вы будете направлять трафик на плохой узел.

Что мы делаем с скользящим развертыванием, так это активно выводим сервер из балансировщика нагрузки, затем возимся с/перезапускаем узел, ждем, пока он пройдет автоматизированный тест/мониторинг, затем возвращаем его обратно, затем переходим к следующему серверу. Это проще с балансировщиком нагрузки, у которого есть API, который вы можете вызывать удаленно (например, из скрипта), чтобы отключить сервер — наш старый Netscaler делал это, но HAProxy — нет. С HAProxy вам нужно либо отредактировать конфигурацию и перезапустить (печально), либо изменить проверку работоспособности так, чтобы вы могли ею управлять — например, может быть, он проверяет волшебный файл, который вы переименовываете, когда хотите, чтобы он пропустил этот узел. Вам нужно дождаться, пока сработает проверка работоспособности и узел выйдет из кластера, но затем все должно быть в порядке.

Я перебежалэта почтау которого есть решение этой проблемы, связанное с iptables...

Связанный контент