Obtém o IP do nó que está executando um recurso específico ao rebaixar nós principais para escravos

2

Configuração

Estou configurando um cluster de alta disponibilidade para um aplicativo da Web com dois nós (dois servidores físicos):

  • node1 (atual master node)
  • node2 (atual slave node)

Usando o Corosync & Marcapasso Consegui criar o cluster e alguns agentes de recursos, incluindo um failover de IP e um servidor da Web (apache).

Recursos

  • O recurso Failover existe em apenas um nó por vez

Uses a python script to make API calls to my hosting provider in order to update the IP failover destination

  • O recurso WebServer existe (como um clone) em todos os nós disponíveis

Standard OCF resource using Apache's server-status handler

Restrições

  • Existe uma restrição que diz que Failover e WebServer devem estar sendo executados ao mesmo tempo em um servidor para considerá-lo como disponível.

A questão

Agora, gostaria de criar um agente de recursos personalizado (como fiz para o failover de IP) que:

  • Altera a instância mysql do nó escravo atual para um nó mestre
  • Altera a instância mysql do nó principal atual para um nó escravo do novo nó mestre
  • Basicamente, faça o mesmo para a instância do Redis

Idealmente, o recurso seria iniciado em apenas um nó ( mestre ) e interrompido em todos os outros nós ( escravos ). Portanto, iniciar o recurso colocaria o nó atual no modo master e pará-lo-ia no modo slave .

Eu fiz um script que pode facilmente alcançar todas essas operações. Veja como funciona.

Transforme o nó local no modo master :

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

Transforme o nó local no modo escravo :

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

A sinopse é bastante simples de entender. O problema que estou enfrentando, é que obviamente preciso definir o IP mestre para que o escravo configure os serviços MySQL e Redis de acordo.

TL; DR

Em caso de failover, desejo:

  • O recurso começa em node2 , que se torna master node
  • O recurso para em node1 , que se torna slave node

Para interromper o recurso (ou seja, defini-lo no modo escravo), preciso saber o endereço IP (o nome do host fará) do nó que tem o recurso em execução.

Existe alguma maneira de eu ter um parâmetro dinâmico que o Pacemaker passará para o meu agente de recursos? Ou talvez eu possa recuperar as informações de clusters diretamente do meu script de agente de recursos para saber qual é o nó que está executando um recurso específico?

    
por Jordan Becker 02.02.2016 / 15:41

1 resposta

1

Depois de ler o seu comentário, não tenho certeza se você ainda deseja seguir o caminho planejado originalmente, mas, de qualquer forma, aqui está uma entrada para isso:

Usando crm_mon --group-by-node -1 , você pode obter uma visualização "única" do estado atual de seu cluster, agrupado por seus nós. O parâmetro -1 torna isso não interativo, o que significa que ele exibe os dados e sai.

( Editar: Talvez o uso de crm_mon -1 torne a análise no seu caso específico mais fácil.)

Você pode analisar essa saída e agir de acordo.

(Nota pessoal: Eu iria também o caminho que você descreveu no seu comentário. Afinal, estes são dois daemons, então dois recursos parecem razoáveis. Além disso, os agentes de recurso a usar já existem. sorte!)

    
por 02.02.2016 / 18:36