Похоже, что 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 позволит вам делать это и делать несправедливую балансировку нагрузки.
определение апстрима блоки позволяют вам устанавливать различные настройки вышестоящих серверов, на которые будут отправляться запросы.
Также есть настройка proxy_next_upstream что позволяет NGINX автоматически пробовать другой бэкэнд, если один из них возвращает неудовлетворительный результат.
Альтернативой предложению @James Little для socat вы также можете использовать hatop для подключения к HAProxy CLI для запуска disable (или любой другой команды):
Затем нажмите 5 (отображается как 5-CLI в строке меню внизу слева). Это предоставит вам приглашение, в котором вы можете вводить команды для HAProxy.