Я пытаюсь настроить PCS для HAProxy на CentOS7 в конфигурации активный / активный. Раньше я делал активный / активный, но я не знаком с ограничениями и группы зависимостей.
Пока все хорошо:
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-адрес обслуживался хостом:
pcs ограничение порядка haproxy-clone, затем VIPHA -clone
Проблема в том, что HAProxy никогда не запускается, потому что он не может привязаться к IP, пока он не будет запущен первым.
Как мне настроить это так, чтобы:
ПК переводили IP-адрес на хосте в автономный режим, если проверка работоспособности (т. Е. Запущенный процесс haproxy) завершалась неудачно?
ПК поднимали IP-адрес только при проверке работоспособности (т.е. процесс haproxy запущен) успешно?
Я ценю любой ввод. Спасибо!
Если вы не привязаны к кардиостимулятору / corosync, описанное вами поведение может быть достигнуто с помощью 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
Пояснения:
[ПО УМОЛЧАНИЮ
раздел - это глобальные настройки конфигурации:
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
: узел перезагружается. сбой
: сбой узла . [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 перезапуск, и если это не сработает, узел выходит из строя.
Надеюсь, это поможет.
Я слушаю подстановочный символ в haproxy.cfg
bind *:443
вместо
bind myvip:443
Таким образом, ресурс гапрокси может постоянно запускаться, независимо от того, имеет ли узел VIP ресурс или нет. Если узел получит VIP, то хапрокси немедленно ответит на него.
Очевидным побочным эффектом является то, что хапрокси прослушивает все свои IP адреса, а не только VIP.
Если номер порта конфликтует (например, мне нужен по-другому настроенный порт 443 на другом IP или VIP), я определяю его как bind *:9443
, а затем ставлю его за DNAT.