Существует ли способ добавить больше сервера бэкэнда к haproxy, не перезапуская haproxy?

Можно использовать .tel для этого

17
задан 31 July 2010 в 18:36
3 ответа

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

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

haproxy_reload()
{
    $HAPROXY -f "$CONFIG" -p $PIDFILE -D $EXTRAOPTS -sf $(cat $PIDFILE) \
        || return 2
    return 0
}
15
ответ дан 2 December 2019 в 20:31

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

> 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)
6
ответ дан 2 December 2019 в 20:31

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

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

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

1
ответ дан 2 December 2019 в 20:31

Теги

Похожие вопросы