Monitoramento da replicação do MySQL

6

Qual é a melhor prática para monitorar um escravo para se certificar de que é

a) Ainda em execução b) Não muito longe de ser o mestre

Eu gostaria de alertar por e-mail se ele está atrasado, feliz em escrever um script ou dois para conectar-se a aplicativos de linha de comando.

    
por johnwards 13.11.2009 / 17:33

8 respostas

8

1

você pode usar o mk-heartbeat do maatkit

2

você pode ver o resultado de

show slave status;

é executado no escravo sql, mas o Seconds_Behind_Master é incompreensivelmente impreciso, às vezes.

3

você pode hackear sua própria solução, semelhante à minha - eu a uso para nagios monitorar e para alimentar munin gráficos mostrando 'segundos atrás do mestre'.

no servidor mestre eu tenho um trabalho cron simples:

* * * * * root /usr/local/bin/repltest

em que repltest é:

#!/bin/bash
start='date +%s'
d=0
while [ $d -lt 60 ] ; do
        echo "update repl_test set t= NOW(); " |mysql --defaults-file=/etc/mysql/debian.cnf repl_test
        sleep 3
        d=$(( 'date +%s' - $start ))
done

no escravo eu monitoro o valor retornado por:

echo "select UNIX_TIMESTAMP(NOW())-UNIX_TIMESTAMP(t) from repl_test" |  mysql --defaults-file=/etc/mysql/debian.cnf -N repl_test

hora local em todos os servidores é sincronizada via ntp.

repl_test db contém:

CREATE TABLE IF NOT EXISTS 'repl_test' ('t' datetime NOT NULL) ENGINE=MyISAM DEFAULT CHARSET=utf8;
INSERT INTO 'repl_test' ('t') VALUES(NOW());

se você executar a replicação - sugiro que você também configure mk-table-checksum para compare o conteúdo de seus servidores SQL de tempos em tempos.

    
por 13.11.2009 / 17:47
4

pQd tem isso, checando 'show slave status' é a maneira mais fácil. Em relação a Seconds_behind_master sendo impreciso, eu queria mencionar que o valor é a diferença no registro de data e hora para a instrução sendo lida do log de relay pelo encadeamento do SQL escravo; não está relacionado a uma estimativa de quanto tempo levará para recuperar o atraso. Por exemplo, uma única atualização demorada que leva, digamos, uma hora para ser executada, fará com que o escravo apareça até uma hora atrás do seu mestre, mas, uma vez completada a declaração, poderia muito bem ter apenas 1 segundo de trabalho a fazer recuperar.

Além disso, você desejará conceder "REPLICATION CLIENT" ao usuário que será monitorado para recuperar o status do escravo;

    
por 13.11.2009 / 19:03
3

A resposta óbvia, como outros disseram, é usar alguma variação no SHOW SLAVE STATUS. Eu uso o verificador embutido no Nagios pessoalmente, mas isso é porque eu faço todos os tipos de monitoramento através de nagios. Existe um problema, é possível que SHOW SLAVE STATUS mostre ambos os processos em execução e ainda que o escravo seja interrompido. Pelo que podemos dizer (porque tivemos o problema e analisamos o problema), o problema ocorre quando há arrotos de rede de alguma duração que é muito curta para matar o escravo por completo, mas muito tempo para ele se recuperar adequadamente. Nós criamos um trabalho em torno de onde nós olhamos para o registro de data e hora da última entrada em uma tabela que muda rotineiramente e a compara entre o mestre e o escravo, em seguida, lança um alerta se estiver "muito longe" para trás. Não é perfeito e só funcionaria em certas circunstâncias, mas considere-se avisado.

    
por 16.11.2009 / 22:43
2

Você pode consultar este post do blog que menciona todas as ferramentas de código-fonte aberto e comercial que mostram link

Normalmente, este blog inclui ferramentas como pt-heartbeat: Ferramenta conveniente para monitorar o atraso do escravo em tempo real. pt-slave-restart: Relógios e reinicia Slave em erro. pt-slave-find: Localiza a hierarquia de replicação dos escravos. pt-table-checksum: Verifica se os bancos de dados nos escravos estão em sincronia com seus mestres.

MySQL Enterprise Monitor: Um “Virtual DBA Assistant” da Oracle é uma ferramenta de monitoramento baseada em agentes que possui uma GUI baseada na web. Guia "Replicação", que fornece uma visão topológica de todos os Mestres e seus Escravos, juntamente com a saída de SHOW SLAVE STATUS e SHOW MASTER STATUS.

Monyog-MySQL monitor e orientador: que suporta a monitoração de replicação e o gerenciamento da aba include -Replication que fornece uma visão topológica de todos os Masters e seus Slaves junto com SHOW SLAVE STATUS e SHOW MASTER STATUS.

    
por 11.03.2013 / 13:45
1

Você deve executar a consulta SHOW SLAVE STATUS e garantir que Slave_IO_Running e Slave_SQL_Running tenham um valor de Yes . Caso contrário, o escravo NÃO poderá recuperar automaticamente. Se ambos forem Yes , a replicação ainda estará funcionando, embora possa haver um atraso ( Seconds_Behind_Master ).

    
por 13.11.2009 / 19:31
1

Uma ferramenta bastante boa é rep_mon , parte do conjunto MyCat , é basicamente apenas um script perl no estilo do pQd terceira opção, no entanto, é facilmente configurável e bem testada. Uma vez configurado, você pode executá-lo como um teste rápido, ou agendá-lo no cron para enviar e-mails, se houver algum problema.

Quando executado, ele basicamente apenas exibe "OK" ou o erro. Você também pode alertá-lo se o atraso de segundos atingir um certo limite (definido por você).

No entanto, se for apenas o monitoramento de limiar desejado, sugeriria ir para o maatkit, ele funciona inserindo e consultando com SQL real em vez da saída possivelmente imprecisa de SHOW SLAVE STATUS .

    
por 14.11.2009 / 22:22
1

Use

mysql_config_editor set --login-path=local --host=<< your slave >> --user=username --password

e

mysql_config_editor set --login-path=remote --host=<< your master >> --user=username --password

para definir valores de login predefinidos para evitar Aviso: o uso de uma senha na interface da linha de comando pode ser inseguro.

Use-os para consultar os dois servidores MySql:

  1. Compare a posição do registro no mestre em relação ao Exec_Master_Log_Pos no escravo:

    master_log = $ (mysql --login-path = remote -e "mostre status principal" | grep -v Arquivo | awk '{print $ 2}')

    slave_exec = $ (mysql --login-path = local -e "mostra status do escravo \ G" | grep Exec_Master_Log_Pos | awk '{print $ 2}')

    diff = $ (($ master_log - $ slave_exec))

  2. Verifique o status do IO do escravo para ver se ele está em execução:

    IO_Status = $ (mysql --login-path = local -e "mostra status do escravo \ G" | grep Slave_IO_Running | awk '{print $ 2}')

  3. Verifique o status do escravo SQL para ver se está tudo bem ou não:

    SQL_Status = $ (mysql --login-path = local -e "mostra status do escravo \ G" | grep "Slave_SQL_Running:" | awk '{print $ 2}')

Você pode usar os valores de $ diff, $ SQL_Status e $ IO_Status para enviar e-mails de aviso se eles não corresponderem a determinados valores de acordo com sua preferência

    
por 11.03.2013 / 14:40
0

Veja como fazer isso com o Zenoss: texto do link

    
por 14.11.2009 / 17:34