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

Pacemaker Active / Active балансировка нагрузки haproxy

Я использую Haproxy для балансировки нагрузки на реплицированные главные серверы mysql. Я также использую Heartbeat и Pacemaker для аварийного переключения Active / Active IP с двумя виртуальными IP-адресами на двух балансировщиках нагрузки для обеспечения высокой доступности веб-сервера. Я использовал местоположение в кардиостимуляторе, чтобы оставаться VIP-уровнями по одному на каждом балансировщике нагрузки, и я использую циклические DNS-домены, указывающие на VIP-адреса, для балансировки нагрузки балансировщиков нагрузки. Пока все выглядит нормально!

|LB1: | Круговая система -> | 1.2.3.4 | Кардиостимулятор | Haproxy | 192.168.1.1

          |           |           |             |         |

|LB2: | Круговая система -> | 5.6.7.8 | Кардиостимулятор | Haproxy | 192.168.1.2

crm configure show

node $id="394647e0-0a08-451f-a5bf-6c568854f8d1" lb1
node $id="9e95dc4f-8a9a-4727-af5a-40919ac902ba" lb2
primitive vip1 ocf:heartbeat:IPaddr2 \
    params ip="1.2.3.4" cidr_netmask="255.255.255.0" nic="eth0:0" \
    op monitor interval="40s" timeout="20s"
primitive vip2 ocf:heartbeat:IPaddr2 \
    params ip="5.6.7.8" cidr_netmask="255.255.255.0" nic="eth0:1" \
    op monitor interval="40s" timeout="20s"
location vip1_pref vip1 100: lb1
location vip2_pref vip2 100: lb2
property $id="cib-bootstrap-options" \
    dc-version="1.0.8-042548a451fce8400660f6031f4da6f0223dd5dd" \
    cluster-infrastructure="Heartbeat" \
    stonith-enabled="false" \
    no-quorum-policy="ignore" \
    expected-quorum-votes="1"

Как настроить Pacemaker так, чтобы в случае повреждения Haproxy на любом балансировщике нагрузки он по-прежнему работал либо с использованием haproxy на другом lb, либо с перемещением обоих vip на рабочий узел haproxy lb. Я НЕ хочу, чтобы активная / пассивная конфигурация, НО активная / активная, работала как haproxy на обоих фунтах, отвечающих на запросы mysql.

Можно ли делать с кардиостимулятором? Кто-нибудь знает?

Любая помощь приветствуется !. Спасибо!

Обновление 1

Это был хороший намек от @Arek B. с помощью clone. Я добавил строку ниже к конфигурации кардиостимулятора, но все еще не смог точно получить то, что действительно требуется. Я проверил остановку haproxy на обоих LB, и он автоматически запускается кардиостимулятором, но когда я проверил, что он постоянно останавливается (/etc/defaults/haproxy, enabled=0), haproxy не запустился, и в том случае, когда он не может запустить haproxy, мне нужен ресурс (ipaddr2), который нужно переместить на другой работающий haproxy lb. Еще есть подсказка?

primitive mysql_proxy lsb:haproxy \
        op monitor interval="10s"
clone clone_mysql_proxy mysql_proxy \
        meta clone-max="2" clone-node-max="1"
location mysql_proxy_pref1 clone_mysql_proxy 100: lb1
location mysql_proxy_pref2 clone_mysql_proxy 50: lb2

У меня активный-активный 2 * виртуальный кластер

Для конфигурации CRM:
Я использую два виртуальных IP-адреса как primitive Услуги IPaddr2
и для службы, которая должна работать на обоих узлах:

  1. создайте для него примитив, затем вы будете использовать его ID
  2. сделать "клон" из него, например:
    clone any_name_of_the_clone your_primitive_service_id \
    meta clone-max="2" clone-node-max="1"

Вы можете добавить order (чтобы запустить виртуальный IP-адрес после запуска клона - НЕ примитивный, после создания клона вы не должны использовать его дочерний идентификатор)

Работает, отработка отказа (назначение 2 IP на одном узле при выходе из строя другого).
Однако у меня проблема, как сделать colocation - Я имею в виду, что услуги запрещены: У меня не может быть virtIP на узле с ошибкой вспомогательной службы.
Это нормально, когда служба не работает - кластер запускает ее, но при запуске не удается (например, сломанная конфигурация для службы) - кластер отмечает ошибку, но выводит IP.

Кто-нибудь знает, в чем причина?
- Дело в плохом мониторинге / управлении пуском / остановом или в настройке ограничений?

РЕДАКТИРОВАТЬ:
Я добавил к Primitive опция 'op start': on-fail="standby". Теперь, когда моя служба (единственный примитив в клоне) не может запустить, узел теряет также virtIP
Кажется, теперь это решает мою проблему.