Estou configurando um banco de dados MySQL Master que replica para alguns bancos de dados Slave.
Minha dúvida é 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 faça com que a replicação pare.
Procurei 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 teste de unidade para replicação de banco de dados?
Peço desculpas se minha ignorância sobre o assunto ofende alguém.
Responder1
O grande problema da replicação é verificar
- que os nós estão todos ativos,
- todos os nós estão se comunicando (não com cérebro dividido)
- e processamento de logs de replicação
- e o atraso de replicação
1, 3 e 4 podem ser capturados usando SHOW MASTER STATUS / SHOW SLAVE STATUS nos nós relevantes, embora o atraso de replicação tenha apenas 1 segundo de precisão e apenas em cada salto. O kit de ferramentas Percona possui scripts para obter atrasos de replicação mais precisos.
Usando replicação multimestre (por exemplotungstênio,Percona) evita muito trabalho, mas precisa de esforço/software adicional para configurar.
Se a rede entre os ndoes falhar, todos os processos poderão estar funcionando bem - mas não serão capazes de transferir dados - você precisa monitorar cada nó para verificar se ele pode entrar em contato com o nó upstream.
um banco de dados MySQL Master que replica para alguns bancos de dados Slave
A melhor prática seria designar um dos escravos também como mestre - replicação bidirecional. Dessa forma, você pode alternar facilmente em caso de interrupção ou para tarefas de manutenção, como reconstrução de índices, backups e alterações de esquema.
Dependendo do número de nós escravos, você também pode querer designar umnó de fanoutpara propagar as mudanças.
Em termos de gerenciamento de escalonamentos, agendamento de scripts para coleta de dados, etc., existem muitas ferramentas disponíveis que fazem isso - eu uso o nagios, assim como muitas outras pessoas.
Responder2
Minha dúvida é quais são as melhores práticas para monitorar e/ou testar se os bancos de dados escravos estão atualizados,
Para um teste simples, insira/atualize os dados no mestre e certifique-se de que sejam replicados para os escravos.
Mas para a verificação de consistência,soma de verificação da tabela pté 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
e isso alertaria um administrador quando houvesse um erro que interrompesse a replicação.
Se você estiver usando o Nagios,check_mysql_healthplugin pode ajudar a monitorar o status do escravo (em execução ou não). Mas para monitorar a consistência, dê uma olhada empmp-check-pt-table-checksumplugar.
Não perca osincronização de tabela ptse você tiver alguma inconsistência:
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 deveria usar a --print
opção primeiro.
Responder3
no escravo fazer
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 elas sejam replicadas automaticamente no escravo
Responder4
Procurei ferramentas de monitoramento, mas não consegui localizar nada adequado.
Você pode usar oModelo[s] de monitoramento Percona MySQL para Cacti. Confira o modelo de replicação MySQL (que usa a pt-heartbeat
ferramenta).
Saúde