Kleines Update, große Wirkung – MariaDB-Galera-Server 5.5.34 auf 5.5.35

Heute wollte ich meinen kleinen MariaDB Galera Cluster updaten. Genutzt werden die Pakete aus dem offiziellen MariaDB-Repository, die Versionsnummern ließen zunächst nichts Aufregendes vermuten.

Also mal eben ein apt-get upgrade ausgeführt. Und… MariaDB ließ sich nicht mehr starten. Da dies beim Upgrade-Prozess ausgelöst worden war, konnte dieser ebenfalls nicht beendet werden.

Das Logfile des btreffenden Nodes zeigte neben vielen anderen Meldungen unter anderem folgende Warnungen und Fehler:

Zuvor hatte ich versucht, den updateten Node nur mit einem expliziten anderen verbinden zu lassen (daher hier gcomm://192.168.10.62), aber kein Erfolg. Die Verbindung auf Port 4567 klappte, alle anderen Nodes waren verfügbar. Die Fehlermeldung von wegen „Connection timed out“ usw. (siehe oben) förderten bei Google auch nur zutage, dass sich der Node nicht mit den anderen verbinden kann, aus verschiedenen Gründen. Die Tipps, etwa einen Node zum Primary Node küren, Firewall abschalten usw. führten jedoch nicht zum Erfolg.

Ohne Verbindung zu anderen Nodes ließ sich MariaDB starten, d.h. ein service mysql start --wsrep-cluster-address=gcomm:// hatte funktioniet, aber in dem Fall wurde auch nichts repliziert, bzw. der Cluster hätte neu aufgebaut werden müssen, was hier nicht zielführend war.

Erst der Blick ins Logfile der anderen Nodes führte zur Lösung, denn darin war folgendes zu finden:

mysqld: 140217 13:15:40 [Warning] WSREP: unserialize error invalid flags 2: 71 (Protocol error)

Nun fand Google dabei den entscheidenden Hinweis bei Serverfault.
Die Lösung: Beim vermeintlich kleinen Update von MariaDB-Galera-Server 5.5.34 auf MariaDB-Galera-Server 5.5.35 bzw. genau genommen dem Update von Galera [23.2.7-wheezy] auf 25.3.2-wheezy wird die neuere Galera Version installiert. Die MariaDB-Release-Notes schreiben dazu „This version of MariaDB Galera Cluster supports wsrep API v25 which means MariaDB Galera Cluster can be used with either a 25.2.x or 25.3.x Galera wsrep provider. A 25.3.x wsrep provider is included in the MariaDB repositories.“

Das klingt nun weniger spektakulär als es sich ausgewirkt hat. Die Lösung bestand nun darin, auf dem updateten Node den Eintrag
wsrep_provider_options = 'socket.checksum = 1;'
in die my.cnf bzw. conf.d/galera.cnf oder ähnliche einzusetzen. Damit wird der Algorithmus für die Prüfsumme der Netzwerk-Pakete wieder auf plain CRC32 (von Galera 2.x verwendet) gesetzt, während die Default-Einstellung für Galera 3.x CRC32-C (hardwarebeschleunigt) ist. Weitere Hinweise zu den Konfigurationsparametern finden sich im Codership-Wiki. Zum Galera Cluster Update allgemein gibt es im folgenden Blog-Eintrag einige Tipps.

Danach konnte sich der updatete Node wieder mit den anderen Nodes im Cluster verbinden, die Replikation war wieder aktiv. Die anderen Nodes liefen während des Ausfalls unbeeindruckt weiter, insofern hatte der Cluster damit auch seine grundsätzliche Funktionalität beweisen können.

Die nächsten Schritte bestanden nun darin, vor dem Upgrade den o.g. Parameter in die Config-Datei zu platzieren, damit die neuen MariaDB-Server- und Galera-Versionen installiert werden konnten. Damit das neue CRC-Protokoll durchgängig verwendet werden kann, musste der Cluster danach einmal kurz komplett herunter gefahren und – nun entweder mit der Einstellung ’socket.checksum = 2;‘ für Galera 3.x oder unter Verzicht dieser Option – neu aufgebaut werden.

Ähnliche Beiträge

Tags:

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.