Ubuntu 18.04 - High-Availability Galera-Cluster mit HAProxy und Keepalived

Aus Twilight-Networks Wiki
Wechseln zu:Navigation, Suche


Outdated.png


Diese Dokumentation ist nicht mehr aktuell und wurde ersetzt.

Verwenden Sie die Dokumentation nur noch bei gerechtfertigten Anwendungsfällen.

Neue Version: Ubuntu 20.04 - High-Availability Galera-Cluster mit HAProxy und Keepalived




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.


Ubuntu 18.04 - High-Availability Galera-Cluster mit HAProxy und Keepalived
Stand: 03/2020


HAProxy-logo.png


Verwendete Software:


Voraussetzungen:


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
beispiel.conf
url		= www.twlnet.com
content	= Dokumentationen

domain	= example.com
owner	= root
Anzupassende Parameter:
# 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
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
# 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
Anzupassende Parameter:
# 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:

my.cnf
[mysqld]
[...]
### HAProxy
proxy-protocol-networks         = localhost, 192.0.2.101, 192.0.2.102, 192.0.2.103
[...]
Anzupassende Parameter:
# 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.conf
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
# 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
		}
}
Anzupassende Parameter:
# 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
[...]