Em uma configuração de alta disponibilidade (HA) de réplica de origem do MySQL, é importante monitorar continuamente a integridade dos servidores de origem e de réplica para que você possa detectar possíveis problemas e tomar ações corretivas . Nesta postagem do blog, explicamos algumas verificações básicas de integridade que você pode fazer na origem do MySQL e nos nós de réplica para garantir que sua configuração esteja íntegra. O programa ou script de monitoramento deve alertar a estrutura de alta disponibilidade caso alguma das verificações de integridade falhe, permitindo que a estrutura de alta disponibilidade tome ações corretivas para garantir a disponibilidade do serviço.
Verificações de integridade do servidor de origem MySQL
Recomendamos que seu programa ou scripts de monitoramento de origem do MySQL sejam executados em intervalos frequentes. Supondo que o script de monitoramento esteja sendo executado no mesmo servidor que seu servidor MySQL, você pode verificar o seguinte:
-
Verifique se o serviço MySQL está em execução
Isso pode ser feito usando um comando simples como:
> pgrep mysqld
OU
>service mysqld status
-
Certifique-se de que você pode se conectar ao MySQL e fazer uma consulta simples
Recomendamos um tempo limite curto para esses comandos para que você possa detectar rapidamente se o MySQL não está respondendo. Isso pode ser alcançado a partir de uma chamada como:
/usr/bin/timeout 5 mysql -u testuser -ptestpswd -e 'select * from mysql.test’
Certifique-se de examinar o valor de saída do comando acima:
Valor de saída=0 ⇒ Sucesso
Valor de saída=1 ⇒ Falha
Exit-value=124 ⇒ Timeout
Se o comando expirar, significa que o serviço MySQL não responde o suficiente. Aconselhamos que você tente novamente após algum tempo para evitar resultados falsos negativos. Se o código de saída indicar uma falha, o código de retorno do MySQL nos informará o motivo da falha. Um exemplo de falha é o erro 'Too many connections' do MySQL, que acontece se o número de conexões com o servidor exceder o valor de configuração 'max_connections'.
-
Certifique-se de que a fonte do MySQL esteja sendo executada no modo de leitura/gravação
Você pode usar o seguinte comando para garantir que a fonte do MySQL esteja sendo executada no modo de leitura/gravação:
/usr/bin/timeout 5 mysql -u testuser -ptestpswd -e "SELECT @@global.read_only"
Espera-se que a fonte esteja sempre em execução no modo de leitura/gravação e, portanto, o valor de read_only deve ser 'OFF'.
Também é possível combinar este passo com o passo 2, e ao invés de fazer a consulta de teste 'select * from mysql.test, podemos apenas fazer a consulta para obter o read_only valor.
Verificações de integridade do servidor de réplica MySQL
Você pode executar o monitoramento de suas réplicas do MySQL em uma frequência menor em comparação com a fonte, pois elas não estão manipulando gravações de dados. As três primeiras etapas da verificação de integridade da réplica podem ser as mesmas da origem, exceto que precisamos garantir que a réplica esteja sendo executada no modo somente leitura. O valor da variável read_only deve ser 'ON' na etapa 3 .
Além disso, podemos fazer mais verificações na réplica para garantir que seu status de replicação esteja íntegro, como:
A réplica está configurada para replicar da fonte correta.
A conexão da réplica com a fonte está íntegra.
A réplica pode aplicar os eventos de origem que recebeu.
É possível verificar todos os itens acima usando o comando ‘show replica status’. Por exemplo:
mysql> show replica status \G; *************************** 1. row *************************** Replica_IO_State: Waiting for source to send event Source_Host: 172.31.17.43 Source_User: repl_user Source_Port: 3306 Connect_Retry: 10 Source_Log_File: mysql-bin.000001 Read_Source_Log_Pos: 7510 Relay_Log_File: relay-log.000006 Relay_Log_Pos: 414 Relay_Source_Log_File: mysql-bin.000001 Replica_IO_Running: Yes Replica_SQL_Running: Yes ******************Truncated*********************************
O valor Source_Host indica que o servidor de origem está configurado para replicação.
Para o valor Replica_IO_Running, "Sim" indica que a réplica se conectou à origem e está recebendo o fluxo de replicação.
Para o valor Replica_SQL_Running , "Sim" indica que o aplicador da réplica está em execução e pode aplicar todos os eventos recebidos da origem.
Nesta postagem do blog, discutimos algumas verificações simples que podem detectar se há problemas básicos em seus servidores de origem e réplica do MySQL. Em geral, o mecanismo de detecção de falhas em uma configuração de alta disponibilidade é um assunto complexo e precisa de uma estrutura robusta de alta disponibilidade por meio da qual o monitoramento da verificação de integridade deve ser implementado. Você pode saber mais sobre os detalhes de nossa estrutura de alta disponibilidade em nosso MySQL High Availability Framework Explained - Part I:Introduction.