Testando a Replicação / Sincronização do Banco de Dados MySQL

6

Estou configurando um banco de dados mestre do MySQL que é replicado para alguns bancos de dados escravo.

Minha pergunta é quais são as melhores práticas para monitorar e / ou testar se os bancos de dados escravos estão atualizados, e isso alertaria um administrador quando houver um erro que faz com que a replicação pare.

Eu pesquisei ferramentas de monitoramento, mas não consegui localizar nada adequado.

Além disso, quais são as abordagens de 'melhores práticas' para testar a sincronização entre os escravos. Existe algo como o Teste de Unidade para replicação do banco de dados?

Peço desculpas se minha ignorância sobre o assunto ofende alguém.

    
por pjama 27.08.2012 / 17:23

4 respostas

4

O grande problema da replicação é verificar

  1. que os nós estão todos em cima,
  2. todos os nós estão se comunicando (não dividem o cérebro)
  3. e processando logs de replicação
  4. e o atraso de replicação

1, 3 e 4 podem ser capturados usando-se SHOW MASTER STATUS / SHOW SLAVE STATUS nos nós relevantes, embora o atraso de replicação tenha apenas 1 segundo de precisão e somente em cada salto. O kit de ferramentas Percona possui scripts para obter lags de replicação mais precisos.

Usando a replicação multimestre (por exemplo, tungstênio , Percona ) poupa muita dor, mas precisa de esforço / software adicional para configurar.

Se a rede entre ndoes falhar, então todos os processos podem estar rodando bem - mas não poderão transferir dados - você precisa monitorar em cada nó para verificar se ele pode contatar o nó upstream.

a MySQL Master database which replicates to a few Slave databases

A melhor prática seria designar um dos escravos como um mestre também - replicação bidirecional. Dessa forma, você pode alternar facilmente no caso de uma interrupção ou para tarefas de manutenção, como a reconstrução de índices, backups, alterações de esquema.

Dependendo do número de nós escravos, você também pode designar um nó fanout para propagar as alterações.

Em termos de gerenciamento de escalações, agendamento de scripts para coleta de dados, etc., há muitas ferramentas disponíveis que fazem isso - eu uso nagios, assim como muitas outras pessoas.

    
por 27.08.2012 / 17:54
5

My question is what are the best practices to monitor and / or test that the slave databases are up-to-date,

Para um teste simples, insira / atualize dados no mestre e certifique-se de que ele seja replicado para os escravos.

Mas, para a verificação de consistência, pt-table-checksum é o que você está procurando.

Por exemplo:

pt-table-checksum localhost --empty-replicate-table --databases db --nocheck-replication-filters --replicate percona.checksums > /var/log/pt-table-checksum.log 2>&1

and that would alert an admin when there is an error causing replication to stop.

Se você estiver usando o Nagios, o plug-in check_mysql_health pode ajudar a monitorar o status do escravo (executando ou não). Mas para monitorar a consistência, dê uma olhada em pmp- plugin de check-pt-table-checksum .

Não perca a pt-table-sync se tem algum inconsistente:

pt-table-sync -v --print --sync-to-master h=localhost,D=db,t=table
pt-table-sync -v --execute --sync-to-master h=localhost,D=db,t=table

Tenha em mente que você provavelmente deve usar a opção --print primeiro.

    
por 27.08.2012 / 17:41
3

em escravo

SHOW SLAVE STATUS\G;

Se você está recebendo estes:

   Slave_IO_Running: Yes
  Slave_SQL_Running: Yes

isso significa que você está quase lá, para testá-lo tente fazer qualquer transação de gravação no MASTER e certifique-se de que eles se replicam automaticamente no slave

    
por 27.08.2012 / 17:29
1

I've searched for monitoring tools, but haven't been able to locate anything suitable.

Você pode usar o Percona MySQL Monitoring Template [s] para o Cacti . Confira o modelo de Replicação do MySQL (que usa a ferramenta pt-heartbeat ).

Felicidades

    
por 27.08.2012 / 19:00