Manchmal kann es notwendig sein einen ganzen Galera Cluster herunterzufahren (etwa um offline Snapshots zu machen) und dann wieder hochzufahren.
Wenn dies geordnet passiert, gibt es danach auch keine „Split-Brain“ Situationen.
Inhalt
Shutdown Galera Cluster
Zunächst sollte überprüft werden, dass der Cluster vollständig synchron ist (auf jedem Knoten):
mysql -e 'SHOW STATUS LIKE "wsrep_cluster_size";' # Sollte die Anzahl der CLuster Nodes anzeigen
mysql -e 'SHOW STATUS LIKE "wsrep_local_state_comment";' # Sollte 'Synced' anzeigen
Oder mit Ansible:
ansible galera_db -a "mysql -e 'SHOW STATUS LIKE \"wsrep_cluster_size\";'" |grep wsrep_cluster_size
ansible galera_db -a "mysql -e 'SHOW STATUS LIKE \"wsrep_local_state_comment\";'" |grep wsrep_local_state_comment
Danach wird ein Node nach dem anderen heruntergefahren und zwar in absteigender Reihenfolge (also z.B.: node3, node2, node1):
ansible galera-node3 -m community.general.shutdown
ansible galera-node2 -m community.general.shutdown
ansible galera-node1 -m community.general.shutdown
Hinweis: Am besten man wartet jeweils bei jedem Host, bis dieser vollständig heruntergefahren ist.
Start Galera Cluster
Wichtig
Nur ein Node darf initial gestartet werden – der sog. „bootstrap Node“. Alle anderen verbinden sich danach automatisch zu ihm.
Nun wird der erste node wieder gestartet (die anderen bleiben noch aus!).
Danach auf dem Node in der Datei: /var/lib/mysql/grastate.dat
nachsehen ob safe_to_bootstrap: 1
drin steht um zu verifizieren, dass der Node zuletzt sauber gestoppt wurde:
grep 'safe_to_bootstrap' /var/lib/mysql/grastate.dat
Dieser Node darf nun als erster gebootstrapped werden, in dem der Befehl galera_new_cluster
ausgeführt wird:
galera_new_cluster
Danach können alle anderen Nodes nacheinander normal gestartet werden.
Bevor man jeweils den nächsten Node startet sollte überprüft werden, dass der Cluster vollständig synchron ist:
mysql -e 'SHOW STATUS LIKE "wsrep_cluster_%";' | egrep 'wsrep_cluster_size|wsrep_cluster_status'
wsrep_cluster_size
sollte die bisherige Anzahl der gestarteten Nodes zeigen.wsrep_cluster_status
sollte auf allen NodesPrimary
sein.
Oder mit Ansible:
ansible galera_db -a "mysql -e 'SHOW STATUS LIKE \"wsrep_cluster_%\";'" | egrep 'wsrep_cluster_size|wsrep_cluster_status'