sql >> Database teknologi >  >> RDS >> MariaDB

Sådan administrerer du automatisk failover af MySQL-databasen til Moodle

I vores tidligere blogs har vi begrundet, hvorfor du har brug for en database-failover, og vi har forklaret, hvordan en failover-mekanisme fungerer. Jeg deler dette, hvis du har spørgsmål om, hvorfor du skal konfigurere en failover-mekanisme til din MySQL-database. Hvis du gør det, så læs venligst vores tidligere blogindlæg.

Sådan konfigurerer du automatisk failover

Fordelen ved at bruge MySQL eller MariaDB til automatisk at administrere din failover er, at der er tilgængelige værktøjer, du kan bruge og implementere i dit miljø. Fra open source-løsninger til virksomhedsløsninger. De fleste værktøjer er ikke kun failover-kompatible, der er andre funktioner såsom switchover, overvågning og avancerede funktioner, der kan tilbyde flere administrationsmuligheder for din MySQL-databaseklynge. Nedenfor vil vi gennemgå de mest almindelige, som du kan bruge.

Brug af MHA (Master High Availability)

Vi har taget dette emne med MHA med dets mest almindelige problemer og hvordan man løser dem. Vi har også sammenlignet MHA med MRM eller med MaxScale.

Opsætning med MHA for høj tilgængelighed er måske ikke let, men det er effektivt at bruge og fleksibelt, da der er justerbare parametre, du kan definere for at tilpasse din failover. MHA er blevet testet og brugt. Men efterhånden som teknologien udvikler sig, har MHA været bagud, da den ikke understøtter GTID til MariaDB, og den har ikke presset nogen opdateringer i de sidste 2 eller 3 år.

Ved at køre masterha_manager-scriptet 

masterha_manager --conf=/etc/app1.cnf

Hvor en prøve /etc/app1.cnf skal se ud som følger,

[server default]

user=cmon

password=pass

ssh_user=root

# working directory on the manager

manager_workdir=/var/log/masterha/app1

# working directory on MySQL servers

remote_workdir=/var/log/masterha/app1

[server1]

hostname=node1

candidate_master=1

[server2]

hostname=node2

candidate_master=1

[server3]

hostname=node3

no_master=1

Parametre såsom no_master og candidate_master skal være afgørende, da du indstiller hvidlistede ønskede noder til at være din målmaster og noder, som du ikke ønsker at være en master.

Når du er indstillet, er du klar til at have failover for din MySQL-database, hvis der opstår fejl på den primære eller master. Scriptet masterha_manager administrerer failover (automatisk eller manuel), tager beslutninger om hvornår og hvor der skal failover, og administrerer slavegendannelse under promovering af kandidatmasteren for at anvende differentielle relælogfiler. Hvis masterdatabasen dør, vil MHA Manager koordinere med MHA Node-agenten, da den anvender differentielle relælogfiler til de slaver, der ikke har de seneste binlog-hændelser fra masteren.

Tjek, hvad MHA Node-agent gør, og dets involverede scripts. Dybest set er det scriptet, som MHA-administratoren vil påberåbe sig, når failover opstår. Den vil vente på sit mandat fra MHA Manager, mens den søger efter den seneste slave, der indeholder binlog-begivenhederne og kopierer manglende hændelser fra slaven ved hjælp af scp og anvender dem på sig selv. Som nævnt anvender den relælogs, renser relælogfiler eller gemmer binære logfiler.

Hvis du vil vide mere om parametre, der kan indstilles, og hvordan du tilpasser din failover-styring, kan du tjekke Parameters wiki-siden for MHA.

Brug af Orchestrator

Orchestrator er et MySQL- og MariaDB-værktøj til styring af høj tilgængelighed og replikering. Den er udgivet af Shlomi Noach under betingelserne i Apache-licensen, version 2.0. Dette er en open source-software og håndterer automatisk failover, men der er tonsvis af ting, du kan tilpasse eller gøre for at administrere din MySQL/MariaDB-database bortset fra gendannelse eller automatisk failover.

