I en MySQL-kilde-replik-høj tilgængelighed (HA) opsætning er det vigtigt løbende at overvåge tilstanden af kilde- og replikaserverne, så du kan opdage potentielle problemer og træffe korrigerende handlinger . I dette blogindlæg forklarer vi nogle grundlæggende sundhedstjek, du kan udføre på din MySQL-kilde og replika-noder for at sikre, at din opsætning er sund. Overvågningsprogrammet eller scriptet skal advare rammerne for høj tilgængelighed, hvis nogen af sundhedstjekket mislykkes, hvilket gør det muligt for rammerne for høj tilgængelighed at træffe korrigerende handlinger for at sikre servicetilgængelighed.
MySQL Source Server Health Checks
Vi anbefalede at dit MySQL-kildeovervågningsprogram eller scripts kører med hyppige intervaller. Forudsat at overvågningsscriptet kører på den samme server som din MySQL-server, kan du tjekke for følgende:
-
Sørg for, at MySQL-tjenesten kører
Dette kan gøres ved hjælp af en simpel kommando som:
> pgrep mysqld
ELLER
>service mysqld status
-
Sørg for, at du kan oprette forbindelse til MySQL og lave en simpel forespørgsel
Vi anbefalede at have en kort timeout for disse kommandoer, så du hurtigt kan registrere, om MySQL ikke reagerer. Dette kan opnås fra et opkald som:
/usr/bin/timeout 5 mysql -u testuser -ptestpswd -e 'select * from mysql.test’
Sørg for at undersøge exit-værdien for ovenstående kommando:
Udgangsværdi=0 ⇒ Succes
Udgangsværdi=1 ⇒ Fejl
Exit-value=124 ⇒ Timeout
Hvis kommandoen timeout, betyder det, at MySQL-tjenesten ikke reagerer nok. Vi råder dig til at prøve igen efter nogen tid for at undgå falske negative resultater. Hvis udgangskoden indikerer en fejl, vil returkoden fra MySQL fortælle os årsagen til fejlen. Et eksempel på en fejl er fejlen 'For mange forbindelser' fra MySQL, som opstår, hvis antallet af forbindelser til serveren overstiger din 'max_connections'-konfigurationsværdi.
-
Sørg for, at MySQL-kilden kører i læse-skrivetilstand
Du kan bruge følgende kommando til at sikre, at MySQL-kilden kører i læse-skrivetilstand:
/usr/bin/timeout 5 mysql -u testuser -ptestpswd -e "SELECT @@global.read_only"
Kilden forventes altid at køre i læse-skrivetilstand, og derfor bør værdien af read_only være 'OFF'.
Det er også muligt at klubbe dette trin med trin 2, og i stedet for at udføre testforespørgslen 'select * fra mysql.test, kan vi bare lave forespørgslen for at få read_only værdi.
MySQL Replica Server Health Checks
Du kan køre overvågningen for dine MySQL-replikaer med en mindre frekvens sammenlignet med kilden, da de ikke håndterer dataskrivninger. De første 3 trin til dit replika-sundhedstjek kan være det samme som for kilden, bortset fra at vi skal sikre, at replikaen kører i skrivebeskyttet tilstand - værdien af variablen read_only skal være "ON" i trin-3 .
Desuden kan vi foretage flere kontroller af replikaen for at sikre, at dens replikeringsstatus er sund, f.eks.:
Replikaen er konfigureret til at replikere fra den rigtige kilde.
Replikaens forbindelse til kilden er sund.
Replikaen er i stand til at anvende de kildebegivenheder, den har modtaget.
Det er muligt at tjekke for alt ovenstående ved at bruge kommandoen 'vis replikastatus'. For eksempel:
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*********************************
Source_Host-værdien angiver, at kildeserveren er konfigureret til replikering.
For værdien Replica_IO_Running angiver "Ja", at replikaen har oprettet forbindelse til kilden og modtager replikeringsstrømmen.
For Replica_SQL_Running-værdien angiver "Ja", at replikaens applier kører og er i stand til at anvende alle hændelser modtaget fra kilden.
I dette blogindlæg diskuterede vi nogle simple kontroller, der kan opdage, om der er grundlæggende problemer i din MySQL-kilde- og replikaservere. Generelt er fejldetektionsmekanismen i en opsætning med høj tilgængelighed et komplekst emne og har brug for en robust ramme for høj tilgængelighed, gennem hvilken overvågning af helbredstjek skal implementeres. Du kan få flere oplysninger om detaljerne om vores høj tilgængelighedsramme i vores MySQL High Availability Framework Explained – Del I:Introduktion blogindlæg.