sql >> Database >  >> RDS >> MariaDB

Geavanceerde failover met behulp van post/pre-script hooks

Het belang van failover

Failover is een van de belangrijkste databasepraktijken voor databasebeheer. Het is niet alleen handig bij het beheren van grote databases in productie, maar ook als u er zeker van wilt zijn dat uw systeem altijd beschikbaar is wanneer u het opent, vooral op applicatieniveau.

Voordat een failover kan plaatsvinden, moeten uw database-instances aan bepaalde vereisten voldoen. Deze eisen zijn namelijk erg belangrijk voor een hoge beschikbaarheid. Een van de vereisten waaraan uw database-instances moeten voldoen, is redundantie. Redundantie zorgt ervoor dat de failover kan doorgaan, waarbij de redundantie is ingesteld om een ​​failover-kandidaat te hebben die een replica (secundair) knooppunt kan zijn of uit een pool van replica's die fungeren als stand-by- of hot-standby-knooppunten. De kandidaat wordt handmatig of automatisch geselecteerd op basis van de meest geavanceerde of actuele node. Gewoonlijk zou u een hot-standby-replica willen, omdat deze uw database kan behoeden voor het ophalen van indexen van schijf, aangezien een hot-standby vaak indexen in de databasebufferpool vult.

Failover is de term die wordt gebruikt om te beschrijven dat er een herstelproces heeft plaatsgevonden. Voorafgaand aan het herstelproces vindt dit plaats wanneer een primair (of hoofd) databaseknooppunt faalt na een crash, na natuurrampen, na een hardwarestoring, of als het netwerkpartitionering heeft ondergaan; dit zijn de meest voorkomende gevallen waarin een failover kan plaatsvinden. Het herstelproces verloopt meestal automatisch en zoekt vervolgens naar de meest gewenste en actuele secundaire (replica) zoals eerder vermeld.

Geavanceerde failover

Hoewel het herstelproces tijdens een failover automatisch is, zijn er bepaalde gevallen waarin het niet nodig is om het proces te automatiseren en een handmatig proces het moet overnemen. Complexiteit is vaak de belangrijkste overweging bij de technologieën die de hele stack van uw database vormen - automatische failover kan ook worden gecombineerd met handmatige failover.

In de meeste dagelijkse overwegingen bij het beheren van databases, zijn de meeste zorgen rond de automatische failover echt niet triviaal. Het is vaak handig om een ​​automatische failover te implementeren en in te stellen voor het geval er zich problemen voordoen. Hoewel dat veelbelovend klinkt omdat het de complexiteit dekt, komen er de geavanceerde failover-mechanismen en dat omvat "pre"-gebeurtenissen en de "post"-gebeurtenissen die als haken zijn verbonden in een failover-software of -technologie.

Deze pre- en postgebeurtenissen komen met controles of bepaalde acties die moeten worden uitgevoerd voordat de failover definitief kan worden uitgevoerd, en nadat een failover is voltooid, enkele opschoningen om ervoor te zorgen dat de failover eindelijk een succes is een. Gelukkig zijn er tools beschikbaar die niet alleen automatische failover mogelijk maken, maar ook de mogelijkheid bieden om pre- en post-script hooks toe te passen.

In deze blog gebruiken we de automatische failover van ClusterControl (CC) en leggen we uit hoe je de pre- en postscript-hooks gebruikt en op welke cluster ze van toepassing zijn.

ClusterControl-replicatiefailover

Het ClusterControl-failovermechanisme is efficiënt toepasbaar via asynchrone replicatie die van toepassing is op MySQL-varianten (MySQL/Percona Server/MariaDB). Het is ook van toepassing op PostgreSQL/TimescaleDB-clusters - ClusterControl ondersteunt streaming-replicatie. MongoDB- en Galera-clusters hebben hun eigen mechanisme voor automatische failover ingebouwd in hun eigen databasetechnologie. Lees meer over hoe ClusterControl automatisch databaseherstel en failover uitvoert.

ClusterControl-failover werkt niet tenzij het herstel van knooppunten en clusters (Automatisch herstel is ingeschakeld). Dat betekent dat deze knoppen groen moeten zijn.

In de documentatie staat dat deze configuratie-opties ook kunnen worden gebruikt om / schakel het volgende uit:

enable_cluster_autorecovery=

  • Indien niet gedefinieerd, wordt CMON standaard ingesteld op 0 (false) en zal het GEEN automatisch herstel uitvoeren als het clusterfout detecteert. De ondersteunde waarde is 1 (clusterherstel is ingeschakeld) of 0 (clusterherstel is uitgeschakeld).

