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

Есть ли способ добавить дополнительный сервер к haproxy без перезапуска haproxy?

Мы хотим иметь возможность добавлять больше внутренних серверов по запросу. Прямо сейчас я не вижу способа добавить дополнительные серверы в конфигурационный файл без перезапуска haproxy.

Я не тестировал этот конкретный вариант использования, но haproxy поддерживает «горячую перезагрузку»:

2.4.1) Hot reconfiguration
--------------------------
The '-st' and '-sf' command line options are used to inform previously running
processes that a configuration is being reloaded. They will receive the SIGTTOU
signal to ask them to temporarily stop listening to the ports so that the new
process can grab them. If anything wrong happens, the new process will send
them a SIGTTIN to tell them to re-listen to the ports and continue their normal
work. Otherwise, it will either ask them to finish (-sf) their work then softly
exit, or immediately terminate (-st), breaking existing sessions. A typical use
of this allows a configuration reload without service interruption :

 # haproxy -p /var/run/haproxy.pid -sf $(cat /var/run/haproxy.pid)

Если у вас есть сценарий инициализации для запуска и остановки haproxy, он, вероятно, поддерживает reload аргумент с функцией вроде:

haproxy_reload()
{
    $HAPROXY -f "$CONFIG" -p $PIDFILE -D $EXTRAOPTS -sf $(cat $PIDFILE) \
        || return 2
    return 0
}

Из руководства:

> 1.6) Помощь в управлении процессами

Haproxy теперь поддерживает понятие pidfile. Если за аргументом командной строки '-p' или глобальной опцией 'pidfile' следует имя файла, этот файл будет удален, а затем заполнен всеми дочерними идентификаторами pid, по одному на строку (только в режиме демона). Этот файл НЕ находится в chroot, что позволяет работать с chroot только для чтения. Он будет принадлежать пользователю, запускающему процесс, и будет иметь разрешения 0644.

Пример :

global
    daemon
    quiet
    nbproc  2
    pidfile /var/run/haproxy-private.pid

# to stop only those processes among others :
# kill $(</var/run/haproxy-private.pid)

# to reload a new configuration with minimal service impact and without
# breaking existing sessions :
# haproxy -f haproxy.cfg -p /var/run/haproxy-private.pid -sf $(</var/run/haproxy-private.pid)

Также, в зависимости от вашей версии HA-прокси, вы можете захотеть рассмотреть динамический API HA-Proxy, как описано haproxy.com на этой странице: https://www.haproxy.com/blog/dynamic-scaling-for-microservices-with-runtime-api/

HA-Proxy Dynamic API поставляется с версией Enterprise.

Вам следует рассмотреть динамический API HA-Proxy, если вы хотите добавлять / удалять серверы на лету как обычную практику или если ваш проект предполагает такой вариант использования.