Installation af Orchestrator kan være let eller ligetil. Når du har downloadet de specifikke pakker, der kræves til dit målmiljø, er du klar til at registrere din klynge og noder, der skal overvåges af Orchestrator. Det giver en brugergrænseflade, som dette er meget let at administrere, men har masser af justerbare parametre eller sæt kommandoer, som du kan bruge til at opnå din failover-styring.

Lad os overveje, at du endelig har opsat og Registrering af klyngen ved at tilføje vores primære eller masterknude kan gøres ved hjælp af kommandoen nedenfor,

$ orchestrator -c discover -i pupnode21:3306

2021-01-07 12:32:31 DEBUG Hostname unresolved yet: pupnode21

2021-01-07 12:32:31 DEBUG Cache hostname resolve pupnode21 as pupnode21

2021-01-07 12:32:31 DEBUG Connected to orchestrator backend: orchestrator:[email protected](127.0.0.1:3306)/orchestrator?timeout=1s

2021-01-07 12:32:31 DEBUG Orchestrator pool SetMaxOpenConns: 128

2021-01-07 12:32:31 DEBUG Initializing orchestrator

2021-01-07 12:32:31 INFO Connecting to backend 127.0.0.1:3306: maxConnections: 128, maxIdleConns: 32

2021-01-07 12:32:31 DEBUG Hostname unresolved yet: 192.168.40.222

2021-01-07 12:32:31 DEBUG Cache hostname resolve 192.168.40.222 as 192.168.40.222

2021-01-07 12:32:31 DEBUG Hostname unresolved yet: 192.168.40.223

2021-01-07 12:32:31 DEBUG Cache hostname resolve 192.168.40.223 as 192.168.40.223

pupnode21:3306

Nu har vi tilføjet vores klynge.

Hvis en primær node fejler (hardwarefejl eller stødt på nedbrud), vil Orchestrator finde og finde den mest avancerede node, der skal forfremmes som den primære eller master node.

Nu har vi to noder tilbage i klyngen, mens den primære er nede .

$ orchestrator-client -c topology -i pupnode21:3306

pupnode21:3306 [unknown,invalid,10.3.27-MariaDB-log,rw,ROW,>>,downtimed]

$ orchestrator-client -c topology -i pupnode22:3306

pupnode22:3306   [0s,ok,10.3.27-MariaDB-log,rw,ROW,>>]

+ pupnode23:3306 [0s,ok,10.3.27-MariaDB-log,ro,ROW,>>,GTID]

Brug af MaxScale

MariaDB MaxScale er blevet understøttet som en databasebelastningsbalancer. I løbet af årene er MaxScale vokset og modnet, udvidet med adskillige rige funktioner, og det inkluderer automatisk failover. Siden MariaDB MaxScale 2.2 blev udgivet, introducerer den adskillige nye funktioner, herunder styring af replikeringsklynge-failover. Du kan læse vores tidligere blog om MaxScale failover-mekanisme.

Brug af MaxScale er under BSL, selvom softwaren er frit tilgængelig, men kræver, at du i det mindste køber service med MariaDB. Det er måske ikke egnet, men i tilfælde af at du har erhvervet MariaDB enterprise services, så kan dette være en stor fordel, hvis du har brug for failover-styring og dens andre funktioner.

Installation af MaxScale er let, men opsætning af den nødvendige konfiguration og definering af dens parametre er det ikke, og det kræver, at du skal forstå softwaren. Du kan se deres konfigurationsvejledning.

For hurtig og hurtig implementering kan du bruge ClusterControl til at installere MaxScale for dig i dit eksisterende MySQL/MariaDB-miljø.

Når den er installeret, kan opsætning af din Moodle-database gøres ved at pege din vært på MaxScale IP eller værtsnavn og læse-skriveporten. For eksempel,

For hvilken port 4008 er din læse-skrive til din tjenestelytter. For eksempel, her er følgende service- og lyttekonfiguration for min MaxScale.

$ cat maxscale.cnf.d/rw-listener.cnf

