Como impedir que um recurso Heartbeat inicie no data center de failover?

5

Eu tenho um par de servidores CentOS Linux em cada datacenter. Eles têm failover em cada datacenter, gerenciado por heartbeat e DRBD (sei que são ferramentas desatualizadas, mas são estáveis, portanto não há necessidade de alterá-las).

Eles também têm a capacidade de alternar entre datacenter, para tornar ativo o datacenter leste, enquanto o oeste se torna passivo. Mas este é um processo de engenharia manual, e tudo bem.

O datacenter oeste é atualmente o ativo, o datacenter leste é passivo.

serverA.west <-> serverB.west  <-----------> serverA.east <-> serverB.east
     ACTIVE DATA CENTER                           PASSIVE DATA CENTER

Servidores podem executar o mysqld e um aplicativo Java.

O aplicativo Java neste servidor deve ser executado apenas no host Principal no datacenter ativo (por exemplo, serverA.west). Se outra instância do aplicativo Java for iniciada no host secundário (serverB.west) ou em qualquer host no datacenter passivo, há um risco de problemas de divisão cerebral.

Hoje serverA.east foi reinicializado, o que causou a pulsação do computador para o serverB.east. O Heartbeat então iniciou o aplicativo Java no serverB.east, o que não queremos que aconteça.

O Heartbeat também iniciou o mysqld em serverB.east, o que é correto, porque a replicação do MySQL deve continuar, replicando as mudanças do datacenter oeste continuamente para que o East DC esteja pronto para assumir quando necessário.

/etc/ha.d/haresources nomeia os scripts /etc/init.d para o mysqld e a aplicação Java como os recursos para iniciar.

Queremos permitir que o heartbeat gerencie o par A / B no datacenter passivo. Ele deve iniciar o mysqld em um failover, mas não no aplicativo Java. Mas se o datacenter leste for o ativo, a pulsação deve iniciar o aplicativo Java durante um failover automatizado de pulsação.

Qual é uma boa maneira de implementar isso?

O que eu espero é algo que precise de um passo para configurar à medida que mudamos o datacenter ativo de oeste para leste. Idealmente, deve ser à prova de erros, isto é, deve ser garantido que exatamente um dos datacenters esteja configurado como o ativo.

    
por Bill Karwin 09.12.2016 / 02:11

2 respostas

0

A solução que eu criei é manter duas versões do /etc/ha.d/haresources.

root:/etc/ha.d$ ls -l
lrwxrwxrwx 1 root root   16 Dec 22 10:31 haresources -> haresources-dark
-rw-r--r-- 1 root root  151 Dec 22 10:22 haresources-dark
-rw-r--r-- 1 root root  161 Dec 22 10:30 haresources-live

O "haresources-dark" é usado em todos os servidores no datacenter de DR (leste). Eu uso um link simbólico para que o haresources aponte para haresources-dark.

A única diferença entre as duas versões de haresources é a menção de aplicativos Java. Na versão escura, os aplicativos Java não são iniciados.

Se / quando nós mudarmos para o datacenter de DR, teremos que atualizar esses links simbólicos manualmente. Mas isso é aceitável.

Isto não é à prova de erros. Eu tenho que configurar manualmente os links simbólicos em todos os meus servidores gerenciados por pulsação no datacenter de DR. E não há nada para impor que um datacenter seja "dark" e o outro seja "live". Esta será uma solução manual por enquanto.

    
por 22.12.2016 / 20:31
2

Eu acho que você não pode fazer isso apenas com pulsação (nativa). Você pode usar marcapasso, ele pode trabalhar com quóruns, mas ... você não tem quórum. Imagine, esse elo entre data centers falha - cada um do leste e do oeste vai pensar, ele é apenas um sobrevivente e todos eles iniciam a aplicação, mudam o mysql para o modo mestre etc. E você terá uma posição realmente dividida do cérebro. IMHO, se você precisa realmente de HA, você precisa de 3 centro de dados, em seguida, migrar o MySQL para o MariaDB com o cluster Galera, e iniciá-los em seu aplicativo Java, pode ser até mesmo no modo ativo-ativo ativo.

    
por 09.12.2016 / 15:47