La manera d'iniciar un clúster Galera de MySQL o de MariaDB és diferent de la d'un MySQL estàndard o un clúster MySQL. Galera requereix un node arrencat al clúster com a punt de referència abans que els nodes restants s'hi puguin unir i formar part del clúster. Aquest procés es coneix com a Bootstrap. Bootstrapping és el pas inicial per introduir un node de base de dades com a component principal, abans que els altres el vegin com un punt de referència per sincronitzar dades.
Com funciona?
Quan Galera s'inicia amb l'ordre d'arrencada en un node, aquest node en particular assolirà l'estat principal (comprova el valor de wsrep_cluster_status). Els nodes restants només requeriran una ordre d'inici normal i cercaran automàticament el component principal (PC) existent al clúster i s'hi uniran per formar un clúster. A continuació, la sincronització de dades es produeix mitjançant una transferència d'estat incremental (IST) o una transferència d'estat d'instantània (SST) entre el node que s'hi uneix i el donant.
Bàsicament, només has d'arrencar el clúster si vols iniciar un clúster nou o quan cap altre node del clúster no es troba en estat PRIMARI. Cal anar amb compte a l'hora de triar l'acció que s'ha de dur a terme; altrament, podries acabar amb clústers dividits o amb pèrdua de dades.
Com iniciar Galera Clúster?
Els diferents clústers Galera utilitzen ordres d'arrencada diferents (segons l'última versió del programari). Al primer node, executa:
# galera_new_cluster# service mysql bootstrap
# service mysql start --wsrep-new-cluster
# mysqld_safe --wsrep-new-cluster# galera_new_cluster# service mysql bootstrap
# service mysql start --wsrep-new-cluster
# mysqld_safe --wsrep-new-cluster# systemctl start mysql@bootstrap.service# service mysql bootstrap-pxcL'ordre anterior és només un embolcall i el que fa realment és iniciar la instància de MySQL en aquest node amb gcomm:// com a variable wsrep_cluster_address. També pots definir manualment les variables dins de my.cnf i executar l'ordre estàndard d'inici/reinici. Tanmateix, no oblidis tornar a canviar wsrep_cluster_address perquè contingui les adreces de tots els nodes després de l'inici.
Quan un node principal estigui actiu, simplement executa l'ordre següent als nodes posteriors:
# systemctl start mysql# service mysql startEl node nou es connecta als membres del clúster segons el que defineix el paràmetre wsrep_cluster_address . Ara recuperarà automàticament el mapa del clúster i es connectarà amb la resta dels nodes, formant un clúster.
Advertiment: no arrenquis mai quan vulguis tornar a connectar un node a un clúster existent i no executis MAI l'arrencada en més d'un node alhora.
Indicador d'arrencada segura
Galera, a partir de la versió 3.19, inclou un indicador nou anomenat "safe_to_bootstrap" dins de grastate.dat. Aquest indicador facilita la decisió i evita eleccions insegures fent un seguiment de l'ordre en què s'aturen els nodes. L'últim node que s'ha apagat es marcarà com a "Safe-to-Bootstrap". Tots els altres nodes es marcaran com a no segurs per arrencar.
Si observes el contingut de grastate.dat (el valor predeterminat és MySQL datadir):
# cat /var/lib/mysql/grastate.datHauries de veure l'indicador a l'última línia (seqno):
# Estat desat de GALERA
version: 2.1
uuid: 8bcf4a34-aedb-14e5-bcc3-d3e36277729f
seqno: 2575
safe_to_bootstrap: 0En iniciar el clúster nou, Galera es negarà a iniciar el primer node que s'hagi marcat com a no segur per a l'arrencada. Veuràs el missatge següent als registres:
“Pot ser que no sigui segur arrencar el clúster des d'aquest node. No va ser l'últim a abandonar el clúster i és possible que no contingui totes les actualitzacions.
Per forçar l'arrencada del clúster amb aquest node, edita el fitxer grastate.dat manualment i estableix safe_to_bootstrap a 1”.
En cas d'una aturada incorrecta o d'una fallada total, tots els nodes tindran "safe_to_bootstrap: 0", de manera que hauràs de consultar el motor d'emmagatzematge InnoDB per determinar quin node ha confirmat l'última transacció al clúster. Això es pot aconseguir iniciant mysqld amb la variable “–wsrep-recover” en cadascun dels nodes:
# mysqld --user=root --wsrep_recoverAixò produeix una sortida com aquesta:
...
2022-10-06 05:43:22 36311 [Note] InnoDB: Database was not shutdown normally!
2022-10-06 05:43:22 36311 [Note] InnoDB: Starting crash recovery.
...
2022-10-06 05:43:23 36311 [Note] WSREP: Recovered position: 8bcf4a34-aedb-14e5-bcc3-d3e36277729f:114428
...El número després de la cadena UUID a la línia "Posició recuperada" és el que has de cercar. Tria el node que tingui el número més alt i edita el seu grastate.dat per configurar "safe_to_bootstrap: 1", com es mostra a l'exemple següent:
# Estat desat de GALERA
version: 2.1
uuid: 8bcf4a34-aedb-14e5-bcc3-d3e36277729f
seqno: -1
safe_to_bootstrap: 1A continuació, pots executar l'ordre d'arrencada estàndard al node triat.
Què passa si els nodes han divergit?
En determinades circumstàncies, els nodes poden haver divergit els uns dels altres. L'estat de tots els nodes pot esdevenir No principal a causa de la divisió de la xarxa entre els nodes, d'una fallada del clúster o si Galera troba una excepció en determinar el Component principal. A continuació, hauràs de seleccionar un node i promoure'l perquè sigui un component principal.
Per determinar quin node s'ha d'arrencar, compara el valor de wsrep_last_committed en tots els nodes de la base de dades:
node1> SHOW STATUS LIKE 'wsrep_%';
+----------------------+-------------+
| Variable_name | Value |
+----------------------+-------------+
| wsrep_last_committed | 10032 |
...
| wsrep_cluster_status | non-Primary |
+----------------------+-------------+node2> SHOW STATUS LIKE 'wsrep_%';
+----------------------+-------------+
| Variable_name | Value |
+----------------------+-------------+
| wsrep_last_committed | 10348 |
...
| wsrep_cluster_status | non-Primary |
+----------------------+-------------+node3> SHOW STATUS LIKE 'wsrep_%';
+----------------------+-------------+
| Variable_name | Value |
+----------------------+-------------+
| wsrep_last_committed | 997 |
...
| wsrep_cluster_status | non-Primary |
+----------------------+-------------+Dels resultats anteriors, el node 2 té les dades més actualitzades. En aquest cas, tots els nodes de Galera ja estan iniciats, de manera que no cal tornar a arrencar el clúster. Només hauràs de promoure el node 2 perquè sigui un component principal:
node2> SET GLOBAL wsrep_provider_options="pc.bootstrap=1";Els nodes restants es tornaran a connectar al component principal (node 2) i resincronitzaran les seves dades en funció d'aquest node.
Fonts Documentació de MariaDB Galera Cluster, Severalnines i Documentació dels productes de Percona.
Recorda, si tens consultes sobre aquesta qüestió o qualsevol altra relacionada amb els teus servidors a Clouding, no dubtis a escriure a soporte@clouding.io Som al teu costat per al que necessitis!