GNU/Linux >> LINUX-Kenntnisse >  >> Cent OS

So richten Sie HAProxy als Load Balancer für MariaDB unter CentOS 7 ein

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.


Cent OS
  1. So installieren Sie MariaDB auf CentOS 7

  2. So installieren Sie MariaDB unter CentOS 8

  3. So richten Sie den MariaDB Galera-Cluster unter Ubuntu 20.04 ein

  4. So konfigurieren Sie den HAProxy-Load-Balancer

  5. So richten Sie den VNC-Server für neue Benutzer in CentOS/RHEL 5 ein

So installieren Sie MariaDB unter CentOS 7

So installieren Sie ProjectPier unter CentOS 7

So installieren Sie HAProxy unter CentOS 8

So richten Sie HAProxy als Load Balancer für Nginx unter CentOS 8 ein

So richten Sie HAProxy als Load Balancer für Nginx in CentOS 7 ein

So richten Sie HAProxy unter CentOS 8 ein