Ubuntu 18.04 - High-Availability Galera-Cluster mit HAProxy und Keepalived
Verwenden Sie die Dokumentation nur noch bei gerechtfertigten Anwendungsfällen.
Vorwort
Diese Dokumentation beschreibt den Installationsvorgang von einem High-Availability Galera-Cluster.
Bitte vergewissern Sie sich, dass Ihr System über die nötigen Voraussetzungen verfügt, wie in der Infobox beschrieben. Weiterhin sind Grundkenntnisse im Umgang mit Linux erforderlich, da die Vorgehensweise, wie sie hier beschrieben ist, in manchen Teilen abweichen kann. Kein System ist wie das Andere. Die Dokumentation wurde sorgfältig von mir geprüft. Dennoch kann ich keinerlei Haftung für Schäden an Ihrem System oder eine Gewährleistung übernehmen. Bitte verwenden Sie diese Dokumentation auf eigene Gefahr.
Verwendete Software:
Voraussetzungen:
- Ubuntu 18.04 LTS
- funktionierender Galera-Cluster, z.B.:
Weitere, empfohlene Dokumentationen:
Was soll erreicht werden?
Ziel dieser Dokumentation soll sein, ... .
Was muss ich in der Konfiguration anpassen?
Einige Parameter müssen auf Ihre Umgebung angepasst werden. Im Verlauf dieser Dokumentation müssen Sie nur die Parameter anpassen, die in der nachfolgenden Tabelle aufgelistet sind. Sie können also ganz einfach durch die Funktion "Suchen und Ersetzen" (STRG + H), die Konfigurationsdateien auf Ihre Umgebung anpassen. Das Gleiche gilt für auszuführende Kommandos.
Folgende Parameter werden verwendet:
Wert | Hinweis | |
---|---|---|
HAProxy: | ||
IPv4-Adresse | 192.0.2.100 | Ersetzen Sie diesen Wert durch die Ihre HAProxy-IP-Adresse. |
Node01: | ||
Hostname | galera-node01.example.tld | Ersetzen Sie diesen Wert durch den FQDN Ihres Servers. |
IPv4-Adresse | 192.0.2.101 | Ersetzen Sie diesen Wert durch die IP-Adresse Ihres Servers. |
Domain | example.tld | Ersetzen Sie diesen Wert durch Ihre Domain. |
Node02: | ||
Hostname | galera-node02.example.tld | Ersetzen Sie diesen Wert durch den FQDN Ihres Servers. |
IPv4-Adresse | 192.0.2.102 | Ersetzen Sie diesen Wert durch die IP-Adresse Ihres Servers. |
Domain | example.tld | Ersetzen Sie diesen Wert durch Ihre Domain. |
Node03: | ||
Hostname | galera-node03.example.tld | Ersetzen Sie diesen Wert durch den FQDN Ihres Servers. |
IPv4-Adresse | 192.0.2.103 | Ersetzen Sie diesen Wert durch die IP-Adresse Ihres Servers. |
Domain | example.tld | Ersetzen Sie diesen Wert durch Ihre Domain. |
Konfigurations-Dateien werden immer nach dem gleichen Muster erstellt. Unter jeder Datei, die eine Anpassung erfordert, finden Sie die nötigen Hinweise.
Dateien, die zwar Parameter aber keine eigentliche Konfiguration enthalten, werden nach dem vorgegebenen Syntax erstellt.
Beispiel:
Im folgenden Beispiel ist die Datei /home/beispiel.conf
zu erstellen und der Parameter domain
anzupassen.
Erstellen Sie eine neue Datei /home/beispiel.conf
mit folgendem Inhalt:
# nano /home/beispiel.conf
url = www.twlnet.com
content = Dokumentationen
domain = example.com
owner = root
# beispiel.conf
[...]
domain = example.com
[...]
Im folgenden Beispiel ist die Datei /home/beispiel.map
mit einer Liste Ihrer E-Mail-Adressen zu erstellen.
Erstellen Sie eine neue Datei /home/beispiel.map
nach folgendem Syntax:
# nano /home/beispiel.map
benutzer1@example.com
benutzer2@example.com
benutzer3@example.com
Die nachfolgende Anleitung muss auf allen Nodes durchgeführt werden!
Server vorbereiten
Root-Rechte einräumen
Während der gesamten Dokumentation werden Root-Rechte benötigt. Um auf das Voranstellen von sudo
zu verzichten, verschaffen Sie sich für die gesamte Sitzung erhöhte Rechte mit:
# sudo -i
Update durchführen
Bringen Sie die Nodes auf den aktuellen Patchstand:
# apt update && apt upgrade
Software herunterladen und installieren
Laden Sie haproxy
und keepalived
aus dem offiziellen Ubuntu-Repository herunter:
# apt install haproxy keepalived
Kernel-Parameter hinzufügen
Der folgende Kernel-Parameter sorgt dafür, dass HAProxy eine Bindung an eine nicht lokale IP-Adresse herstellen kann.
Also eine IP-Adresse, die (noch) keinem Gerät auf dem lokalen System zugewiesen ist.
Das ist notwendig, da die Floating-IP-Adresse immer nur einem Node zugewiesen wird.
Ergänzen Sie die Datei /etc/sysctl.conf
und wenden Sie die Änderungen an:
# echo "net.ipv4.ip_nonlocal_bind = 1" >> /etc/sysctl.conf # sysctl -p
HAProxy einrichten
MySQL-User erstellen
Stellen Sie eine Verbindung zum MySQL-Server her:
# mysql -u root -p
Erstellen Sie die Benutzer haproxy
.
CREATE USER 'haproxy'@'192.0.2.100';
CREATE USER 'haproxy'@'192.0.2.101';
CREATE USER 'haproxy'@'192.0.2.102';
CREATE USER 'haproxy'@'192.0.2.103';
FLUSH PRIVILEGES;
QUIT;
Konfiguration erstellen
Benennen Sie zunächst die /etc/haproxy/haproxy.cfg
um, damit Sie eine Sicherheitskopie der Original-Datei haben:
# mv /etc/haproxy/haproxy.cfg /etc/haproxy/haproxy.cfg.bak
Erstellen Sie eine neue Datei /etc/haproxy/haproxy.cfg
mit folgendem Inhalt:
# nano /etc/haproxy/haproxy.cfg
# haproxy.cfg
global
log /dev/log local0
log /dev/log local1 notice
chroot /var/lib/haproxy
stats socket /run/haproxy/admin.sock mode 660 level admin expose-fd listeners
stats timeout 30s
user haproxy
group haproxy
daemon
# Default SSL material locations
ca-base /etc/ssl/certs
crt-base /etc/ssl/private
# Default ciphers to use on SSL-enabled listening sockets.
# For more information, see ciphers(1SSL). This list is from:
# https://hynek.me/articles/hardening-your-web-servers-ssl-ciphers/
# An alternative list with additional directives can be obtained from
# https://mozilla.github.io/server-side-tls/ssl-config-generator/?server=haproxy
ssl-default-bind-ciphers ECDH+AESGCM:DH+AESGCM:ECDH+AES256:DH+AES256:ECDH+AES128:DH+AES:RSA+AESGCM:RSA+AES:!aNULL:!MD5:!DSS
ssl-default-bind-options no-sslv3
defaults
log global
mode http
option httplog
option dontlognull
timeout connect 5000
timeout client 50000
timeout server 50000
errorfile 400 /etc/haproxy/errors/400.http
errorfile 403 /etc/haproxy/errors/403.http
errorfile 408 /etc/haproxy/errors/408.http
errorfile 500 /etc/haproxy/errors/500.http
errorfile 502 /etc/haproxy/errors/502.http
errorfile 503 /etc/haproxy/errors/503.http
errorfile 504 /etc/haproxy/errors/504.http
frontend galera-cluster_frontend
bind 192.0.2.100:3306
mode tcp
default_backend galera-cluster_backend
backend galera-cluster_backend
balance source
mode tcp
option tcpka
option mysql-check user haproxy
server galera-node01 192.0.2.101:3306 check send-proxy weight 1
server galera-node02 192.0.2.102:3306 check send-proxy weight 1
server galera-node03 192.0.2.103:3306 check send-proxy weight 1
# haproxy.cfg
[...]
bind 192.0.2.100:3306
[...]
server galera-node01 192.0.2.101:3306 check send-proxy weight 1
server galera-node02 192.0.2.102:3306 check send-proxy weight 1
server galera-node03 192.0.2.103:3306 check send-proxy weight 1
MariaDB konfigurieren
Fügen Sie der Datei /etc/mysql/my.cnf
(oder /etc/mysql/conf.d/galera.cnf
) folgendes hinzu:
[mysqld]
[...]
### HAProxy
proxy-protocol-networks = localhost, 192.0.2.101, 192.0.2.102, 192.0.2.103
[...]
# my.cnf
[...]
proxy-protocol-networks = localhost, 192.0.2.101, 192.0.2.102, 192.0.2.103
[...]
Keepalived einrichten
Keepalived-Script-Benutzer erstellen
Erstellen Sie einen Benuter keepalived_script
:
# useradd -g users -M keepalived_script
Sudoers-Datei erstellen
Erstellen Sie eine neue Datei /etc/sudoers.d/keepalived
mit folgendem Inhalt:
# nano /etc/sudoers.d/keepalived
keepalived_script ALL=(root) NOPASSWD: /usr/bin/killall
Schränken Sie die Rechte auf diese Datei ein:
# chmod 440 /etc/sudoers.d/keepalived
Konfiguration erstellen
Erstellen Sie eine neue Datei /etc/keepalived/keepalived.conf
mit folgendem Inhalt:
# nano /etc/keepalived/keepalived.conf
# keepalived.conf
global_defs {
enable_script_security
}
vrrp_script chk_haproxy {
script "/usr/bin/sudo /usr/bin/killall -0 haproxy"
interval 2
weight 2
}
vrrp_instance VI_1 {
interface eth0
state BACKUP
virtual_router_id 51
priority 100
authentication {
auth_type PASS
auth_pass SicheresPasswortVerwenden!
}
virtual_ipaddress {
192.0.2.100
}
track_script {
chk_haproxy
}
}
# keepalived.conf
[...]
virtual_ipaddress {
192.0.2.100
}
[...]
authentication {
[...]
auth_pass SicheresRootPasswortVerwenden!
}
[...]
Inbetriebnahme und Test
Dienste neustarten
Starten Sie die neuen Dienste neu und kontrollieren Sie, ob die Dienste ohne Fehlermedlungen starten:
# service haproxy restart # service haproxy status [...] # service keepalived restart # service keepalived status [...] # service mariadb restart # service mariadb status [...]