Имплантируемый кардиостимулятор: Как настроить шлюз по умолчанию для виртуального IP?

Вопрос или проблема

У меня есть три узла и три виртуальных IP-адреса в одной подсети. Не имеет значения, какой адрес назначен какому узлу. IP-адреса являются публичными адресами. Узлы являются балансировщиками нагрузки, которые распределяют веб-запросы по нескольким бекенд-системам.

Если все три узла работают, три адреса будут сбалансированы на трех узлах так, чтобы каждый узел имел ровно один адрес.

Если в сети только два узла, один узел будет иметь один адрес, а другой – два адреса.

Если в сети только один узел, он будет иметь все три адреса.

Это работает нормально с этой конфигурацией ресурсов:

primitive IP_10 ocf:heartbeat:IPaddr2 params ip="x.x.x.10" cidr_netmask="24" nic="eth1"
primitive IP_11 ocf:heartbeat:IPaddr2 params ip="x.x.x.11" cidr_netmask="24" nic="eth1"
primitive IP_12 ocf:heartbeat:IPaddr2 params ip="x.x.x.12" cidr_netmask="24" nic="eth1"

Однако у меня есть один шлюз по умолчанию (x.x.x.1), который необходимо настроить на каждом узле после назначения одного из IP-адресов. Очевидно, что невозможно настроить шлюз по умолчанию до назначения адреса.

Первое, что я попробовал, это создать второй ресурс для каждого адреса, ocf:heartbeat:Route:

primitive default_gw_1 ocf:heartbeat:Route params destination="default" device="eth1" gateway="x.x.x.1"
primitive default_gw_2 ocf:heartbeat:Route params destination="default" device="eth1" gateway="x.x.x.1"
primitive default_gw_3 ocf:heartbeat:Route params destination="default" device="eth1" gateway="x.x.x.1"

А затем объединить эти ресурсы в группы:

group net_10 IP_10 default_gw_1
group net_11 IP_11 default_gw_2
group net_12 IP_12 default_gw_3

Это работает, шлюз по умолчанию настраивается правильно после назначения адреса. В случае переключения на резервный узел все работает так, как и ожидалось. Этот пример демонстрирует возможное распределение ресурсов после того, как Node1 вышел из строя:

Node1: offline
Node2: net_10, net_11
Node3: net_12

Проблемы возникают, когда Node1 снова выходит на связь. Один из ресурсов на Node2, скажем, net_10, будет затем перемещен на Node1. Теперь менеджер ресурсов ocf:heartbeat:Route останавливается на Node2, удаляет шлюз по умолчанию и фактически прекращает доступ к Node2, так как у него больше нет шлюза по умолчанию. Таким образом, оставшийся адрес на Node2 (net_11) больше недоступен.

Я тогда попытался изменить менеджер ресурсов ocf:heartbeat:Route, чтобы отключить удаление маршрута. Это, похоже, работает, но выглядит очень неаккуратно.

Я полагаю, что должно быть лучшее решение для этого. Как я могу настроить систему так, чтобы шлюз по умолчанию оставался настроенным на узле до тех пор, пока как минимум один IP-адрес назначен этому узлу?

(Pacemaker 1.1.7 на Debian Wheezy)

Может быть, поздно, но на всякий случай, если кто-то другой может из этого извлечь пользу.

В этом случае вам следует создать только один шлюз, а затем клонировать его на всех ваших узлах. Пример ниже демонстрирует этот сценарий с использованием синтаксиса pcs.

pcs cluster setup --name MyCluster node1 node2 node3 --start

pcs cluster cib cluster_cfg

pcs -f cluster_cfg property set stonith-enabled="false"

pcs -f cluster_cfg resource create IP_10 ocf:heartbeat:IPaddr2 ip="x.x.x.10" cidr_netmask="24" nic="eth1"
pcs -f cluster_cfg resource create IP_20 ocf:heartbeat:IPaddr2 ip="x.x.x.11" cidr_netmask="24" nic="eth1"
pcs -f cluster_cfg resource create IP_30 ocf:heartbeat:IPaddr2 ip="x.x.x.12" cidr_netmask="24" nic="eth1"

pcs -f cluster_cfg resource create default_gw ocf:heartbeat:Route destination="default" device="eth1" gateway="x.x.x.1"
pcs -f cluster_cfg resource clone default_gw 

