Назад | Перейти на главную страницу

Есть ли балансировщик нагрузки, который позволит мне вручную отключить сервер при развертывании?

Похоже, что HAProxy этого не позволяет. У нас есть серверы Tomcat на бэкэнде, и мы планируем использовать Apache + mod_jk для балансировки нагрузки. Мы рассматриваем возможность перехода на что-то более полнофункциональное, например Netscaler, но меня не продают, поскольку часть того, что я ищу, - это возможность беспрепятственного развертывания, при котором я мог бы удалить один из серверов Tomcat из балансировщика нагрузки раньше. перезагружая его.

HAProxy позволяет сделать это, передав команду в сокет статистики для отключения сервера. Это истощит соединения (существующие соединения с этим сервером сохранятся, но нет новый к нему будут сделаны подключения).

На этой странице приведен хороший обзор доступных команд: http://code.google.com/p/haproxy-docs/wiki/UnixSocketCommands

и пример отключения:

echo "disable server <backend_name>/<server_name>" | socat stdio /var/run/haproxy.stat

где /var/run/haproxy.stat - это сокет домена UNIX для команд, который настроен в файле конфигурации haproxy следующим образом:

global
    stats socket /var/run/haproxy.stat mode 600 level admin

наряду с любыми другими глобальными опциями.

Не ты не иметь для связи с сокетом через socat вы можете подключиться к нему, как к любому другому сокету домена UNIX, что довольно просто в Python, Perl, PHP, C и т. д. socat в основном используется в примерах для удобства.

Apache может это сделать, если вы используете mod_proxy вместо того mod_jk; mod_proxy_balancer может интегрироваться с mod_status для страницы беспорядка с узлами-балансировщиками. Видеть Вот.

Я использую LVS (www.linuxvirtualserver.org), который позволяет в любой момент изменить вес сервера или убрать его из ротации. Очень удобно, когда мне нужно установить обновления на веб-серверы.

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

NGINX позволит вам делать это и делать несправедливую балансировку нагрузки.

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

  • Этот сервер не работает
  • Этот сервер предназначен только для резервного копирования, не используйте, если какие-либо другие серверы работают.
  • прекратите использовать этот сервер, если он выходит из строя более X раз
  • как часто повторно тестировать восходящий поток, чтобы увидеть, есть ли он резервный
  • взвешивание каждого сервера, позволяющее направлять трафик туда, где есть ваши возможности.
  • используйте ip_hash, что сделает клиентов «привязанными» к бэкэнду, пока он активен. Один и тот же клиент всегда будет обращаться к одному и тому же бэкэнду, это требуется для некоторых приложений, которые имеют постоянные данные сеанса, которые не реплицируются в другие восходящие потоки.

Также есть настройка proxy_next_upstream что позволяет NGINX автоматически пробовать другой бэкэнд, если один из них возвращает неудовлетворительный результат.

Альтернативой предложению @James Little для socat вы также можете использовать hatop для подключения к HAProxy CLI для запуска disable (или любой другой команды):

hatop -s /var/run/haproxy.stat

Затем нажмите 5 (отображается как 5-CLI в строке меню внизу слева). Это предоставит вам приглашение, в котором вы можете вводить команды для HAProxy.