Troubleshooting - Recuperação de Cluster para erros: Database Unavailable e Split-Brain

Esse artigo é uma transcrição do seguinte vídeo: Tratativa de Incidentes

ATENÇÃO: Realize todas as operações com cuidado e na ordem correta por se tratar de comandos de gerência do banco de dados.

Esse troubleshooting é para o caso de uso onde o senhasegura em cluster apresenta os seguintes erros ao acessar a interface web: Database Unavailable ou Split-Brain.

1. Identificando o tipo de erro:

  • Disco cheio

Em todas as instância do senhasegura insira o seguinte comando:

df -h 

Caso possua um disco com 100% de utilização, o erro acontece por esse motivo.

  • Nível de Processamento

Em todas as instância do senhasegura insira o seguinte comando:

top

O principal parâmetro a verificar é o load average, que sempre deve ser menor que a quantidade de vCPU de seu servidor.

  • Logs de erro do banco de dados

Em todas as instância do senhasegura insira o seguinte comando:

tail -f /var/log/mysql/mysql-error.log

Esse troubleshooting está relacionado aos erros de conexão do banco de dados, como por exemplo:

[ERROR] WSREP: gcp connect failed: Connection timed out

image

Ao identificar o tipo de erro, sendo ele de conexão, daremos andamento aos próximos passos.

2. Processos do Banco de Dados

  • Estado mysql

Verifique o estado atual do processo mysql em todas as instâncias:

systemctl status mysql

É esperado que o processo esteja com falha ou inativo. Caso o processo esteja “running”, pare o processo:

systemctl stop mysql
  • Processos mysql

Verifique se existe algum processo mysql executando no plano de fundo com o seguinte comando:

ps aux | grep mysql

O único resultado esperado desse comando é o processo do comando grep.
image

Todos os próximos procedimentos dependem que o mysql não esteja rodando.

3. Criação de um Novo Cluster

IMPORTANTE:
Em ambas as instâncias realize a validação se a sincronização do Cluster está ativa. Para isso, verifique se o wsrep_on está como ON, no seguinte arquivo:

cat /etc/mysql/conf.d/galera.cnf

Caso o parâmetro wsrep_on esteja OFF em alguma instância, edite o arquivo e coloque como ON.

INSTÂNCIA SECUNDÁRIA:

Deixe a instância ligada com o seguinte comando:

top

INSTÂNCIA PRIMÁRIA:
Na instância primária remova os arquivos de configuração do cluster:
ATENÇÃO: tome muito cuidado para não remover nenhum arquivo além dos mostrados aqui.

cd /var/lib/mysql/
ls -lha 
rm multi-master.info galera.cache grastate.dat
cd /home/mt4adm

Agora, iremos criar um novo cluster seguindo a configuração do cluster anterior, caso for realizar alguma alteração de IP, é feita via interface web ou pela CLI, com mais detalhes na seguinte documentação: Configurar um cluster senhasegura.

Comando para criação do cluster (no diretório /home/mt4adm):

galera_new_cluster

Verifique o processo mysql (que deverá estar funcionando):

systemctl status mysql

A interface web da instância primária deverá estar funcional agora, porém ao acessar a secundária o erro de Database Unavailable continuará.
Deixe a instância primária rodando com o comando top.

4. Recuperação da Instância Secundária

INSTÂNCIA SECUNDÁRIA:

Movendo o banco de dados:

cd /var/lib/
ls -lha | grep mysql
mv /var/lib/mysql /var/lib/mysql-data-do-dia

Criando um novo diretório mysql com as permissões corretas:

install -d mysql -g mysql -o mysql
cd /home/mt4adm/

Agora, iremos ligar o banco de dados das secundárias, porém é importante verificar a sincronização a partir da primária.

INSTÂNCIA PRIMÁRIA:

Deixe o seguinte comando rodando:

tail -f /var/log/mysql/mysql-error.log

INSTÂNCIA SECUNDÁRIA:
Dê início ao banco de dados no plano de fundo:

systemctl start mysql &

Verifique a sincronização via logs:

tail -f /var/log/mysql/mysql-error.log

Nesse momento o senhasegura vai começar a sincronização, passando a database da primária para a secundária, logo esse processo pode demorar alguns minutos, dependendo do tamanho da base de dados.
A sincronização é finalizada ao aparecer nos logs os seguintes textos:

INSTÂNCIA SECUNDÁRIA:

Reading of all Master_info entries succeeded

image

INSTÂNCIA PRIMÁRIA:

WSREP: Member ** (hostname_da_instância) synced with group

image

Ao finalizar esse processo a instância secundária estará de pé e a sincronização do cluster de forma operacional.