In diesem Tutorial werde ich Sie durch die Installation eines MariaDB Galera-Clusters auf CentOS 7 führen, dem ein HAProxy-Load-Balancer vorangestellt ist. Das Gesamtsetup besteht aus 4 Servern. Ich werde 3 CentOS 7-Server für die Datenbankknoten verwenden, 2 Knoten werden aktiv sein und 1 fungiert als Backup-Knoten. Der vierte Server wird für den HAProxy-Load-Balancer verwendet. Für den Balance-Algorithmus verwenden wir leastconn (aber Sie können auch andere Algorithmen verwenden).
MariaDB ist einer der beliebtesten relationalen Datenbankserver, der vom ursprünglichen Entwickler des MySQL-Datenbankservers entwickelt wurde. MariaDB ist ein Fork von MySQL, der die XtraDB-Speicher-Engine, die InnoDB-Speicher-Engine und eine neue Speicher-Engine namens aria unterstützt.
MariaDB Galera Cluster ist ein synchroner Multi-Master-Cluster für MariaDB, der nur auf GNU/Linux-basierten Betriebssystemen verfügbar ist. Galera Cluster unterstützt nur die Speicher-Engines XtraDB und InnoDB. Es verwendet die Galera-Bibliothek für die Replikation mit automatischer Mitgliederkontrolle, automatischem Knotenbeitritt und zum Lesen und Schreiben auf den Cluster-Knoten.
Voraussetzung
- 4 CentOS 7-Server – 64 Bit:
mariadb1
192.168.1.132
mariadb2
192.168.1.133
mariadb3
192.168.1.134
HAProxy
192.168.1.135
- Root-Rechte auf allen vier Servern.
Schritt 1 – MariaDB Galera Cluster installieren und konfigurieren
In diesem Schritt installieren und konfigurieren wir den MariaDB Galera Cluster auf 3 CentOS-Servern. Wir werden den MariaDB-Galera-Server installieren, dann die Firewall aktivieren und einige Ports für die Datenbank und andere Dienste öffnen. Dann installieren wir das Clustercheck-Skript auf jedem MariaDB-Server, damit wir den Serverstatus vom HAProxy überprüfen können.
A. Konfigurieren Sie die Hostnamen und bereiten Sie das Basissystem vor
Melden Sie sich mit Ihrem ssh-Konto bei allen Datenbankservern an:
ssh [email protected]
ssh [email protected].133
ssh [email protected]
Wechseln Sie mit dem sudo-Befehl zum Root-Benutzer:
sudo su
Bearbeiten Sie die Hosts-Datei auf jedem MariaDB-Server und fügen Sie alle Server-IP-Adressen und Hostnamen der anderen Knoten hinzu:
vi /etc/hosts
Siehe meine /etc/hosts-Konfiguration unten:
192.168.1.132 mariadb1
192.168.1.133 mariadb2
192.168.1.134 mariadb3
Speichern Sie die Datei und beenden Sie sie.
Deaktivieren Sie als Nächstes SELinux auf jedem Server, da es Probleme mit MariaDB Galera verursacht. Deaktivieren Sie SELinux mit diesem sed-Befehl:
sed -i -e 's/SELINUX=permissive/SELINUX=disabled/g' /etc/sysconfig/selinux
sed (Stream-Editor):Ersetzen Sie "SELINUX=permissive" durch "SELINUX=disabled" in der /etc/sysconfig/selinux-Datei.
B. Installieren Sie MariaDB Galera Server
In diesem Schritt installieren wir MariaDB Galera 10.0, das im MariaDB-Repository verfügbar ist.
Erstellen Sie mit dem Befehl vi eine neue .repo-Datei im Verzeichnis yum.repos.d:
vi /etc/yum.repos.d/mariadb.repo
Fügen Sie die Details des MariaDB Galera-Repositorys unten ein und speichern Sie sie:
# MariaDB 10.0 CentOS repository list - created 2015-07-09 14:56 UTC
# http://mariadb.org/mariadb/repositories/
[mariadb]
name = MariaDB
baseurl = http://yum.mariadb.org/10.0/centos7-amd64
gpgkey=https://yum.mariadb.org/RPM-GPG-KEY-MariaDB
gpgcheck=1
Installieren Sie nun MariaDB Galera Server und Client sowie einige andere Pakete, die für dieses Tutorial erforderlich sind:
yum -y install MariaDB-Galera-server MariaDB-client galera rsync xinetd percona-toolkit precona-xtrabackup xinetd wget
Warten Sie bis der Installationsvorgang abgeschlossen ist.
C. Konfigurieren Sie Firewalld
Wir werden die Standard-Firewall von CentOS 7 namens Firewalld aktivieren. Wir werden es einschalten und die TCP-Ports öffnen, die von den Diensten verwendet werden, die wir installieren werden.
3306 =Wird für MySQL/MariaDB-Client-Verbindungen verwendet.
4567 =Galera-Cluster-Replikationsverkehr.
873 =Rsync-Ports.
4444 =Für alle anderen State Snapshot Transfers (SST).
9200 =xinetd - Clustercheck.
Schalten Sie die Firewall mit diesem systemctl-Befehl ein:
systemctl start firewalld
Öffnen Sie nun die Ports mit dem Firewall-cmd:
firewall-cmd --permanent --add-port=3306/tcp
firewall-cmd --permanent --add-port=4567/tcp
firewall-cmd --permanent --add-port=873/tcp
firewall-cmd --permanent --add-port=4444/tcp
firewall-cmd --permanent --add-port=9200/tcp
und Firewall neu laden:
firewall-cmd --reload
D. MariaDB Galera-Cluster konfigurieren
Gehen Sie in das Verzeichnis /etc/my.cnf.d/ und bearbeiten Sie die Datei server.conf mit vi:
cd /etc/my.cnf.d/
vi server.conf
Entkommentieren Sie und fügen Sie einige Konfigurationszeilen hinzu, Sie können die Details unten sehen:
wsrep_provider=/usr/lib64/galera/libgalera_smm.so # Path to wsrep provider library
wsrep_cluster_address="gcomm://192.168.1.132,192.168.1.133,192.168.1.134" # Group Node, add all MardiaDB Server IP
binlog_format=row
default_storage_engine=InnoDB
innodb_autoinc_lock_mode=2
bind-address=0.0.0.0
# Add some configuration below
# Cluster Name
wsrep_cluster_name="mariadb_cluster"
# Add Server IP - on mariadb2 = 192.168.1.133 - on mariadb3 = 192.168.1.134
wsrep_node_address="192.168.1.132"
# Replication Provider with rsync
wsrep_sst_method=rsync
Speichern Sie die Datei und beenden Sie sie.
Lassen Sie uns auf dem Server mariadb1 den Cluster mit dem folgenden Befehl booten:
/etc/rc.d/init.d/mysql bootstrap
Ergebnis:
Bootstrapping the cluster.. Starting MySQL.. SUCCESS!
Starten Sie MariaDB auf mariadb2- und mariadb3-Servern normal:
/etc/init.d/mysql start
mariadb1-Bootstraping.
mariadb2 und mariadb3 starten.
MariaDB wurde auf allen Knoten gestartet, konfigurieren Sie nun das Root-Passwort für MariaDB auf allen Servern mit dem folgenden Befehl:
/usr/bin/mysql_secure_installation
E. Clustercheck konfigurieren
Clustercheck ist ein nützliches Bash-Skript, um einen Proxy (z. B. HAProxy) in die Lage zu versetzen, den MariaDB-Server zu überwachen.
Wechseln Sie in das /tmp-Verzeichnis und laden Sie das Skript mit wget herunter:
cd /tmp
wget https://raw.githubusercontent.com/olafz/percona-clustercheck/master/clustercheck
Machen Sie nun das Skript ausführbar, indem Sie die Berechtigung ändern und es in das Verzeichnis /usr/bin/ verschieben:
chmod +x clustercheck
mv clustercheck /usr/bin/
Erstellen Sie als Nächstes mit dem Befehl vi im Verzeichnis „/etc/xinet.d/“ ein xinetd-Skript für den Clusterchek:
vi /etc/xinetd.d/mysqlchk
Fügen Sie die Konfiguration unten ein:
# default: on
# description: mysqlchk
service mysqlchk
{
disable = no
flags = REUSE
socket_type = stream
port = 9200 # This port used by xinetd for clustercheck
wait = no
user = nobody
server = /usr/bin/clustercheck
log_on_failure += USERID
only_from = 0.0.0.0/0
per_source = UNLIMITED
}
Speichern und beenden.
Clustercheck zur Dienstliste hinzufügen:
vi /etc/services
Gehen Sie zur Zeile 10101, kommentieren Sie die Dienste, die Port 9200 verwenden, und fügen Sie eine neue Zeile für mysqlchk/clustercheck hinzu.
mysqlchk 9200/tcp # mysqlchk
#wap-wsp 9200/tcp # WAP connectionless session service
#wap-wsp 9200/udp # WAP connectionless session service
Speichern Sie die Datei und beenden Sie sie.
Starten Sie dann den xinetd-Dienst:
systemctl start xinetd
Um den Clustercheck durchzuführen, müssen Sie einen neuen Benutzer in MySQL anlegen. Melden Sie sich bei der MariaDB-Shell an und erstellen Sie einen neuen Benutzer mit dem Namen „clustercheckuser“ und dem Passwort „clustercheckpassword!“.
mysql -u root -p
GRANT PROCESS ON *.* TO 'clustercheckuser'@'localhost' IDENTIFIED BY 'clustercheckpassword!' ;
exit;
In diesem Stadium sind alle MariaDB-Server synchronisiert.
Clustercheck testen:
/usr/bin/clustercheck
Stellen Sie sicher, dass der Ergebniscode 200 lautet.
Schritt 2 – HAProxy installieren und konfigurieren
Melden Sie sich beim HAProxy-Server an:
ssh [email protected]
Melden Sie sich als Root-Benutzer an und fügen Sie die MariaDB-Server-IP und den Hostnamen zur Datei „/etc/hosts“ hinzu:
sudo su
vi /etc/hosts
HAProxy ist im CentOS-Basis-Repository verfügbar, führen Sie diesen yum-Befehl aus, um es zu installieren:
yum -y install haproxy
Konfigurieren Sie dann das Protokoll für HAProxy, indem Sie die rsyslog-Konfigurationsdatei bearbeiten:
vi /etc/rsyslog.conf
Entkommentieren Sie den UDP-Port:
# Provides UDP syslog reception
$ModLoad imudp
$UDPServerRun 51
Speichern Sie die Datei und verlassen Sie den Editor.
Fügen Sie die HAProxy-Konfiguration im Verzeichnis rsyslog.d hinzu:
vi /etc/rsyslog.d/haproxy.conf
Konfiguration unten einfügen:
local2.=info /var/log/haproxy-access.log
local2.notice /var/log/haproxy-info.log
Speichern Sie die Datei und starten Sie rsyslog neu:
systemctl restart rsyslog
Als nächstes erstellen Sie eine neue HAProxy-Konfigurationsdatei.
Gehen Sie in das Verzeichnis /etc/haproxy und sichern Sie die dafult haproxy-Konfigurationsdatei.
cd /etc/haproxy/
mv haproxy.cfg haproxy.cfg.orig
Neue Haproxy-Konfigurationsdatei erstellen:
vi /etc/haproxy/haproxy.cfg
Und fügen Sie die HAProxy-Konfiguration unten ein:
global
log 127.0.0.1 local2
maxconn 1024
user haproxy
group haproxy
daemon
stats socket /var/run/haproxy.sock mode 600 level admin # Make sock file for haproxy
defaults
log global
mode http
option tcplog
option dontlognull
retries 3
option redispatch
maxconn 1024
timeout connect 5000ms
timeout client 50000ms
timeout server 50000ms
listen mariadb_cluster 0.0.0.0:3030
## MariaDB balance leastconn - the cluster listening on port 3030.
mode tcp
balance leastconn
option httpchk
server mariadb1 192.168.1.132:3306 check port 9200
server mariadb2 192.168.1.133:3306 check port 9200
server mariadb3 192.168.1.134:3306 check port 9200 backup # Make mariadb3 as backup - automatic replication data
listen stats 0.0.0.0:9000
## HAProxy stats web gui running on port 9000 - username and password: howtoforge.
mode http
stats enable
stats uri /stats
stats realm HAProxy\ Statistics
stats auth howtoforge:howtoforge
stats admin if TRUE
Port 3030 der Load-Balancing MariaDB-Port ist, können wir auf die Datenbanken auf allen MariaDB-Servern mit Load-Balancer-IP und diesem Port zugreifen.
Port 9000 ist der Port für die Web-GUI, er ermöglicht die Überwachung von HAProxy vom Browser aus.
Starten Sie nun den Firewalld, öffnen Sie die Ports 9000 und 3030 und laden Sie ihn dann neu:
systemctl start firewalld
firewall-cmd --permanent --add-port=9000/tcp
firewall-cmd --permanent --add-port=3030/tcp
firewall-cmd --reload
Starten Sie HAProxy mit dem systemctl-Befehl:
systemctl start haproxy
Schritt 3 – HAProxy und MariaDB testen
A. Replikationstests
Melden Sie sich beim MariaDB-Server an, greifen Sie auf die MySQL-Shell zu und erstellen Sie eine neue Datenbank von mariadb1, dann von mariadb2 und schließlich von mariadb3.
mysql -u root -p
create database this_mariadb1; # Run this on mariadb1 server
create database this_mariadb2; # Run this on mariadb2 server
create database this_mariadb3; # Run this on mariadb3 server
Prüfen Sie die Datenbanken:
B. Greifen Sie über HAProxy auf den MariaDB-Server zu
Jetzt greifen wir über die HAProxy-IP auf Port 3030 auf den MariaDB-Servercluster und die Datenbanken zu.
Bevor Sie diesen Test durchführen, aktivieren Sie den Fernzugriff auf den MariaDB-Server, indem Sie einen neuen Benutzer root mit dem Host „%“ erstellen.
Melden Sie sich bei der MariaDB-Shell an und erstellen Sie einen neuen Benutzer „root“ mit dem Passwort „aqwe123“:
mysql -u root -p
GRANT ALL PRIVILEGES ON *.* TO [email protected]'%' IDENTIFIED BY "aqwe123";
Greifen Sie als Nächstes über den HAProxy-Server auf die Datenbanktabelle „mysql.user“ zu:
mysql -u root -p -h 192.168.1.135 -P 3030 -e "select Host, User, Password from mysql.user"
Sie können die Benutzer des Datenbankservers sehen, indem Sie auf Port 3030 auf die Load Balancer-IP zugreifen. Sie können auf die Datenbanken auf den MySQL-Knoten zugreifen, indem Sie auf Port 3030 auf die HAProxy-IP zugreifen.
Ein weiterer Test des Servers:der leastconn-Algorithmus:
C. Melden Sie sich bei der HAProxy Web-Gui an
Sie können auf den HAProxy-Überwachungsserver auf Port 9000 zugreifen, mit Benutzername und Passwort „howtoforge“, um die HAProxy-Web-Benutzeroberfläche anzuzeigen:
http://192.168.1.135:9000/stats
HAProxy wurde erfolgreich installiert und Sie können sehen, dass die MariaDB-Server überwacht werden.
Schlussfolgerung
MariaDB Galera Cluster ist ein synchroner Multi-Master-Cluster, der Lastausgleich für MySQL-Datenbanken bereitstellt. Dies ist eine gute Lösung, um ein leistungsstarkes Datenbanksystem für Ihre Site aufzubauen. MariaDB Galera Cluster unterstützt die xtradb- und innodb-Speicher-Engines, bietet automatische Replikation und ermöglicht das automatische Verbinden neuer Knoten. Wir können HAProxy vor dem Datenbank-Cluster als Load Balancer verwenden. Der Load Balancer hilft dabei, eingehende Anfragen auf alle Datenbanken zu verteilen. Wir verwenden das Bash-Skript clustercheck, um die Datenbanküberwachung von HAProxy durchzuführen. MariaDB Galera Cluster und HAProxy sind eine der besten Lösungen zum Aufbau eines Hochverfügbarkeits-Datenbanksystems.