So installieren Sie MariaDB Galera Cluster unter Ubuntu 16.04 LTS

MariaDB Galera ist ein Multi-Master-Cluster für MariaDB. Seit MariaDB 10.1 werden die Pakete MariaDB Server und MariaDB Galera Server kombiniert und die Pakete Galera und ihre Abhängigkeiten werden bei der Installation von MariaDB automatisch installiert. Derzeit unterstützt MariaDB Galera Cluster nur die InnoDB/XtraDB Storage Engine. In MariaDB 10.0 und 5.5 müssen Sie es separat herunterladen. MariaDB Galera fügt Redundanz für die Datenbank eines Standorts hinzu. Im MariaDB Galera Cluster sind mehrere Datenbankserver miteinander verbunden und bleiben synchron.

MariaDB Galera bietet viele Funktionen, von denen einige unten aufgeführt sind:

  1. Synchrone Replikation.
  2. Automatische Knotenverbindung.
  3. Aktiv-aktive Multi-Master-Topologie.
  4. Echte parallele Replikation auf Zeilenebene.
  5. Skalierbarkeit von Lesen und Schreiben, kleinere Client-Latenzen.
  6. Fehlgeschlagene Knoten, automatischer Ausfall aus dem Cluster.

In diesem Tutorial wird erklärt, wie Sie MariaDB Galera Cluster 10.1 mit 3 Knoten auf dem Ubuntu 16.04 Server einrichten. Wir werden auch die Datenbankreplikation zwischen allen Knoten testen.

Anforderungen

  • Drei Knoten mit Ubuntu 16.04 Server.
  • Node1 mit statischer IP-Adresse 192.168.0.102, Node2 mit statischer IP-Adresse 192.168.0.103 und Node3 mit statischer IP-Adresse 192.168.0.104 konfigurieren auf Ihrem Server.
  • Nicht-Root-Benutzer mit sudo-Rechten, die auf allen Knoten eingerichtet sind.

Erste Schritte

Zuerst müssen Sie alle Knoten mit der neuesten Version aktualisieren. Du kannst sie alle mit dem folgenden Befehl aktualisieren:

sudo apt-get update -y
sudo apt-get upgrade -y

Starten Sie anschließend alle Knoten neu, um diese Änderungen zu übernehmen. Melden Sie sich dann mit sudo user an und fahren Sie mit dem nächsten Schritt fort.

MariaDB Galera installieren

Die Pakete MariaDB Server und MariaDB Galera Server sind in der Version MariaDB 10.1 zusammengefasst. Standardmäßig ist MariaDB 10.1 in den Standard-Ubuntu-Repositorys nicht verfügbar, so dass Sie das MariaDB-Repository auf allen Knoten hinzufügen müssen.

Fügen Sie zunächst den MariaDB-Repository-Schlüssel mit dem folgenden Befehl hinzu:

sudo apt-key adv --recv-keys --keyserver hkp://keyserver.ubuntu.com:80 0xF1656F24C74CD1D8

Als nächstes fügen Sie das Repository hinzu und aktualisieren den APT-Cache mit dem folgenden Befehl:

sudo add-apt-repository 'deb [arch=amd64,i386,ppc64el] http://ftp.utexas.edu/mariadb/repo/10.1/ubuntu xenial main'
sudo apt-get update -y

Sobald das Repository aktualisiert ist, installieren Sie MariaDB mit dem folgenden Befehl:

sudo apt-get install mariadb-server rsync -y

Der obige Befehl installiert MariaDB mit Galera und mehreren Abhängigkeiten. Die Galera-Teile bleiben bis zur Konfiguration inaktiv, wie ein Plugin oder eine Speichermaschine. Sobald die MariaDB auf allen Knoten installiert ist, können Sie mit der Sicherung der MariaDB fortfahren.

Standardmäßig ist die MariaDB-Installation nicht gesichert, daher müssen Sie die MariaDB-Installation sichern. Sie können dies tun, indem Sie das mysql_secure_installationsskript ausführen:

sudo mysql_secure_installation

In diesem Prozess werden Sie aufgefordert, das Root-Passwort festzulegen, anonyme Benutzer zu entfernen, die Remote-Anmeldung von Root zu verbieten und die Testdatenbank zu entfernen. Beantworten Sie alle Fragen wie unten gezeigt:

Enter current password for root (enter for none):
Change the root password? [Y/n] n
Remove anonymous users? [Y/n] Y
Disallow root login remotely? [Y/n] Y
Remove test database and access to it? [Y/n] Y
Reload privilege tables now? [Y/n] Y

Sobald die MariaDB auf allen Knoten gesichert ist, können Sie mit dem nächsten Schritt fortfahren.

Einrichten des MariaDB-Clusters auf Node1