enable_node_autorecovery=

  • Indien niet gedefinieerd, wordt CMON standaard ingesteld op 0 (false) en zal het GEEN automatisch herstel uitvoeren als het een node-fout detecteert. De ondersteunde waarde is 1 (knooppuntherstel is ingeschakeld) of 0 (knooppuntherstel is uitgeschakeld).

Deze opties hebben, indien ingesteld in /etc/cmon.d/cmon_.cnf, een cmon-herstart nodig. Daarom moet u opnieuw opstarten met het volgende commando:

$ systemctl restart cmon

Voor deze blog richten we ons voornamelijk op het gebruik van de pre/post script hooks, wat in wezen een groot voordeel is voor geavanceerde replicatie-failover.

Cluster failover-replicatie pre/post scriptondersteuning

Zoals eerder vermeld, ondersteunen MySQL-varianten die asynchrone (inclusief semi-synchrone) replicatie en streamingreplicatie voor PostgreSQL/TimescaleDB gebruiken dit mechanisme. ClusterControl heeft de volgende configuratie-opties die kunnen worden gebruikt voor pre- en postscript-hooks. In principe kunnen deze configuratie-opties worden ingesteld via hun configuratiebestanden of kunnen ze worden ingesteld via de web-UI (we zullen dit later behandelen).

In onze documentatie staat dat dit de volgende configuratie-opties zijn die het failover-mechanisme kunnen wijzigen door gebruik te maken van de pre/post-scripthaken:

replication_pre_failover_script=

  • Pad naar het failoverscript op ClusterControl-knooppunt. Dit script wordt uitgevoerd voordat de failover plaatsvindt, maar nadat een kandidaat is gekozen en het mogelijk is om het failoverproces voort te zetten. Als het script niet-nul retourneert, wordt de failover geforceerd om af te breken. Als het script is gedefinieerd maar niet wordt gevonden, wordt de failover afgebroken.

  • 4 argumenten worden aan het script toegevoegd:

    • arg1=”Alle servers in de replicatie”

    • arg2=”De mislukte master”

    • arg3=”Geselecteerde kandidaat”

    • arg4=”Slaven van de oude meester”

  • De argumenten worden als volgt doorgegeven:pre_failover_script.sh "arg1" "arg2" "arg3" "arg4 ". Het script moet toegankelijk zijn op de controller en uitvoerbaar zijn.

  • Voorbeeld:replication_pre_failover_script=/usr/local/bin/pre_failover_script.sh

replication_post_failover_script=

  • Pad naar het failoverscript op het ClusterControl-knooppunt. Dit script wordt uitgevoerd nadat de failover heeft plaatsgevonden. Als het script niet-nul retourneert, wordt er een waarschuwing in het taaklogboek geschreven. Het script moet toegankelijk en uitvoerbaar zijn op de controller.

  • 4 argumenten worden aan het script toegevoegd:

    • arg1=”Alle servers in de replicatie”

    • arg2=”De mislukte master”

    • arg3=”Geselecteerde kandidaat”

    • arg4=”Slaven van de oude meester”

  • De argumenten worden als volgt doorgegeven:post_failover_script.sh "arg1" "arg2" "arg3" "arg4 ". Het script moet toegankelijk zijn op de controller en uitvoerbaar zijn.

  • Voorbeeld:replication_post_failover_script=/usr/local/bin/post_failover_script.sh

replication_post_unsuccessful_failover_script=

  • Pad naar het script op het ClusterControl-knooppunt. Dit script wordt uitgevoerd nadat de failoverpoging is mislukt. Als het script niet-nul retourneert, wordt er een waarschuwing in het taaklogboek geschreven. Het script moet toegankelijk zijn op de controller en uitvoerbaar zijn.

  • 4 argumenten worden aan het script toegevoegd:

    • arg1=”Alle servers in de replicatie”

    • arg2=”De mislukte master”

    • arg3=”Geselecteerde kandidaat”

    • arg4=”Slaven van de oude meester”

  • De argumenten worden als volgt doorgegeven:post_fail_failover_script.sh "arg1" "arg2" "arg3" "arg4 ". Het script moet toegankelijk zijn op de controller en uitvoerbaar zijn.

  • Voorbeeld:replication_post_unsuccessful_failover_script=post_fail_failover_script.sh

Technisch gezien, als je eenmaal de volgende configuratie-opties in je /etc/cmon.d/cmon_.cnf configuratiebestand hebt ingesteld, moet cmon opnieuw worden opgestart, d.w.z. voer de volgende opdracht uit:

$ systemctl restart cmon

Als alternatief kunt u de configuratie-opties ook instellen door naar