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

CentOS 7: зависимость PCS Pacemaker Corosync Active / Active от HAProxy

Я пытаюсь настроить 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, если он не запущен первым.

Как бы это настроить так, чтобы:

  1. ПК переведут IP-адрес хоста в автономный режим, если проверка работоспособности (например, запущенный процесс haproxy) не удалась?

  2. ПК поднимут IP-адрес только в том случае, если проверка работоспособности (например, запущенный процесс haproxy) завершится успешно?

    • Если это невозможно, как описано выше, начните в то же время и ведите себя как №1

Я ценю любой вклад. Спасибо!

Я слушаю подстановочный знак в 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 перезапуск, и если это не сработает, узел выходит из строя.

Надеюсь это поможет.