Я пытаюсь настроить PCS для HAProxy на CentOS7 в активной / активной конфигурации. Раньше я делал active / active, но я не знаком с ограничениями и группами зависимостей.
Все идет нормально:
2 nodes configured
4 resources configured
Online: [ HOST1 HOST2 ]
Full list of resources:
Clone Set: VIPHA-clone [VIPHA] (unique)
VIPHA:0 (ocf::heartbeat:IPaddr2): Started HOST2
VIPHA:1 (ocf::heartbeat:IPaddr2): Started HOST1
Clone Set: haproxy-clone [haproxy]
Started: [ HOST2 HOST1 ]
Однако теперь я хотел бы добавить ограничение, что HAPRoxy должен быть запущен, чтобы IP-адрес обслуживался хостом:
ПК ограничивает порядок гапрокси-клон, затем VIPHA-клон
Проблема в том, что HAProxy никогда не запускается, потому что он не может привязаться к IP, если он не запущен первым.
Как бы это настроить так, чтобы:
ПК переведут IP-адрес хоста в автономный режим, если проверка работоспособности (например, запущенный процесс haproxy) не удалась?
ПК поднимут IP-адрес только в том случае, если проверка работоспособности (например, запущенный процесс haproxy) завершится успешно?
Я ценю любой вклад. Спасибо!
Я слушаю подстановочный знак в haproxy.cfg
bind *:443
вместо того
bind myvip:443
Таким образом, ресурс haproxy может работать постоянно, независимо от того, есть ли у узла ресурс VIP или нет. Если узел получит VIP, haproxy немедленно ответит на него.
Очевидным побочным эффектом является то, что haproxy прослушивает все свои IP-адреса, а не только VIP.
Если номер порта конфликтует (например, мне нужен порт 443 с другой конфигурацией на другом IP или VIP), я определяю его как bind *:9443
а затем поместите его за DNAT.
Если вы не привязаны к кардиостимулятору / коросинхронизации, описанное вами поведение может быть достигнуто с помощью opensvc
, используя файл конфигурации службы ниже:
[DEFAULT]
id = 84327b87-13f6-4d32-b90a-a7fad87a8d92
nodes = server1 server2
flex_min_nodes = 2
topology = flex
orchestrate = ha
monitor_action = freezestop
[ip#vip]
ipname@server1 = 192.168.100.240
ipname@server2 = 192.168.100.241
ipdev = br0
monitor = true
[app#haproxy]
type = simple
start = /sbin/haproxy -f /etc/haproxy/haproxy.cfg
restart = 1
monitor = true
Пояснения:
[DEFAULT
Раздел - это глобальные настройки конфигурации:
id = ....
уникальный идентификатор сервиса, автоматически генерируемый при создании сервиса (svcmgr -s myservice create
, а потом svcmgr -s myservice edit config
)
nodes = server1 server2
означает, что мы запускаем 2 узла opensvc
кластер
flex_min_nodes = 2
скажите, что мы ожидаем, что служба запустится как минимум 2 раза. В этом кластере из 2 узлов у нас будет по 1 экземпляру на узел.
topology = flex
укажите, что мы используем активную / активную топологию службы
orchestrate = ha
сообщает, что сервис должен автоматически управляться opensvc
демон
monitor_action = freezestop
используется для принудительного поведения при выходе из строя критического ресурса (например, сбой или уничтожение процесса haproxy). Если это произойдет, opensvc
демон должен принять решение. 3 возможных параметра:
freezestop
: экземпляр локальной службы остановлен и переведен в замороженное состояние.reboot
: узел перезагружается.crash
: узел разбился.[ip#vip]
: используется для объявления vip услуги:
server1
IP 192.168.100.240
будет настроен на интерфейсе br0
при запуске службыserver2
IP 192.168.100.241
будет настроен на интерфейсе br0
при запуске службыmonitor = true
говорит opensvc
агенту, что этот ресурс критичен (если он выходит из строя, запускайте службу monitor_action
)[app#haproxy]
: описывает материал приложения:
type = simple
указать, что служба управляет одним приложением процесса (не разветвляющий демон)start = /sbin/haproxy -f /etc/haproxy/haproxy.cfg
это команда для запуска при запуске службыrestart = 1
говорит opensvc
демон, чтобы попытаться перезапустить 1
время этого ресурса, если он выходит из строя.monitor = true
haproxy - важный ресурс. Если он выходит из строя, попробуйте перезапустить 1 раз из-за предыдущего параметра, и если он не удастся, то активируйте monitor_action
Поскольку сервис полагается на vip, вы не обязаны привязывать *: 443, а только vip сервиса.
По поводу вашего вопроса о перезагрузке / stonith, если haproxy выйдет из строя, просто поставьте restart = 1
в [app#haproxy]
чтобы попробовать перезапуск, а также monitor_action = crash
в DEFAULT
раздел. Таким образом, выполняется 1 перезапуск, и если это не сработает, узел выходит из строя.
Надеюсь это поможет.