[rw-listener]

type=listener

protocol=mariadbclient

service=rw-service

address=0.0.0.0

port=4008

authenticator=MySQLAuth



$ cat maxscale.cnf.d/rw-service.cnf

[rw-service]

type=service

servers=DB_123,DB_122,DB_124

router=readwritesplit

user=maxscale_adm

password=42BBD2A4DC1BF9BE05C41A71DEEBDB70

max_slave_connections=100%

max_sescmd_history=15000000

causal_reads=true

causal_reads_timeout=10

transaction_replay=true

transaction_replay_max_size=32Mi

delayed_retry=true

master_reconnection=true

max_connections=0

connection_timeout=0

use_sql_variables_in=master

master_accept_reads=true

disable_sescmd_history=false

Mens du er i din skærmkonfiguration, må du ikke glemme at aktivere den automatiske failover eller også aktivere auto rejoin, hvis du ønsker, at den tidligere master ikke automatisk kan tilslutte sig igen, når du går online igen. Det går sådan her,

$ egrep -r 'auto|^\['  maxscale.cnf.d/replication_monitor.cnf

[replication_monitor]

auto_failover=true

auto_rejoin=1

Bemærk, at de variabler, jeg har angivet, ikke er beregnet til produktionsbrug, men kun til dette blogindlæg og testformål. Det gode med MaxScale, når først den primære eller master går ned, er MaxScale smart nok til at fremme den ideelle eller bedste kandidat til at tage rollen som master. Derfor er det ikke nødvendigt at ændre din IP og port, da vi har brugt værten/IP'en for vores MaxScale node og dens port som vores slutpunkt, når masteren går ned. For eksempel,

[192.168.40.223:6603] MaxScale> list servers



┌────────┬────────────────┬──────┬─────────────┬─────────────────┬──────────────────────────┐

│ Server │ Address        │ Port │ Connections │ State           │ GTID                     │

├────────┼────────────────┼──────┼─────────────┼─────────────────┼──────────────────────────┤

│ DB_124 │ 192.168.40.223 │ 3306 │ 0           │ Slave, Running  │ 3-2003-876,5-2001-219541 │

├────────┼────────────────┼──────┼─────────────┼─────────────────┼──────────────────────────┤

│ DB_123 │ 192.168.40.221 │ 3306 │ 0           │ Master, Running │ 3-2003-876,5-2001-219541 │

├────────┼────────────────┼──────┼─────────────┼─────────────────┼──────────────────────────┤

│ DB_122 │ 192.168.40.222 │ 3306 │ 0           │ Slave, Running  │ 3-2003-876,5-2001-219541 │

└────────┴────────────────┴──────┴─────────────┴─────────────────┴──────────────────────────┘

Node DB_123, som peger på 192.168.40.221, er den aktuelle master. Afslutning af noden DB_123 vil udløse MaxScale til at udføre en failover, og det skal se sådan ud,

[192.168.40.223:6603] MaxScale> list servers



┌────────┬────────────────┬──────┬─────────────┬─────────────────┬──────────────────────────┐

│ Server │ Address        │ Port │ Connections │ State           │ GTID                     │

├────────┼────────────────┼──────┼─────────────┼─────────────────┼──────────────────────────┤

│ DB_124 │ 192.168.40.223 │ 3306 │ 0           │ Slave, Running  │ 3-2003-876,5-2001-219541 │

├────────┼────────────────┼──────┼─────────────┼─────────────────┼──────────────────────────┤

│ DB_123 │ 192.168.40.221 │ 3306 │ 0           │ Down            │ 3-2003-876,5-2001-219541 │

├────────┼────────────────┼──────┼─────────────┼─────────────────┼──────────────────────────┤

│ DB_122 │ 192.168.40.222 │ 3306 │ 0           │ Master, Running │ 3-2003-876,5-2001-219541 │

└────────┴────────────────┴──────┴─────────────┴─────────────────┴──────────────────────────┘

