Я использую 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.
Можно ли делать с кардиостимулятором? Кто-нибудь знает?
Любая помощь приветствуется !. Спасибо!
Это был хороший намек от @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
и для службы, которая должна работать на обоих узлах:
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
Кажется, теперь это решает мою проблему.