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

17

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

Ян Дейнхард
источник

Ответы:

15

Я не тестировал этот конкретный вариант использования, но 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

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

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

Haproxy теперь поддерживает понятие pidfile. Если после аргумента командной строки '-p' или глобальной опции 'pidfile' будет указано имя файла, этот файл будет удален, а затем заполнен всеми дочерними pids, по одному на строку (только в режиме демона). Этот файл НЕ находится внутри 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)
Янне Пиккарайнен
источник
1

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

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

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

Майк Маунтракис
источник