In een MySQL source-replica high availability (HA) setup is het belangrijk om continu de status van de bron- en replicaservers te bewaken, zodat u mogelijke problemen kunt detecteren en corrigerende maatregelen kunt nemen . In deze blogpost leggen we enkele basisgezondheidscontroles uit die u kunt uitvoeren op uw MySQL-bron- en replicaknooppunten om ervoor te zorgen dat uw installatie in orde is. Het monitoringprogramma of script moet het hoge-beschikbaarheidsframework waarschuwen als een van de statuscontroles mislukt, zodat het hoge-beschikbaarheidsframework corrigerende maatregelen kan nemen om de beschikbaarheid van de service te garanderen.
MySQL Source Server Health Checks
We raden u aan uw MySQL-broncontroleprogramma of -scripts met regelmatige tussenpozen uit te voeren. Ervan uitgaande dat het monitoringscript op dezelfde server draait als uw MySQL-server, kunt u het volgende controleren:
-
Zorg ervoor dat de MySQL-service actief is
Dit kan worden gedaan met een eenvoudig commando zoals:
> pgrep mysqld
OF
>service mysqld status
-
Zorg ervoor dat u verbinding kunt maken met MySQL en voer een eenvoudige vraag uit
We raden aan een korte time-out te nemen voor deze opdrachten, zodat je snel kunt detecteren of MySQL niet meer reageert. Dit kan worden bereikt door een oproep als:
/usr/bin/timeout 5 mysql -u testuser -ptestpswd -e 'select * from mysql.test’
Bekijk de exit-waarde van het bovenstaande commando:
Exit value=0 ⇒ Success
Exit value=1 ⇒ Mislukt
Exit-value=124 ⇒ Time-out
Als de opdracht een time-out geeft, betekent dit dat de MySQL-service niet voldoende reageert. We raden u aan het na enige tijd opnieuw te proberen om fout-negatieve resultaten te voorkomen. Als de afsluitcode een fout aangeeft, geeft de retourcode van MySQL ons de reden van de fout aan. Een voorbeeld van een fout is de 'Too many connections'-fout van MySQL die optreedt als het aantal verbindingen met de server uw 'max_connections'-configuratiewaarde overschrijdt.
-
Zorg ervoor dat de MySQL-bron in de lees-schrijfmodus draait
U kunt de volgende opdracht gebruiken om ervoor te zorgen dat de MySQL-bron in de lees-schrijfmodus wordt uitgevoerd:
/usr/bin/timeout 5 mysql -u testuser -ptestpswd -e "SELECT @@global.read_only"
De bron wordt naar verwachting altijd in de lees-schrijfmodus uitgevoerd, en daarom moet de waarde van read_only 'UIT' zijn.
Het is ook mogelijk om deze stap te combineren met stap 2, en in plaats van de testquery 'select * from mysql.test uit te voeren, kunnen we de query gewoon uitvoeren om de read_only te krijgen waarde.
MySQL Replica Server-statuscontroles
U kunt de controle voor uw MySQL-replica's met een lagere frequentie uitvoeren in vergelijking met de bron, omdat ze geen gegevensschrijven verwerken. De eerste drie stappen voor uw replicastatuscontrole kunnen dezelfde zijn als die van de bron, behalve dat we ervoor moeten zorgen dat de replica in de alleen-lezen modus wordt uitgevoerd. De waarde van de variabele alleen-lezen moet in stap 3 'AAN' zijn .
Bovendien kunnen we meer controles uitvoeren op de replica om ervoor te zorgen dat de replicatiestatus in orde is, zoals:
De replica is geconfigureerd om te repliceren vanaf de juiste bron.
De verbinding van de replica met de bron is in orde.
De replica kan de ontvangen brongebeurtenissen toepassen.
Het is mogelijk om op al het bovenstaande te controleren met het commando 'show replica status'. Bijvoorbeeld:
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*********************************
De Source_Host-waarde geeft aan dat de bronserver is geconfigureerd voor replicatie.
Voor de waarde Replica_IO_Running geeft 'Ja' aan dat de replica verbinding heeft gemaakt met de bron en de replicatiestream ontvangt.
Voor de waarde Replica_SQL_Running geeft 'Ja' aan dat de applier van de replica actief is en alle gebeurtenissen kan toepassen die van de bron zijn ontvangen.
In deze blogpost hebben we enkele eenvoudige controles besproken die kunnen detecteren of er basisproblemen zijn in uw MySQL-bron- en replicaservers. Over het algemeen is het storingsdetectiemechanisme in een configuratie met hoge beschikbaarheid een complex onderwerp en heeft het een robuust raamwerk voor hoge beschikbaarheid nodig waarmee de statuscontrole moet worden geïmplementeerd. U kunt meer te weten komen over de details van ons kader voor hoge beschikbaarheid in ons MySQL High Availability Framework Explained – Part I:Introduction blogpost.