Mens vores Moodle-database stadig er oppe og køre, da vores MaxScale peger på den seneste master, der blev promoveret.

$ mysql -hmaxscale.local.domain -umoodleuser -pmoodlepassword -P4008

Welcome to the MariaDB monitor.  Commands end with ; or \g.

Your MariaDB connection id is 9

Server version: 10.3.27-MariaDB-log MariaDB Server



Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others.



Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.



MariaDB [(none)]> select @@hostname;

+------------+

| @@hostname |

+------------+

| 192.168.40.222  |

+------------+

1 row in set (0.001 sec)

Brug af ClusterControl

ClusterControl kan downloades gratis og tilbyder licenser til Community, Advance og Enterprise. Den automatiske failover er kun tilgængelig på Advance og Enterprise. Automatisk failover er dækket af vores Auto-Recovery-funktion, som forsøger at gendanne en mislykket klynge eller en mislykket node. Hvis du vil have flere detaljer om, hvordan du udfører dette, så tjek vores tidligere indlæg How ClusterControl udfører automatisk databasegendannelse og failover. Det tilbyder indstillelige parametre, som er meget praktiske og nemme at bruge. Læs venligst vores tidligere indlæg også om Sådan automatiseres databasefailover med ClusterControl.

Administration af din automatiske failover for din Moodle-database skal som minimum kræve en virtuel IP (VIP) som dit slutpunkt for din Moodle-applikationsklient, der har grænseflade til din database-backend. For at gøre dette kan du implementere Keepalived med HAProxy (eller ProxySQL - afhænger af dit valg af load balancer) ovenpå. I dette tilfælde skal dit Moodle-databaseslutpunkt pege på den virtuelle IP, som dybest set er tildelt af Keepalved, når du har implementeret den, på samme måde som vi viste dig tidligere, da vi satte MaxScale op. Du kan også tjekke denne blog om, hvordan du gør det.

Som nævnt ovenfor er tunbare parametre tilgængelige, som du bare kan indstille via din /etc/cmon.d/cmon_.cnf placeret i din ClusterControl-vært, hvor CLUSTER_ID er id'et for din klynge. Dette er de parametre, som vil hjælpe dig med at administrere din autofailover mere effektivt,

  • replication_check_binlog_filtration_bf_failover
  • replication_check_external_bf_failover
  • replication_failed_reslave_failover_script
  • replication_failover_blacklist
  • replication_failover_events
  • replication_failover_wait_to_apply_timeout
  • replication_failover_whitelist
  • replication_onfail_failover_script
  • Replication_post_failover_script
  • replication_post_unsuccessful_failover_script
  • replication_pre_failover_script
  • replication_skip_apply_missing_txs
  • replikeringsstop_ved_fejl

ClusterControl er meget fleksibel, når du administrerer failover, så du kan udføre nogle præ-failover eller post-failover opgaver.

Konklusion

Der er andre gode valg, når du opsætter og automatisk administrerer din failover for din MySQL-database til Moodle. Det afhænger af dit budget og hvad du sandsynligvis skal bruge penge til. Brug af open source-systemer kræver ekspertise og kræver flere tests for at blive fortrolige, da der ikke er nogen support, du kan køre, når du har brug for hjælp ud over fællesskabet. Med virksomhedsløsninger kommer det med en pris, men det giver dig støtte og lethed, da det tidskrævende arbejde kan mindskes. Vær opmærksom på, at hvis failover bruges fejlagtigt, kan det koste skade på din database, hvis det ikke håndteres og administreres korrekt. Fokuser på, hvad der er vigtigere, og hvordan du er i stand til de løsninger, du bruger til at administrere din Moodle-database-failover.


  1. Hvordan undgår man flere funktionsevaler med (func()).*-syntaksen i en SQL-forespørgsel?

  2. Oracle:Opdatering af en tabelkolonne ved hjælp af ROWNUM i forbindelse med ORDER BY-sætning

  3. Hvor er mit ugyldige tegn (ORA-00911)

  4. ORA-00933:SQL-kommando blev ikke afsluttet korrekt