pcs -f cluster_cfg constraint order IP_10 then default_gw-clone
pcs -f cluster_cfg constraint order IP_20 then default_gw-clone
pcs -f cluster_cfg constraint order IP_30 then default_gw-clone

pcs -f cluster_cfg constraint colocation add IP_10 with IP_20 -1
pcs -f cluster_cfg constraint colocation add IP_10 with IP_30 -1
pcs -f cluster_cfg constraint colocation add IP_20 with IP_30 -1

pcs cluster cib-push cluster_cfg

Ответ или решение

Настройка маршрутизатора по умолчанию для виртуального IP в Pacemaker

Введение

В управлении высокодоступными системами важным компонентом является корректная настройка сети, особенно для виртуальных IP-адресов, которые должны быть доступны независимо от состояния узлов. В данной статье рассмотрим, как правильно настроить маршрутизатор по умолчанию для виртуальных IP в кластере Pacemaker с использованием трех узлов.

Исходные данные

У вас есть:

  • Три узла (Node1, Node2, Node3)
  • Три виртуальных IP (x.x.x.10, x.x.x.11, x.x.x.12) в одной подсети
  • Один маршрутизатор по умолчанию (x.x.x.1), который нужно настроить на каждом узле после назначения одного из виртуальных IP

Проблема

При использовании ресурса ocf:heartbeat:Route для каждого IP-адреса, возникла проблема: когда узел возвращается в сеть, удаление маршрута по умолчанию на узле, где его не было, приводит к потере доступа к этому узлу. Это связано с тем, что при остановке маршрута удаляется основной маршрут, необходимый для связи с остальными узлами.

Решение

Рекомендуется создать один общий ресурс маршрута и клонировать его на все узлы, чтобы избежать проблем с удалением маршрута. Это позволит сохранить маршрутизатор по умолчанию на узлах, когда хотя бы один виртуальный IP-адрес активен.

Пример настройки

Следующий пример демонстрирует настройку с использованием команды pcs:

pcs cluster setup --name MyCluster node1 node2 node3 --start

pcs cluster cib cluster_cfg

pcs -f cluster_cfg property set stonith-enabled="false"

pcs -f cluster_cfg resource create IP_10 ocf:heartbeat:IPaddr2 ip="x.x.x.10" cidr_netmask="24" nic="eth1"
pcs -f cluster_cfg resource create IP_20 ocf:heartbeat:IPaddr2 ip="x.x.x.11" cidr_netmask="24" nic="eth1"
pcs -f cluster_cfg resource create IP_30 ocf:heartbeat:IPaddr2 ip="x.x.x.12" cidr_netmask="24" nic="eth1"

pcs -f cluster_cfg resource create default_gw ocf:heartbeat:Route destination="default" device="eth1" gateway="x.x.x.1"
pcs -f cluster_cfg resource clone default_gw

pcs -f cluster_cfg constraint order IP_10 then default_gw-clone
pcs -f cluster_cfg constraint order IP_20 then default_gw-clone
pcs -f cluster_cfg constraint order IP_30 then default_gw-clone

pcs -f cluster_cfg constraint colocation add IP_10 with IP_20 -1
pcs -f cluster_cfg constraint colocation add IP_10 with IP_30 -1
pcs -f cluster_cfg constraint colocation add IP_20 with IP_30 -1

pcs cluster cib-push cluster_cfg

Объяснение настроек

  1. Создание ресурсов: Все три виртуальных IP адреса создаются как отдельно управляемые ресурсы.
  2. Общий маршрут по умолчанию: Создается один ресурс для маршрута по умолчанию, который затем клонируется на все узлы. Это предотвращает удаление маршрута для узлов, которые по-прежнему должны оставаться доступными.
  3. Упорядочивание и совместное размещение: Используются команды order и colocation, чтобы гарантировать, что маршрутизатор по умолчанию активируется сразу после назначения соответствующих IP-адресов. Это позволяет обеспечить доступ к сети до того, как ресурсы будут полностью активированы.

Заключение

Эта настройка обеспечивает стабильное восстановление и необходимость поддержания подключения к сети на каждом узле при изменении состояния виртуальных IP-адресов. Следуя рекомендациям, вы сможете избежать потери сетевого доступа к узлам, что критично для высокодоступных систем. Правильная настройка ресурсов в Pacemaker — ключ к построению надежной архитектуры для обеспечения непрерывности бизнес-процессов.

Оцените материал
Добавить комментарий

Капча загружается...