Gehen Sie zunächst zum Node1 und erstellen Sie eine Konfigurationsdatei für Galera. Standardmäßig liest MariaDB die Konfiguration aus dem Verzeichnis /etc/mysql/conf.d/. Führen Sie dazu den folgenden Befehl aus:

sudo nano /etc/mysql/conf.d/galera.cnf

Füge die folgenden Zeilen hinzu:

[mysqld]
binlog_format=ROW
default-storage-engine=innodb
innodb_autoinc_lock_mode=2
bind-address=0.0.0.0
# Galera Provider Configuration
wsrep_on=ON
wsrep_provider=/usr/lib/galera/libgalera_smm.so
# Galera Cluster Configuration
wsrep_cluster_name="galera_cluster"
wsrep_cluster_address="gcomm://192.168.0.102,192.168.0.103,192.168.0.104"

# Galera Synchronization Configuration
wsrep_sst_method=rsync

# Galera Node Configuration
wsrep_node_address="192.168.0.102"
wsrep_node_name="Node1"

Speichern Sie die Datei, wenn Sie fertig sind.

Hinweis: 192.168.0.102 ist die IP-Adresse des Node1.

Node2 auf Galera Cluster hinzufügen

Als nächstes gehen Sie zum Node2 und erstellen eine Konfigurationsdatei für Galera:

sudo nano /etc/mysql/conf.d/galera.cnf

Füge die folgenden Zeilen hinzu:

[mysqld]
binlog_format=ROW
default-storage-engine=innodb
innodb_autoinc_lock_mode=2
bind-address=0.0.0.0
# Galera Provider Configuration
wsrep_on=ON
wsrep_provider=/usr/lib/galera/libgalera_smm.so
# Galera Cluster Configuration
wsrep_cluster_name="galera_cluster"
wsrep_cluster_address="gcomm://192.168.0.102,192.168.0.103,192.168.0.104"

# Galera Synchronization Configuration
wsrep_sst_method=rsync

# Galera Node Configuration
wsrep_node_address="192.168.0.103"
wsrep_node_name="Node2"

Speichern Sie die Datei, wenn Sie fertig sind.

Hinweis: 192.168.0.103 ist die IP-Adresse des Node2.

Node3 auf Galera Cluster hinzufügen

Als nächstes gehen Sie zum Node3 und erstellen eine Konfigurationsdatei für Galera:

sudo nano /etc/mysql/conf.d/galera.cnf

Füge die folgenden Zeilen hinzu:

[mysqld]
binlog_format=ROW
default-storage-engine=innodb
innodb_autoinc_lock_mode=2
bind-address=0.0.0.0
# Galera Provider Configuration
wsrep_on=ON
wsrep_provider=/usr/lib/galera/libgalera_smm.so
# Galera Cluster Configuration
wsrep_cluster_name="galera_cluster"
wsrep_cluster_address="gcomm://192.168.0.102,192.168.0.103,192.168.0.104"

# Galera Synchronization Configuration
wsrep_sst_method=rsync

# Galera Node Configuration
wsrep_node_address="192.168.0.104"
wsrep_node_name="Node3"

Speichern Sie die Datei, wenn Sie fertig sind.

Hinweis: 192.168.0.104 ist die IP-Adresse des Node3.

Firewall konfigurieren

Galera Cluster verwendet vier Ports 3306 für die MySQL-Client-Verbindung, 4444 für State Snapshot Transfer, 4567 für Galera Cluster Replikationsverkehr und 4568 für Incremental State Transfer. Sie müssen also alle diese Ports über die UFW-Firewall zulassen. Sie können dies tun, indem Sie den folgenden Befehl auf allen Knoten ausführen:

Aktivieren Sie zunächst die UFW-Firewall mit dem folgenden Befehl:

sudo ufw enable

Als nächstes lassen Sie alle Ports mit dem folgenden Befehl zu:

sudo ufw allow 3306/tcp
sudo ufw allow 4444/tcp
sudo ufw allow 4567/tcp
sudo ufw allow 4568/tcp
sudo ufw allow 4567/udp

Sie können dann den Status der Firewall mit dem folgenden Befehl überprüfen:

sudo ufw status

Sobald die UFW-Firewall auf allen Knoten konfiguriert ist, können Sie mit dem nächsten Schritt fortfahren.

MariaDB Galera Cluster starten

Nachdem Sie alle Knoten erfolgreich konfiguriert haben, gehen Sie zum Knoten1 und starten Sie Galera Cluster.

Bevor Galera gestartet werden kann, müssen Sie sicherstellen, dass der MariaDB-Dienst auf allen Knoten gestoppt wird.

Führen Sie den folgenden Befehl auf allen Knoten aus:

sudo systemctl stop mysql

Starten Sie nun den Galera-Cluster auf Knoten1 mit dem folgenden Befehl:

sudo galera_new_cluster

Überprüfen Sie nun mit dem folgenden Befehl, ob der Cluster läuft oder nicht:

mysql -u root -p -e "show status like 'wsrep_cluster_size'"

