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

Как запустить клонирование ресурса после запуска определенного ресурса в Pacemaker?

У меня есть конфигурация master / master с 2 общедоступными IP-адресами (1.1.1.66, 1.1.1.70), которые используются совместно двумя узлами. Идея состоит в том, что у обоих узлов есть по одному общедоступному IP-адресу. И если один из узлов выйдет из строя, другой примет свой публичный IP-адрес и начнет обслуживать оба IP-адреса.

В конфигурации также есть клонированный ресурс шлюза (ocf: heartbeat: Route), который должен запускаться после общедоступных IP-адресов.

У меня такой проблемный сценарий:

  1. 1-й узел жив.
  2. 2-й узел мертв.
  3. К 1-му узлу прикреплены 2 публичных IP-адреса.
  4. 2-й узел возвращается.
  5. Клонированный шлюз (ocf: heartbeat: Route) пытается запуститься на 2-м узле, даже если общедоступный IP-адрес все еще активен на 1-м узле. Это приводит к неудаче.

Неудачные действия: default_gw_start_0 на haproxy-02 'неизвестная ошибка' (1): call = 32, status = complete, exitreason = 'default_gw Не удалось добавить сетевой маршрут: к 0.0.0.0/0 dev eth0 через 1.1.1.65', last- rc-change = 'Thu Dec 26 01:03:36 2019', queued = 0ms, exec = 38ms

Как я могу заставить второй узел ждать возврата общедоступного IP-адреса, прежде чем пытаться запустить клонированный ресурс Route?

Моя конфигурация:

pcs resource create ip_1 ocf:heartbeat:IPaddr2 ip=1.1.1.66 cidr_netmask=29 nic="eth0" op monitor interval=30s
pcs resource create ip_2 ocf:heartbeat:IPaddr2 ip=1.1.1.70 cidr_netmask=29 nic="eth0" op monitor interval=30s

pcs resource create default_gw ocf:heartbeat:Route destination="0.0.0.0/0" device="eth0" gateway="1.1.1.65" family=""
pcs resource clone default_gw globally-unique="true"

pcs constraint order ip_1 then default_gw-clone
pcs constraint order ip_2 then default_gw-clone

pcs constraint colocation add ip_1 ip_2 -1

** ОБНОВЛЕНИЕ: временное решение - избежать клонирования ресурса Route в целом и создать отдельные ресурсы Route (я назвал их default_gw_1 и default_gw_2) для каждого хоста: **

pcs resource delete default_gw
pcs resource create default_gw_1 ocf:heartbeat:Route destination="0.0.0.0/0" device="eth0" gateway="1.1.1.65" family="ip4" --force
pcs resource create default_gw_2 ocf:heartbeat:Route destination="0.0.0.0/0" device="eth0" gateway="1.1.1.65" family="ip4" --force

# start ips first, then start routes
pcs constraint order ip_1 then default_gw_1
pcs constraint order ip_2 then default_gw_2

# otherwise routes try to start on nodes without the ip attached (and fail)
pcs constraint colocation add default_gw_1 with ip_1 INFINITY 
pcs constraint colocation add default_gw_2 with ip_2 INFINITY 

# lock routes to start on their specific nodes only
pcs constraint location add gateway_1 default_gw_1 haproxy-01 INFINITY resource-discovery=exclusive
pcs constraint location add gateway_2 default_gw_2 haproxy-02 INFINITY resource-discovery=exclusive

# this will fight with stickiness 
pcs constraint location ip_1 prefers haproxy-01=50
pcs constraint location ip_2 prefers haproxy-02=50 
pcs resource defaults resource-stickiness=100