Im heutigen Artikel werden wir den MariaDB Galera-Cluster mit HAproxy für lastausgeglichene MariaDB und WordPress installieren. Galera ist eine Active-Active-Clustering-Technologie, was bedeutet, dass sie Schreibvorgänge auf allen Knoten unterstützen kann, die dann über den Cluster hinweg repliziert werden. Es gibt auch Aktiv-Passiv-Clustering, bei dem nur der Knoten beschreibbar ist. Wir werden auch HAproxy für den Lastenausgleich auf unserem Cluster installieren. Die Installation wird auf 5 CentOS 7-Servern durchgeführt, drei für MariaDB 10.1 Galera, einer für Haproxy und einer für WordPress. HAproxy arbeitet so, dass es Anfragen im Round-Robin-Modus an jeden Knoten weiterleitet, während es sich selbst als Frontend präsentiert. Hier verwenden wir die traditionelle Art des Clusterings, indem wir Datenbankserver in einem privaten Netzwerk sitzen lassen und nur der Webserver der öffentlichen IP-Adresse gegenübersteht.
Einrichten des Galera-Clusters
Auf allen Servern müssen wir mysql installieren. Zuerst werden wir das Repository hinzufügen
echo '[mariadb]
name = MariaDB
baseurl = http://yum.mariadb.org/10.1/centos7-amd64
gpgkey=https://yum.mariadb.org/RPM-GPG-KEY-MariaDB
gpgcheck=1' >> /etc/yum.repos.d/MariaDB.repo
Dann installieren wir mariadb, rsync und xinetd
sudo yum install mariadb-server rsync xinetd
Wir müssen /etc/hosts bearbeiten, jeder Editor wird es tun, aber ich werde nano
verwendennano /etc/hosts
Da draußen sind zum Beispiel IP und Namen Ihrer Hosts
192.168.207.241 mariadb01
192.168.209.91 mariadb02
192.168.129.168 mariadb03
Stellen Sie sicher, dass Sie private IPs Ihrer Hosts verwenden, wenn Sie öffentliche verwenden, müssen Sie den Datenverkehr zwischen ihnen verschlüsseln, um Ihren Cluster zu sichern.
Bearbeiten Sie nach der Installation von MariaDB
nano /etc/my.cnf.d/server.cnf
Auf allen Servern müssen Sie den Abschnitt [galera] in der Datei finden und ihn so aussehen lassen, außer für IP-Adressen, die fett gedruckt sind und geändert werden sollten
[galera]
# Mandatory settings
wsrep_on=ON
wsrep_provider=/usr/lib64/galera/libgalera_smm.so
#add your node ips here
wsrep_cluster_address="gcomm://192.168.207.241,192.168.209.91,192.168.129.168"
binlog_format=row
default_storage_engine=InnoDB
innodb_autoinc_lock_mode=2
#Cluster name
wsrep_cluster_name="linoxide_cluster"
# Allow server to accept connections on all interfaces.
bind-address=0.0.0.0
# this server ip, change for each server
wsrep_node_address="192.168.207.241"
# this server name, change for each server
wsrep_node_name="mariadb01"
wsrep_sst_method=rsync
Das Galera-Cluster anstarren
Nachdem dies konfiguriert wurde, müssen Sie den Cluster starten
Zuerst auf dem Knoten mariadb01, der der Master ist, mit diesem Befehl
galera_new_cluster
Dann auf zwei anderen Knoten mit dem normalen systemctl-Befehl:
systemctl start mariadb
Als Nächstes können wir überprüfen, ob der Cluster ausgeführt wird:
mysql -u root -p -e "SHOW STATUS LIKE 'wsrep_cluster_size'"
Als Nächstes führen Sie das mysql_secure_installation-Skript
ausmysql_secure_installation
Einrichten der Firewalld
Wenn nun alle drei Knoten verbunden sind, können wir firewalld aufrufen und konfigurieren.
systemctl start firewalld
Öffnen Sie den Mariadb-Client und die Galera-Replikationsports:
firewall-cmd --permanent --add-port=3306/tcp
firewall-cmd --permanent --add-port=4567/tcp
Öffnen Sie den rsync-Port, den wir für die Replikation verwenden
firewall-cmd --permanent --add-port=873/tcp
Andere wichtige Häfen
firewall-cmd --permanent --add-port=4444/tcp
firewall-cmd --permanent --add-port=9200/tcp
Zuletzt die Firewall neu laden
firewall-cmd --reload
Verwendung von xinetd und Clustercheck
Clustercheck ist ein nützliches Skript zum Überwachen des Clusters. Lassen Sie uns es installieren, indem Sie den folgenden Befehlen folgen
wget https://raw.githubusercontent.com/olafz/percona-clustercheck/master/clustercheck
chmod +x clustercheck
mv clustercheck /usr/bin/
Als nächstes müssen wir mysqlchk zur Dienstliste hinzufügen. Dazu bearbeiten wir die Servicedatei:
nano /etc/services
Da es sich um eine lange Datei handelt, geben Sie in Nano Strg-W ein und suchen Sie nach 9200. Alle Dienste, die diesen Port verwenden, müssen kommentiert werden, und neue Dienste müssen hinzugefügt werden, sodass dieser Teil wie folgt aussehen muss:
mysqlchk 9200/tcp # mysqlchk
#wap-wsp 9200/tcp # WAP connectionless session service
#wap-wsp 9200/udp # WAP connectionless session service
Wenn dies gespeichert und erledigt ist, können wir xinetd starten
systemctl start xinetd
All dies muss auf allen Knoten durchgeführt werden, und jetzt müssen wir nur noch auf dem Master einen Benutzer für die Clusterprüfung hinzufügen.
mysql -u root -p
GRANT PROCESS ON *.* TO 'clustercheckuser'@'localhost' IDENTIFIED BY 'clustercheckpassword!';
exit;
Als nächstes können wir das Clustercheck-Skript ausprobieren
clustercheck
HAproxy einrichten
Melden Sie sich bei Ihrem festgelegten Haproxy-Server an. Wir installieren jetzt den Load Balancer
Bearbeiten Sie Ihre /etc/hosts-Datei so, dass sie in etwa so aussieht (natürlich mit Ihren ips)
192.168.207.241 mariadb01
192.168.209.91 mariadb02
192.168.129.168 mariadb03
192.168.210.252 haproxy01
Als nächstes können wir Haproxy installieren
yum install haproxy
Als nächstes müssen wir rsyslog.conf bearbeiten
nano /etc/rsyslog.conf
Entkommentieren Sie diese beiden Zeilen
# Provides UDP syslog reception
$ModLoad imudp
$UDPServerRun 514
Speichern und beenden
echo 'local2.=info /var/log/haproxy-access.log
local2.notice /var/log/haproxy-info.log
' >> /etc/rsyslog.d/haproxy.conf
Ermöglicht die Sicherung der Standard-Haproxy-Konfiguration
mv /etc/haproxy/haproxy.cfg /etc/haproxy/haproxy.cfg.bk
Als nächstes erstellen wir eine neue Datei mit Nano
nano /etc/haproxy/haproxy.cfg
Verwenden Sie dieses Pastebin als Konfiguration, aber ändern Sie die IP-Adressen.
Es ist an der Zeit, die Firewall auf dem Haproxy-Knoten einzurichten
systemctl start firewalld
firewall-cmd --permanent --add-port=9000/tcp
firewall-cmd --permanent --add-port=3030/tcp
Laden Sie dann die Firewall neu
firewall-cmd --reload
Einrichten des Zugriffs auf MariaDB von HAproxy
Geben Sie auf dem Mariadb-Cluster Folgendes ein:
mysql -u root -p
GRANT ALL PRIVILEGES ON *.* TO root@'%' IDENTIFIED BY "verystrongpassword";
Dann gehen wir zum haproxy01-Server und versuchen, auf die Datenbank zuzugreifen.
Sie müssen den MariaDB-Client installiert haben, also machen wir das zuerst:
echo '[mariadb]
name = MariaDB
baseurl = http://yum.mariadb.org/10.1/centos7-amd64
gpgkey=https://yum.mariadb.org/RPM-GPG-KEY-MariaDB
gpgcheck=1' >> /etc/yum.repos.d/MariaDB.repo
Das war für das Hinzufügen des Repositorys, dieser Befehl installiert es
yum install MariaDB-client
Und dann testen wir ob
mysql -u root -p -h 192.168.210.252 -P 3030 -e "select Host, User, Password from mysql.user"
Stellen Sie sicher, dass Sie als Passwort verystrongpassword eingeben und nicht Ihr reguläres Root-Passwort.
Wordpress installieren
Zuletzt werden wir WordPress für die Verwendung in unserem Cluster einrichten. Am mariadb01-Knoten, am haproxy01- und am wp01-Knoten muss noch gearbeitet werden.
Auf mariadb01
mysql -u root -p
CREATE DATABASE wordpress;
CREATE USER wordpressuser@localhost IDENTIFIED BY 'password';
GRANT ALL ON wordpress.* TO wordpressuser@'192.168.210.252' IDENTIFIED BY 'password';
Auf dem wp01-Knotensatz in /etc/hosts/
192.168.220.17 wp01
192.168.210.252 haproxy01
Auch auf haproxy01 hinzufügen
192.168.220.17 wp01
Als nächstes müssen wir die erforderlichen Pakete auf dem wp01-Knoten installieren
yum install httpd php php-gd php-mysqlnd rsync
Von hier aus müssen wir ein Nicht-Root-Konto mit sudo-Berechtigungen verwenden. Ich habe keins, also werde ich es erstellen:
useradd miki
usermod miki -aG wheel
passwd miki
Melden Sie sich dann als mein Benutzer an
su miki
Ändere das Verzeichnis nach home
cd
Laden Sie dann die neueste Version von WordPress herunter und entpacken Sie sie
wget http://wordpress.org/latest.tar.gz
tar xzvf latest.tar.gz
Wir werden rsync verwenden, um die WordPress-Datei in das Apache-Verzeichnis zu kopieren
sudo rsync -avP ~/wordpress/ /var/www/html/
mkdir /var/www/html/wp-content/uploads
Außerdem müssen wir den Besitz auf den Apache-Benutzer ändern
sudo chown -R apache:apache /var/www/html/*
WordPress konfigurieren
WordPress wird in der Datei wp-config.php konfiguriert, dort müssen wir Parameter wie Hostadresse des Datenbankservers, Anmeldeinformationen, Datenbankname festlegen. Lassen Sie uns die Konfigurationsdatei sichern:
cd /var/www/html
cp wp-config-sample.php wp-config.php
Und dann bearbeiten wir:
nano wp-config.php
Ändern Sie nur diese Zeilen
define('DB_NAME', 'wordpress');
/** MySQL database username */
define('DB_USER', 'wordpressuser');
/** MySQL database password */
define('DB_PASSWORD', 'password');
/** MySQL hostname */
define('DB_HOST', '192.168.210.252:3030');
Zuletzt starten wir den Apache-Webserver neu:
sudo systemctl restart httpd
Schließen Sie die Installation von WordPress über den Browser ab
Wir können zur öffentlichen Adresse des WordPress-Knotens wie unten gehen, um den Installationsprozess von WordPress fortzusetzen
Jetzt haben wir den Cluster mit laufendem WordPress eingerichtet
Schlussfolgerung
Hier haben wir WordPress auf dem Galera-Cluster mit Lastausgleich durch HAproxy eingerichtet. Dies ist eine robuste Lösung für Websites mit hoher Auslastung, und obwohl die Einrichtung eine Weile dauert, schützt sie Ihre Website nahezu vollständig vor Ausfallzeiten. Der gesamte Datenverkehr zwischen den Knoten erfolgt über private IP-Adressen, und nur eine öffentliche Adresse für das Worpress-Frontend wird für den Zugriff auf die Site verwendet. Das wäre alles für diesen Artikel, danke fürs Lesen und einen schönen Tag.