Die meisten der im Internet verfügbaren Installationsschritte decken die Standard-Online-Installation ab, vorausgesetzt, die Datenbank-Hosts haben eine aktive Internetverbindung zu den Paket-Repositories und erfüllen alle Abhängigkeiten. Die Installationsschritte und Befehle sind jedoch bei der Offline-Installation etwas anders. Die Offline-Installation ist eine gängige Praxis in einer strengen und sicheren Umgebung wie dem Finanz- und Militärsektor, um die Sicherheitsvorschriften einzuhalten, die Expositionsrisiken zu verringern und die Vertraulichkeit zu wahren.
In diesem Blogbeitrag werden wir einen MariaDB-Cluster mit drei Knoten in einer Offline-Umgebung auf CentOS-Hosts installieren. Betrachten Sie die folgenden drei Knoten für diese Installation:
- mariadb1 - 192.168.0.241
- mariadb2 - 192.168.0.242
- mariadb3 - 192.168.0.243
Pakete herunterladen
Der zeitaufwändigste Teil besteht darin, alle für unsere Installation erforderlichen Pakete zu beschaffen. Gehen Sie zunächst zu dem jeweiligen MariaDB-Repository, das wir installieren möchten (in diesem Beispiel ist unser Betriebssystem CentOS 7 64bit):
- MariaDB 10.4:http://yum.mariadb.org/10.4/centos7-amd64/rpms/
- MariaDB 10.3:http://yum.mariadb.org/10.3/centos7-amd64/rpms/
- MariaDB 10.2:http://yum.mariadb.org/10.2/centos7-amd64/rpms/
- MariaDB 10.1:http://yum.mariadb.org/10.1/centos7-amd64/rpms/
- MariaDB 10.0:http://yum.mariadb.org/10.0/centos7-amd64/rpms/
Stellen Sie sicher, dass Sie für alle MariaDB-bezogenen Pakete genau dieselbe Nebenversion herunterladen. In diesem Beispiel haben wir MariaDB Version 10.4.13 heruntergeladen. Es gibt eine Reihe von Paketen in diesem Repository, aber wir brauchen sie nicht alle, nur um einen MariaDB-Cluster auszuführen. Einige der Pakete sind veraltet und dienen Debugging-Zwecken. Für MariaDB Galera 10.4 und CentOS 7 müssen wir die folgenden Pakete aus dem MariaDB 10.4-Repository herunterladen:
- jemalloc
- galera-3/galera-4
- libzstd
- MariaDB-Sicherung
- MariaDB-Server
- MariaDB-Client
- MariaDB freigegeben
- MariaDB allgemein
- MariaDB-kompatibel
Die folgenden wget-Befehle würden den Download-Prozess vereinfachen:
wget http://yum.mariadb.org/10.4/centos7-amd64/rpms/galera-4-26.4.4-1.rhel7.el7.centos.x86_64.rpm
wget http://yum.mariadb.org/10.4/centos7-amd64/rpms/jemalloc-3.6.0-1.el7.x86_64.rpm
wget http://yum.mariadb.org/10.4/centos7-amd64/rpms/libzstd-1.3.4-1.el7.x86_64.rpm
wget http://yum.mariadb.org/10.4/centos7-amd64/rpms/MariaDB-backup-10.4.13-1.el7.centos.x86_64.rpm
wget http://yum.mariadb.org/10.4/centos7-amd64/rpms/MariaDB-client-10.4.13-1.el7.centos.x86_64.rpm
wget http://yum.mariadb.org/10.4/centos7-amd64/rpms/MariaDB-common-10.4.13-1.el7.centos.x86_64.rpm
wget http://yum.mariadb.org/10.4/centos7-amd64/rpms/MariaDB-compat-10.4.13-1.el7.centos.x86_64.rpm
wget http://yum.mariadb.org/10.4/centos7-amd64/rpms/MariaDB-server-10.4.13-1.el7.centos.x86_64.rpm
wget http://yum.mariadb.org/10.4/centos7-amd64/rpms/MariaDB-shared-10.4.13-1.el7.centos.x86_64.rpm
Einige dieser Pakete haben Abhängigkeiten zu anderen Paketen. Um sie alle zu erfüllen, ist es wahrscheinlich am besten, das ISO-Image des Betriebssystems zu mounten und den yum-Paketmanager anzuweisen, stattdessen das ISO-Image als Offline-Basis-Repository zu verwenden. Andernfalls würden wir viel Zeit damit verschwenden, die Pakete von einem Host/Medium auf einen anderen herunterzuladen/zu übertragen.
Wenn Sie nach älteren MariaDB-Paketen suchen, schlagen Sie hier im Archiv nach. Übertragen Sie die Pakete nach dem Herunterladen auf alle Datenbankserver über ein USB-Laufwerk, einen DVD-Brenner oder einen beliebigen Netzwerkspeicher, der mit den Datenbankhosts verbunden ist.
Laden Sie das ISO-Image lokal ein
Einige der Abhängigkeiten müssen während der Installation erfüllt werden, und eine Möglichkeit, dies auf einfache Weise zu erreichen, besteht darin, das Offline-yum-Repository auf den Datenbankservern einzurichten. Zunächst müssen wir das ISO-Image der CentOS 7-DVD von der nächstgelegenen CentOS-Mirror-Site im Verzeichnis „isos“ herunterladen:
$ wget http://centos.shinjiru.com/centos/7/isos/x86_64/CentOS-7-x86_64-DVD-2003.iso
Sie können das Image entweder übertragen und direkt mounten oder es auf eine DVD brennen und das DVD-Laufwerk verwenden und es mit dem Server verbinden. In diesem Beispiel werden wir das ISO-Image als DVD auf dem Server mounten:
$ mkdir -p /media/CentOS
$ mount -o loop /root/CentOS-7-x86_64-DVD-2003.iso /media/CentOS
Aktivieren Sie dann das CentOS-Media (c7-media)-Repository und deaktivieren Sie die Standard-Online-Repositorys (Basis, Updates, Extras):
$ yum-config-manager --disable base,updates,extras
$ yum-config-manager --enable c7-media
Wir sind jetzt bereit für die Installation.
Installation und Konfiguration des MariaDB-Servers
Die Installationsschritte sind ziemlich einfach, wenn wir alle erforderlichen Pakete bereit haben. Zunächst wird empfohlen, SElinux zu deaktivieren (oder in den zulässigen Modus zu versetzen):
$ setenforce 0
$ sed -i 's/^SELINUX=.*/SELINUX=permissive/g' /etc/selinux/config
Navigieren Sie zu dem Verzeichnis, in dem sich alle Pakete befinden, in diesem Fall /root/installer/. Stellen Sie sicher, dass alle Pakete vorhanden sind:
$ cd /root/installer
$ ls -1
galera-4-26.4.4-1.rhel7.el7.centos.x86_64.rpm
jemalloc-3.6.0-1.el7.x86_64.rpm
libzstd-1.3.4-1.el7.x86_64.rpm
MariaDB-backup-10.4.13-1.el7.centos.x86_64.rpm
MariaDB-client-10.4.13-1.el7.centos.x86_64.rpm
MariaDB-common-10.4.13-1.el7.centos.x86_64.rpm
MariaDB-compat-10.4.13-1.el7.centos.x86_64.rpm
MariaDB-server-10.4.13-1.el7.centos.x86_64.rpm
MariaDB-shared-10.4.13-1.el7.centos.x86_64.rpm
Lassen Sie uns zuerst die mariabackup-Abhängigkeit namens socat installieren und dann den Befehl yum localinstall ausführen, um die RPM-Pakete zu installieren und alle Abhängigkeiten zu erfüllen:
$ yum install socat
$ yum localinstall *.rpm
Starten Sie den MariaDB-Dienst und überprüfen Sie den Status:
$ systemctl start mariadb
$ systemctl status mariadb
Stellen Sie sicher, dass Sie keinen Fehler im Prozess sehen. Führen Sie dann das mysql_secure_installation-Skript aus, um das MySQL-Root-Passwort und die Härtung zu konfigurieren:
$ mysql_secure_installation
Stellen Sie sicher, dass das MariaDB-Root-Passwort auf allen MariaDB-Hosts identisch ist. Erstellen Sie einen MariaDB-Benutzer, um Backup und SST durchzuführen. Dies ist wichtig, wenn wir das empfohlene Mariabackup als SST-Methode für MariaDB-Cluster und auch für Sicherungszwecke verwenden möchten:
$ mysql -uroot -p
MariaDB> CREATE USER [email protected] IDENTIFIED BY 'P455w0rd';
MariaDB> GRANT SELECT, INSERT, CREATE, RELOAD, PROCESS, SUPER, LOCK TABLES, REPLICATION CLIENT, SHOW VIEW, EVENT, CREATE TABLESPACE ON *.* TO [email protected];
Wir müssen die Standardkonfigurationsdatei ändern, um MariaDB-Cluster-Funktionalitäten zu laden. Öffnen Sie /etc/my.cnf.d/server.cnf und vergewissern Sie sich, dass die folgenden Zeilen für die Minimalkonfiguration vorhanden sind:
[mysqld]
log_error = /var/log/mysqld.log
[galera]
wsrep_on=ON
wsrep_provider=/usr/lib64/galera-4/libgalera_smm.so
wsrep_cluster_address=gcomm://192.168.0.241,192.168.0.242,192.168.0.243
binlog_format=row
default_storage_engine=InnoDB
innodb_autoinc_lock_mode=2
bind-address=0.0.0.0
innodb_flush_log_at_trx_commit=2
wsrep_sst_method=mariabackup
wsrep_sst_auth=backup_user:P455w0rd
wsrep_node_address=192.168.0.241 # change this
Vergessen Sie nicht, den Wert wsrep_node_address mit der IP-Adresse des Datenbankknotens für die MariaDB-Cluster-Kommunikation zu ändern. Außerdem kann der Wert wsrep_provider je nach MariaDB-Server und MariaDB-Cluster-Version, die Sie installiert haben, unterschiedlich sein. Suchen Sie den Pfad libgalera_smm.so und geben Sie ihn hier entsprechend an.
Wiederholen Sie die gleichen Schritte auf allen Datenbankknoten und wir sind jetzt bereit, unseren Cluster zu starten.
Bootstrapping des Clusters
Da es sich um einen neuen Cluster handelt, können wir einen beliebigen MariaDB-Knoten als Referenzknoten für den Cluster-Bootstrapping-Prozess auswählen. Wählen wir mariadb1. Stellen Sie sicher, dass MariaDB zuerst gestoppt wird, und führen Sie dann den Befehl galera_new_cluster aus, um zu booten:
$ systemctl stop mariadb
$ galera_new_cluster
$ systemctl status mariadb
Auf den anderen beiden Knoten (mariadb2 und mariadb3) werden wir es mit dem Standard-MariaDB-Startbefehl starten:
$ systemctl stop mariadb
$ systemctl start mariadb
Überprüfen Sie, ob alle Knoten Teil des Clusters sind, indem Sie sich den wsrep-bezogenen Status auf jedem Knoten ansehen:
MariaDB> SHOW STATUS LIKE 'wsrep%';
Stellen Sie sicher, dass der gemeldete Status wie folgt lautet:
wsrep_local_state_comment | Synced
wsrep_cluster_size | 3
wsrep_cluster_status | Primary
Für MariaDB 10.4 und Galera Cluster 4 können wir die Clustermitgliedsinformationen direkt aus der Tabelle mysql.wsrep_cluster_members auf jedem MariaDB-Knoten abrufen:
$ mysql -uroot -p -e 'select * from mysql.wsrep_cluster_members'
Enter password:
+--------------------------------------+--------------------------------------+---------------+-----------------------+
| node_uuid | cluster_uuid | node_name | node_incoming_address |
+--------------------------------------+--------------------------------------+---------------+-----------------------+
| 35177dae-a7f0-11ea-baa4-1e4604dc8f68 | de82efcb-a7a7-11ea-8273-b7a81016a75f | maria1.local | AUTO |
| 3e6f9d0b-a7f0-11ea-a2e9-32f4a0481dd9 | de82efcb-a7a7-11ea-8273-b7a81016a75f | maria2.local | AUTO |
| fd63108a-a7f1-11ea-b100-937c34421a67 | de82efcb-a7a7-11ea-8273-b7a81016a75f | maria3.local | AUTO |
+--------------------------------------+--------------------------------------+---------------+-----------------------+
Wenn beim Cluster-Bootstrapping etwas schief geht, überprüfen Sie das MySQL-Fehlerprotokoll unter /var/log/mysqld.log auf allen MariaDB-Knoten. Sobald ein Cluster gebootet wurde und ausgeführt wird, führen Sie das galera_new_cluster-Skript nicht erneut aus, um einen MariaDB-Dienst zu starten. Es sollte ausreichen, den Standardbefehl "systemctl start/restart mariadb" zu verwenden, es sei denn, es gibt keinen Datenbankknoten mehr im Zustand PRIMARY. Sehen Sie sich diesen Blog-Beitrag How to Bootstrap MySQL or MariaDB Cluster an, um zu verstehen, warum dieser Schritt entscheidend ist.
Bonusschritt
Jetzt haben Sie bereits einen Datenbank-Cluster, der ohne Überwachungs- und Verwaltungsfunktionen ausgeführt wird. Warum importieren Sie den Datenbank-Cluster nicht in ClusterControl? Installieren Sie ClusterControl auf einem anderen separaten Server und richten Sie passwortloses SSH vom ClusterControl-Server zu allen Datenbankknoten ein. Angenommen, die ClusterControl-Server-IP ist 192.168.0.240, führen Sie die folgenden Befehle auf dem ClusterControl-Server aus:
$ whoami
root
$ ssh-keygen -t rsa # generate key, press Enter for all prompts
$ ssh-copy-id [email protected] # root password on 192.168.0.241
$ ssh-copy-id [email protected] # root password on 192.168.0.242
$ ssh-copy-id [email protected] # root password on 192.168.0.243
Gehen Sie dann zu ClusterControl -> Importieren -> MySQL Galera und geben Sie die erforderlichen SSH-Details ein:
Schalten Sie im zweiten Schritt unter MySQL-Server definieren die Option „Automatische Knotenerkennung“ aus " und geben Sie alle IP-Adressen der Datenbankknoten an und vergewissern Sie sich, dass neben der IP-Adresse ein grünes Häkchen angezeigt wird, das anzeigt, dass ClusterControl den Knoten über passwortloses SSH erreichen kann:
Klicken Sie auf Importieren und warten Sie, bis der Importauftrag abgeschlossen ist. Sie sollten es unter der Clusterliste sehen:
Sie sind jetzt in guten Händen. Beachten Sie, dass ClusterControl standardmäßig auf 30 Tage volle Unternehmensfunktionen zurückgreift und nach Ablauf standardmäßig auf die Community Edition zurückkehrt, die für immer kostenlos ist.