Leider kommt es auch bei mir mal vor, das irgendwas kaputt geht und ich es dann reparieren muss. Wenn man halbwegs gute Software nutzt geht das eigentlich auch immer ganz gut.
Zuletzt saß ich vor einem MariaDB Galera Cluster, bei dem alle Member gecrasht sind. Das ist so ziemlich das übelste was passieren kann. Zum Glück war grade nicht so viel los und der Prozess gestaltet sich gut umsetzbar.
Zunächst einmal stoppen wir auch allen Knoten den Service
systemctl stop mariadb
Anschließend editieren wir die Datei /etc/my.cnf.d/server.cnf und nehmen alle Member aus der Connection-Liste wsrep_cluster_address. Zum Schluss steht nur noch
wsrep_cluster_address="gcomm://"
drin.
Anschließend starten wir den Dienst wieder. Dazu kontrollieren wir vorher die Datei /var/lib/mysql/grastate.dat ob sie den Wert safe_to_bootstrap: 1 besitzt - sollte dem nicht so sein, so ändern wir dies manuell
sed 's/^safe_to_bootstrap.*/safe_to_bootstrap: 1/' */var/lib/mysql/grastate.dat
Danach geht es weiter - auf allen Knoten!
systemctl start mariadb
Jetzt sind wir in der Lage heraus zu finden, welcher der Member zuletzt etwas sinnvolles getan hat und die höchste TransaktionsID besitzt:
mysql -u root -e "show status like 'wsrep_last_committed';"
Diesen Member schnappen wir uns und machen ihn zum Master für unseren neuen Cluster. Dazu kontrollieren wir die Datei /var/lib/mysql/grastate.dat ob sie den Wert safe_to_bootstrap: 1 besitzt - sollte dem nicht so sein, so ändern wir dies manuell
galera_new_cluster
Nun gehen wir zu den restlichen Knoten und ändern den Wert wsrep_cluster_address wieder zurück auf seinen Ursprünglichen Inhalt. Anschließend starten wir den Dienst neu und schauen im Log nach ob sich was tut und warten auf eine Meldung wie " WSREP: Recovered positi":
systemctl restart mariadb && journalctl -f -u mariadb
Quellen und Links:
Bekanntlich ist der beste Admin faul. Einfach weil er es kann und verstanden hat, das man die Dinge vereinfachen muss die einem begegnen. Wenn einem dazu auch noch ein wenig das eigene Ego überkommt und man es etwas geekig haben möchte, so bietet sich das Tool cluster-ssh zur Serververwaltung von mehreren Linux-Servern gleichzeitig an.
Die Installation ist einfach und man kann recht unkompliziert damit starten seine Server einzutragen. Dabei kommt einem auch zugute, dass es möglich ist Gruppen zu verschachteln.
Am einfachsten ist es, wenn man in seiner $HOME/.clusterssh/clusters die zu verwaltenden Cluster einpflegt.
alle-server cluster1 cluster2 cluster3
cluster1 server1 benutzer@server2
cluster2 111.222.333.444 server42.domain.de
cluster3 geheimserver:2222 root@999.888.777.666:2345
Hier ist auch schön zu sehen, welche Formen der Schreibweise man bei den Hosts angeben kann. Es ist vollkommen egal, ob man allein die IP-Adresse, den FQDN, mit Angabe des Ports oder eines Benutzers oder was auch immer verwendet. Zum Schluss kann man dann alle einzelnen Cluster noch zu übergeordneten Gruppen zusammenführen - das macht es dann nochmals schicker.
Wer langeweile hat, kann sich die Datei $HOME/.clusterssh/config anschauen. Hier können diverse Standardwerte vergeben vorgegeben werden.
Anschließend kann man mit einem einfachen Befehl wie cssh -l root alle-server eine SSH Verbindung zu alle-server aufbauen und durch die Eingabe der Befehle in das kleine Wunderfenster alle-server gleichzeitig bedienen.
Ich mag sowas ja