Получить IP-адрес узла, на котором запущен определенный ресурс, при переходе от главных узлов к подчиненным

Настроить

Я настраиваю кластер высокой доступности для веб-приложения с 2 узлами (2 физических сервера):

  • узел1 (текущий master узел)
  • узел2 (текущий slave узел)

Используя Corosync & Pacemaker, я смог создать кластер и некоторые агенты ресурсов, включая аварийное переключение IP-адресов и веб-сервер (apache).

Ресурсы

  • Failover ресурс существует только на одном узле за раз

Использует скрипт Python для вызова API моего хостинг-провайдера с целью обновления места назначения аварийного переключения IP

  • WebServer ресурс существует (как клон) на каждом доступном узле

Стандартный ресурс OCF с использованием Apache server-status обработчик

Ограничения

  • Существует ограничение, которое говорит, что Failover а также WebServer должен одновременно выполняться на сервере, чтобы считать его доступным.

Проблема

Теперь я хотел бы создать пользовательский агент ресурсов (как я сделал для аварийного переключения IP), который будет:

  • Переключите экземпляр mysql текущего подчиненного узла на главный узел
  • Переключите экземпляр mysql текущего главного узла на подчиненный узел нового главного узла
  • В основном сделайте то же самое для экземпляра Redis

В идеале ресурс должен быть запущен только на одном узле (ведущем) и остановлен на всех других узлах (ведомых). Следовательно, запуск ресурса поместит текущий узел в master режим и его остановка slave Режим.

Я сделал сценарий, который может легко выполнить все эти операции. Вот как это работает.

Включите локальный узел в режиме мастера:

# /usr/local/bin/db_failover_switch.sh master

Перевести локальный узел в подчиненный режим:

# /usr/local/bin/db_failover_switch.sh slave 123.45.67.89

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

TL; DR

В случае сбоя, я хочу:

  • Ресурс начинается с node2 который становится master узел
  • Ресурс останавливается на node1 который становится slave узел

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

Есть ли способ получить динамический параметр, который Pacemaker передаст моему агенту ресурсов? Или, может быть, я могу получить информацию о кластерах непосредственно из сценария моего агента ресурса, чтобы узнать, на каком узле выполняется определенный ресурс?

1 ответ

После прочтения вашего комментария я не уверен, что вы все еще хотите пойти по маршруту, который вы запланировали изначально, но в любом случае, вот что для этого есть:

С помощью crm_mon --group-by-node -1 вы можете получить "одноразовое" представление о текущем состоянии вашего кластера, сгруппированное по вашим узлам. -1 Параметр делает этот параметр неинтерактивным, что означает, что он просто отображает данные и затем завершает работу.

(Изменить: возможно, используя crm_mon -1 облегчает анализ в вашем конкретном случае.)

Вы можете проанализировать этот вывод и действовать соответственно.

(Личное примечание: я бы также пошел по пути, который вы описали в своем комментарии. В конце концов, это два демона, поэтому два ресурса кажутся разумными. Кроме того, агенты ресурсов для использования уже существуют. Удачи!)

Другие вопросы по тегам