[ English | Deutsch | Indonesia | русский | English (United Kingdom) ]
Galera-Cluster-Wartung¶
Die routinemäßige Wartung umfasst das Hinzufügen oder Entfernen von Knoten aus dem Cluster ohne Auswirkungen auf den Betrieb und das Starten eines Clusters nach dem ordnungsgemäßen Herunterfahren aller Knoten.
MySQL-Instanzen werden beim Erstellen eines Clusters neu gestartet, wenn ein Knoten hinzugefügt wird, wenn der Dienst nicht ausgeführt wird oder wenn Änderungen an der Konfigurationsdatei /etc/mysql/my.cnf
vorgenommen werden.
Überprüfen Sie den Clusterstatus¶
Vergleichen Sie die Ausgabe des folgenden Befehls mit der folgenden Ausgabe. Es sollte Ihnen Informationen über den Status Ihres Clusters geben.
# ansible galera_container -m shell -a "mariadb \
-e 'show status like \"%wsrep_cluster_%\";'"
node3_galera_container-3ea2cbd3 | FAILED | rc=1 >>
ERROR 2002 (HY000): Can't connect to local MySQL server
through socket '/var/run/mysqld/mysqld.sock' (2)
node2_galera_container-49a47d25 | FAILED | rc=1 >>
ERROR 2002 (HY000): Can't connect to local MySQL server
through socket '/var/run/mysqld/mysqld.sock' (2)
node4_galera_container-76275635 | success | rc=0 >>
Variable_name Value
wsrep_cluster_conf_id 7
wsrep_cluster_size 1
wsrep_cluster_state_uuid 338b06b0-2948-11e4-9d06-bef42f6c52f1
wsrep_cluster_status Primary
In diesem Beispiel hat nur ein Knoten geantwortet.
Wenn der MariaDB-Dienst auf allen außer einem Knoten ordnungsgemäß heruntergefahren wird, kann der verbleibende operative Knoten SQL-Anforderungen weiter verarbeiten. Wenn Sie mehrere Knoten ordnungsgemäß herunterfahren, führen Sie die Aktionen nacheinander aus, um den Vorgang beizubehalten.
Starten Sie einen Cluster¶
Wenn Sie alle Knoten ordnungsgemäß herunterfahren, wird der Cluster zerstört. Das Starten oder Neustarten eines Clusters von null Knoten erfordert das Erstellen eines neuen Clusters auf einem der Knoten.
Starten Sie einen neuen Cluster auf dem am weitesten fortgeschrittenen Knoten. Wechseln Sie in das Verzeichnis
playbooks
und überprüfen Sie den Wertseqno
in der Dateigrastate.dat
auf allen Knoten:# ansible galera_container -m shell -a "cat /var/lib/mysql/grastate.dat" node2_galera_container-49a47d25 | success | rc=0 >> # GALERA saved state version: 2.1 uuid: 338b06b0-2948-11e4-9d06-bef42f6c52f1 seqno: 31 cert_index: node3_galera_container-3ea2cbd3 | success | rc=0 >> # GALERA saved state version: 2.1 uuid: 338b06b0-2948-11e4-9d06-bef42f6c52f1 seqno: 31 cert_index: node4_galera_container-76275635 | success | rc=0 >> # GALERA saved state version: 2.1 uuid: 338b06b0-2948-11e4-9d06-bef42f6c52f1 seqno: 31 cert_index:
In diesem Beispiel enthalten alle Knoten im Cluster die gleichen positiven
seqno
-Werte wie sie vor dem ordnungsgemäßen Herunterfahren synchronisiert wurden. Wenn alleseqno
-Werte gleich sind, kann jeder Knoten den neuen Cluster starten.## for init # /etc/init.d/mariadb start --wsrep-new-cluster ## for systemd # systemctl set-environment _WSREP_NEW_CLUSTER='--wsrep-new-cluster' # systemctl start mariadb # systemctl set-environment _WSREP_NEW_CLUSTER=''
Please also have a look at Starting the Cluster.
This can also be done with the help of Ansible using the shell module:
# ansible galera_container -m shell -a "/etc/init.d/mariadb start --wsrep-new-cluster" --limit galera_container[0]
Dieser Befehl führt zu einem Cluster, das einen einzelnen Knoten enthält. Der Wert
wsrep_cluster_size
gibt die Anzahl der Knoten im Cluster an.node2_galera_container-49a47d25 | FAILED | rc=1 >> ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/var/run/mysqld/mysqld.sock' (111) node3_galera_container-3ea2cbd3 | FAILED | rc=1 >> ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/var/run/mysqld/mysqld.sock' (2) node4_galera_container-76275635 | success | rc=0 >> Variable_name Value wsrep_cluster_conf_id 1 wsrep_cluster_size 1 wsrep_cluster_state_uuid 338b06b0-2948-11e4-9d06-bef42f6c52f1 wsrep_cluster_status Primary
Restart MariaDB on the other nodes (replace [0] from previous Ansible command with [1:]) and verify that they rejoin the cluster.
node2_galera_container-49a47d25 | success | rc=0 >> Variable_name Value wsrep_cluster_conf_id 3 wsrep_cluster_size 3 wsrep_cluster_state_uuid 338b06b0-2948-11e4-9d06-bef42f6c52f1 wsrep_cluster_status Primary node3_galera_container-3ea2cbd3 | success | rc=0 >> Variable_name Value wsrep_cluster_conf_id 3 wsrep_cluster_size 3 wsrep_cluster_state_uuid 338b06b0-2948-11e4-9d06-bef42f6c52f1 wsrep_cluster_status Primary node4_galera_container-76275635 | success | rc=0 >> Variable_name Value wsrep_cluster_conf_id 3 wsrep_cluster_size 3 wsrep_cluster_state_uuid 338b06b0-2948-11e4-9d06-bef42f6c52f1 wsrep_cluster_status Primary
Galera-Cluster-Wiederherstellung¶
Run the openstack.osa.galera_server
playbook using the galera_force_bootstrap
variable
to automatically recover a node or an entire environment.
Führen Sie den folgenden Ansible-Befehl aus, um die ausgefallenen Knoten anzuzeigen:
# openstack-ansible openstack.osa.galera_server -e galera_force_bootstrap=True --tags galera_server-config
You can additionally define a different bootstrap node through
galera_server_bootstrap_node
variable, in case current bootstrap node is in
desynced/broken state. You can check what node is currently selected for
bootstrap using this ad-hoc:
root@aio1:/opt/openstack-ansible# ansible -m debug -a var="groups['galera_all'][0]" localhost
The cluster comes back online after completion of this command. If this fails, please review restarting the cluster and recovering the primary component in the Galera documentation as they’re invaluable for a full cluster recovery.
Wiederherstellen eines Einzelknotenfehlers¶
Wenn ein einzelner Knoten fehlschlägt, behalten die anderen Knoten das Quorum und verarbeiten weiterhin SQL-Anforderungen.
Wechseln Sie in das Verzeichnis
playbooks
und führen Sie den folgenden Ansible-Befehl aus, um den ausgefallenen Knoten zu bestimmen:# ansible galera_container -m shell -a "mariadb \ -e 'show status like \"%wsrep_cluster_%\";'" node3_galera_container-3ea2cbd3 | FAILED | rc=1 >> ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/var/run/mysqld/mysqld.sock' (111) node2_galera_container-49a47d25 | success | rc=0 >> Variable_name Value wsrep_cluster_conf_id 17 wsrep_cluster_size 3 wsrep_cluster_state_uuid 338b06b0-2948-11e4-9d06-bef42f6c52f1 wsrep_cluster_status Primary node4_galera_container-76275635 | success | rc=0 >> Variable_name Value wsrep_cluster_conf_id 17 wsrep_cluster_size 3 wsrep_cluster_state_uuid 338b06b0-2948-11e4-9d06-bef42f6c52f1 wsrep_cluster_status Primary
In diesem Beispiel ist Knoten 3 fehlgeschlagen.
Starten Sie MariaDB auf dem fehlgeschlagenen Knoten neu, und vergewissern Sie sich, dass es erneut dem Cluster beitritt.
If MariaDB fails to start, run the
mariadbd
command and perform further analysis on the output. As a last resort, rebuild the container for the node.
Stellen Sie einen Fehler mit mehreren Knoten wieder her¶
Wenn alle Knoten bis auf einen Knoten fehlschlagen, kann der verbleibende Knoten das Quorum nicht erreichen und die Verarbeitung von SQL-Anfragen beendet werden. In diesem Fall können ausgefallene Knoten, die wiederhergestellt werden, dem Cluster nicht beitreten, da er nicht mehr vorhanden ist.
Führen Sie den folgenden Ansible-Befehl aus, um die ausgefallenen Knoten anzuzeigen:
# ansible galera_container -m shell -a "mariadb \ -e 'show status like \"%wsrep_cluster_%\";'" node2_galera_container-49a47d25 | FAILED | rc=1 >> ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/var/run/mysqld/mysqld.sock' (111) node3_galera_container-3ea2cbd3 | FAILED | rc=1 >> ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/var/run/mysqld/mysqld.sock' (111) node4_galera_container-76275635 | success | rc=0 >> Variable_name Value wsrep_cluster_conf_id 18446744073709551615 wsrep_cluster_size 1 wsrep_cluster_state_uuid 338b06b0-2948-11e4-9d06-bef42f6c52f1 wsrep_cluster_status non-Primary
In diesem Beispiel sind die Knoten 2 und 3 fehlerhaft. Der verbleibende betriebsfähige Server zeigt
non-Primary
an, da er das Quorum nicht erreichen kann.Run the following command to rebootstrap the operational node into the cluster:
# mariadb -e "SET GLOBAL wsrep_provider_options='pc.bootstrap=yes';" node4_galera_container-76275635 | success | rc=0 >> Variable_name Value wsrep_cluster_conf_id 15 wsrep_cluster_size 1 wsrep_cluster_state_uuid 338b06b0-2948-11e4-9d06-bef42f6c52f1 wsrep_cluster_status Primary node3_galera_container-3ea2cbd3 | FAILED | rc=1 >> ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/var/run/mysqld/mysqld.sock' (111) node2_galera_container-49a47d25 | FAILED | rc=1 >> ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/var/run/mysqld/mysqld.sock' (111)
Der verbleibende operative Knoten wird zum primären Knoten und beginnt mit der Verarbeitung von SQL-Anfragen.
Starten Sie MariaDB auf den ausgefallenen Knoten neu und vergewissern Sie sich, dass sie dem Cluster wieder beitreten:
# ansible galera_container -m shell -a "mariadb \ -e 'show status like \"%wsrep_cluster_%\";'" node3_galera_container-3ea2cbd3 | success | rc=0 >> Variable_name Value wsrep_cluster_conf_id 17 wsrep_cluster_size 3 wsrep_cluster_state_uuid 338b06b0-2948-11e4-9d06-bef42f6c52f1 wsrep_cluster_status Primary node2_galera_container-49a47d25 | success | rc=0 >> Variable_name Value wsrep_cluster_conf_id 17 wsrep_cluster_size 3 wsrep_cluster_state_uuid 338b06b0-2948-11e4-9d06-bef42f6c52f1 wsrep_cluster_status Primary node4_galera_container-76275635 | success | rc=0 >> Variable_name Value wsrep_cluster_conf_id 17 wsrep_cluster_size 3 wsrep_cluster_state_uuid 338b06b0-2948-11e4-9d06-bef42f6c52f1 wsrep_cluster_status Primary
If MariaDB fails to start on any of the failed nodes, run the
mariadbd
command and perform further analysis on the output. As a last resort, rebuild the container for the node.
Wiederherstellen eines vollständigen Umgebungsfehlers¶
Von der Sicherung wiederherstellen, wenn alle Knoten in einem Galera-Cluster fehlschlagen (nicht ordnungsgemäß herunterfahren). Wechseln Sie in das Verzeichnis playbook
und führen Sie den folgenden Befehl aus, um festzustellen, ob alle Knoten im Cluster ausgefallen sind:
# ansible galera_container -m shell -a "cat /var/lib/mysql/grastate.dat"
node3_galera_container-3ea2cbd3 | success | rc=0 >>
# GALERA saved state
version: 2.1
uuid: 338b06b0-2948-11e4-9d06-bef42f6c52f1
seqno: -1
cert_index:
node2_galera_container-49a47d25 | success | rc=0 >>
# GALERA saved state
version: 2.1
uuid: 338b06b0-2948-11e4-9d06-bef42f6c52f1
seqno: -1
cert_index:
node4_galera_container-76275635 | success | rc=0 >>
# GALERA saved state
version: 2.1
uuid: 338b06b0-2948-11e4-9d06-bef42f6c52f1
seqno: -1
cert_index:
All the nodes have failed if mariadbd
is not running on any of the
nodes and all of the nodes contain a seqno
value of -1.
Wenn ein einzelner Knoten einen positiven Wert seqno
hat, kann dieser Knoten zum Neustarten des Clusters verwendet werden. Da jedoch nicht garantiert werden kann, dass jeder Knoten über eine identische Kopie der Daten verfügt, wird nicht empfohlen, den Cluster mit dem Befehl --wsrep-new-cluster
auf einem Knoten neu zu starten.
Erstellen Sie einen Container neu¶
Das Wiederherstellen bestimmter Fehler erfordert die Neuerstellung eines oder mehrerer Container.
Deaktivieren Sie den ausgefallenen Knoten im Lastenausgleichsmodul.
Bemerkung
Verlassen Sie sich nicht auf die Systemüberprüfungen für den Lastenausgleich, um den Knoten zu deaktivieren. Wenn der Knoten nicht inaktiviert ist, sendet der Load Balancer SQL-Anforderungen an ihn, bevor er dem Cluster wieder beitritt und Dateninkonsistenzen verursacht.
Zerstören Sie den Container und entfernen Sie MariaDB-Daten, die außerhalb des Containers gespeichert sind:
# openstack-ansible openstack.osa.containers_lxc_destroy \ -l node3_galera_container-3ea2cbd3
In diesem Beispiel ist Knoten 3 fehlgeschlagen.
Führen Sie das Host-Setup-Playbook aus, um den Container auf Knoten 3 neu zu erstellen:
# openstack-ansible oopenstack.osa.containers_lxc_create -l node3 \ -l node3_galera_container-3ea2cbd3
Das Playbook startet alle anderen Container auf dem Knoten neu.
Führen Sie das Infrastruktur-Playbook aus, um den Container speziell auf Knoten 3 zu konfigurieren:
# openstack-ansible openstack.osa.setup_infrastructure \ --limit node3_galera_container-3ea2cbd3
Warnung
Der neue Container führt einen Galera-Cluster mit einem einzelnen Knoten aus. Dies ist ein gefährlicher Zustand, da die Umgebung mehr als eine aktive Datenbank mit möglicherweise unterschiedlichen Daten enthält.
# ansible galera_container -m shell -a "mariadb \ -e 'show status like \"%wsrep_cluster_%\";'" node3_galera_container-3ea2cbd3 | success | rc=0 >> Variable_name Value wsrep_cluster_conf_id 1 wsrep_cluster_size 1 wsrep_cluster_state_uuid da078d01-29e5-11e4-a051-03d896dbdb2d wsrep_cluster_status Primary node2_galera_container-49a47d25 | success | rc=0 >> Variable_name Value wsrep_cluster_conf_id 4 wsrep_cluster_size 2 wsrep_cluster_state_uuid 338b06b0-2948-11e4-9d06-bef42f6c52f1 wsrep_cluster_status Primary node4_galera_container-76275635 | success | rc=0 >> Variable_name Value wsrep_cluster_conf_id 4 wsrep_cluster_size 2 wsrep_cluster_state_uuid 338b06b0-2948-11e4-9d06-bef42f6c52f1 wsrep_cluster_status Primary
Starten Sie MariaDB in dem neuen Container neu, und vergewissern Sie sich, dass es erneut dem Cluster beitritt.
Bemerkung
In larger deployments, it may take some time for the MariaDB daemon to start in the new container. It will be synchronizing data from the other MariaDB servers during this time. You can monitor the status during this process by tailing the
journalctl -f -u mariadb
log file.Zeilen, die mit
WSREP_SST
beginnen, werden während des Synchronisationsprozesses angezeigt und Sie sollten eine Zeile mitWSREP: SST complete, seqno: <NUMBER>
sehen, wenn die Synchronisierung erfolgreich war.# ansible galera_container -m shell -a "mariadb \ -e 'show status like \"%wsrep_cluster_%\";'" node2_galera_container-49a47d25 | success | rc=0 >> Variable_name Value wsrep_cluster_conf_id 5 wsrep_cluster_size 3 wsrep_cluster_state_uuid 338b06b0-2948-11e4-9d06-bef42f6c52f1 wsrep_cluster_status Primary node3_galera_container-3ea2cbd3 | success | rc=0 >> Variable_name Value wsrep_cluster_conf_id 5 wsrep_cluster_size 3 wsrep_cluster_state_uuid 338b06b0-2948-11e4-9d06-bef42f6c52f1 wsrep_cluster_status Primary node4_galera_container-76275635 | success | rc=0 >> Variable_name Value wsrep_cluster_conf_id 5 wsrep_cluster_size 3 wsrep_cluster_state_uuid 338b06b0-2948-11e4-9d06-bef42f6c52f1 wsrep_cluster_status Primary
Aktivieren Sie den zuvor fehlgeschlagenen Knoten im Lastenausgleich.