Wenn alles in Ordnung ist, sollten Sie die folgende Ausgabe sehen:

+--------------------+-------+
| Variable_name      | Value |
+--------------------+-------+
| wsrep_cluster_size | 1     |
+--------------------+-------+

Starten Sie auf dem Node2 den MariaDB-Dienst:

sudo systemctl start mysql

Mit dem folgenden Befehl können Sie den Status des MariaDB-Dienstes überprüfen, ob er funktioniert oder nicht:

sudo systemctl status mysql

Wenn alles in Ordnung ist, sollten Sie die folgende Ausgabe sehen:

?? mariadb.service - MariaDB database server
   Loaded: loaded (/lib/systemd/system/mariadb.service; enabled; vendor preset: enabled)
   Active: active (running) since Sun 2017-09-17 10:11:20 EDT; 10min ago
  Process: 715 ExecStartPost=/bin/sh -c systemctl unset-environment _WSREP_START_POSITION (code=exited, status=0/SUCCESS)
  Process: 713 ExecStartPost=/etc/mysql/debian-start (code=exited, status=0/SUCCESS)
  Process: 545 ExecStartPre=/bin/sh -c [ ! -e /usr/bin/galera_recovery ] && VAR= ||   VAR=`/usr/bin/galera_recovery`; [ $? -eq 0 ]   && systemctl set
  Process: 535 ExecStartPre=/bin/sh -c systemctl unset-environment _WSREP_START_POSITION (code=exited, status=0/SUCCESS)
  Process: 514 ExecStartPre=/usr/bin/install -m 755 -o mysql -g root -d /var/run/mysqld (code=exited, status=0/SUCCESS)
 Main PID: 661 (mysqld)
   Status: "Taking your SQL requests now..."
    Tasks: 26 (limit: 4915)
   CGroup: /system.slice/mariadb.service
           ??????661 /usr/sbin/mysqld

Sep 17 10:11:11 debian systemd[1]: Starting MariaDB database server...
Sep 17 10:11:15 debian mysqld[661]: 2017-09-17 10:11:15 140287134630464 [Note] /usr/sbin/mysqld (mysqld 10.1.26-MariaDB-0+deb9u1) starting as process
Sep 17 10:11:20 debian systemd[1]: Started MariaDB database server.

Nun sollte Ihr zweiter Knoten automatisch mit dem Cluster verbunden sein. Das kannst du mit dem folgenden Befehl überprüfen:

mysql -u root -p -e "show status like 'wsrep_cluster_size'"

Wenn alles gut funktioniert, sollte die Clustergröße auf zwei gesetzt werden:

+--------------------+-------+
| Variable_name      | Value |
+--------------------+-------+
| wsrep_cluster_size | 2     |
+--------------------+-------+

Starten Sie auf dem Node3 den MariaDB-Dienst:

sudo systemctl start mysql
mysql -u root -p -e "show status like 'wsrep_cluster_size'"

Wenn alles gut funktioniert, sollte die Clustergröße auf drei gesetzt werden:

+--------------------+-------+
| Variable_name      | Value |
+--------------------+-------+
| wsrep_cluster_size | 3     |
+--------------------+-------+

Ihr Cluster arbeitet und kommuniziert nun miteinander.

Replikation von Testdatenbanken

Jetzt, da alle Knoten online sind, ist es an der Zeit, die Datenbankreplikation im gesamten Galera-Cluster zu testen. Beginnen wir mit der Erstellung einer Datenbank auf Node1 und prüfen wir, ob sie auf allen Knoten repliziert ist.

Melden Sie sich zunächst mit dem folgenden Befehl an der MariaDb-Konsole an:

mysql -u root -p

Geben Sie Ihr Root-Passwort ein und erstellen Sie eine Datenbank mit dem Namen test_db:

MariaDB [(none)]> create database test_db;
MariaDB [(none)]> show databases;
+--------------------+
| Database           |
+--------------------+
| test_db            |
+--------------------+

Gehen Sie nun zu Node2 und Node3, dann überprüfen Sie, ob die Replikation funktioniert oder nicht:

mysql -u root -p
MariaDB [(none)]> show databases;
+--------------------+
| Database           |
+--------------------+
| test_db            |
+--------------------+

Herzlichen Glückwunsch! Sie haben den MariaDB Galera Cluster auf dem Ubuntu 16.04 Server erfolgreich installiert und konfiguriert.

Fazit

Ich hoffe, Sie haben jetzt genügend Wissen, um den MariaDB Galera Cluster auf Ubuntu 16.04 zu installieren und zu konfigurieren. Sie können nun problemlos auf mehrere oder sogar Dutzende von verschiedenen Knoten skalieren. Wenn Sie Zweifel oder weitere Fragen haben, dann verweisen Sie auf den Link Galera Cluster Doc.

Das könnte dich auch interessieren …