docked webserver and recovery script for cluster

This commit is contained in:
Tower committed 2026-05-29 12:24:03 +02:00
1 parent 30453ced4e
commit a90cd8dd64
4 files changed
+93 -1

No files matched your search

+17 -1
View File
@@ -44,13 +44,29 @@ bash docker/scripts/check_nodes.sh
```
Die Ausgabe sollte **`wsrep_cluster_size | 3`** anzeigen.
## Web-Dashboard (Optional)
Du kannst einen kleinen Webserver starten, der den Status des Clusters grafisch im Browser anzeigt:
1. Starte den Webserver:
```bash
bash docker/scripts/init_webserver.sh
```
2. Öffne im Browser: `http://[SERVER-IP]:8080`
## Wichtige Hinweise
### Network Mode Host
Die Container nutzen `network_mode: host`. Das sorgt für maximale Performance, da kein Docker-Netzwerk-Overhead entsteht. MariaDB ist direkt über die IP des Host-Servers erreichbar.
### Neustart des Clusters
Falls der gesamte Cluster gestoppt wurde, muss der erste Knoten immer wieder mit dem `init_cluster_n1.sh` Skript (Bootstrap) gestartet werden, um den Cluster neu zu initialisieren. Die anderen Knoten können danach normal mit ihren jeweiligen Skripten beitreten.
Falls der gesamte Cluster gestoppt wurde, muss der erste Knoten immer wieder mit dem `init_cluster_n1.sh` Skript (Bootstrap) gestartet werden, um den Cluster neu zu initialisieren.
#### Fehlerbehebung (Recovery)
Falls der Cluster nach einem harten Neustart im "Restart-Loop" hängt, nutze auf **Server 1** das Recovery-Skript:
```bash
bash docker/scripts/recover_cluster.sh
```
Dieses Skript forciert den Bootstrap von Node 1. Sobald dieser fertig ist, kannst du Node 2 und 3 normal starten.
### Verzeichnisstruktur
Die Skripte erwarten, dass die Verzeichnisstruktur (`docker/scripts/` und `docker/mariadb/n*/`) erhalten bleibt, da sie intern mit relativen Pfaden arbeiten.
+11
View File
@@ -0,0 +1,11 @@
#!/usr/bin/env bash
# Verzeichnis dieses Skripts ermitteln
SCRIPT_DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
# Pfad zum webserver Verzeichnis
WEB_DIR="$(dirname "$SCRIPT_DIR")/webserver"
echo "Starte Galera Dashboard (Webserver)..."
cd "$WEB_DIR"
docker compose up -d
echo "Dashboard gestartet! Erreichbar unter http://localhost:8080 (oder die IP dieses Servers)"
+53
View File
@@ -0,0 +1,53 @@
#!/usr/bin/env bash
# recover_cluster.sh
# Dieses Skript repariert den Galera Cluster nach einem harten Neustart oder Absturz.
# Es sollte auf dem Hauptknoten (Node 1) ausgeführt werden.
SCRIPT_DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
PROJECT_ROOT="$(dirname "$SCRIPT_DIR")"
NODE1_DATA="$PROJECT_ROOT/mariadb/n1/data"
GRASTATE_FILE="$NODE1_DATA/grastate.dat"
GVWSTATE_FILE="$NODE1_DATA/gvwstate.dat"
echo "--- Galera Cluster Recovery Start ---"
# 1. Alle Container auf diesem Server stoppen
echo "[1/5] Stoppe lokale Container..."
cd "$PROJECT_ROOT/mariadb/n1"
docker compose down > /dev/null 2>&1
# 2. View State bereinigen (verhindert hängenbleiben in alter Sicht)
if [ -f "$GVWSTATE_FILE" ]; then
echo "[2/5] Lösche veraltete View-State Datei..."
rm "$GVWSTATE_FILE"
fi
# 3. safe_to_bootstrap in grastate.dat auf 1 setzen
if [ -f "$GRASTATE_FILE" ]; then
echo "[3/5] Forciere safe_to_bootstrap in grastate.dat..."
# Nutze sed um den Wert sicher auf 1 zu setzen
sed -i 's/safe_to_bootstrap: 0/safe_to_bootstrap: 1/' "$GRASTATE_FILE"
else
echo "WARNUNG: $GRASTATE_FILE nicht gefunden. Ist der Pfad korrekt?"
fi
# 4. Node 1 mit Bootstrap-Flag neu starten
echo "[4/5] Starte Node 1 im Bootstrap-Modus..."
GALERA_BOOTSTRAP="--wsrep-new-cluster" docker compose up -d
# 5. Status-Überprüfung
echo "[5/5] Warte auf Initialisierung (max 30s)..."
for i in {1..15}; do
STATUS=$(docker exec mariadb_n1 mariadb -uworker -pbBHofurUJWKzPE8Z -e "SHOW STATUS LIKE 'wsrep_local_state_comment';" 2>/dev/null | grep 'Synced')
if [ ! -z "$STATUS" ]; then
echo "ERFOLG: Node 1 ist SYNCED und bereit."
echo "Du kannst jetzt auf den anderen Servern die init_cluster Skripte starten."
exit 0
fi
sleep 2
done
echo "FEHLER: Node 1 konnte nicht automatisch synchronisiert werden."
echo "Bitte prüfe die Logs mit: docker logs mariadb_n1"
exit 1
+12
View File
@@ -0,0 +1,12 @@
services:
webserver:
image: php:8.2-apache
container_name: galera_dashboard
ports:
- "8080:80"
volumes:
- ./index.php:/var/var/www/html/index.php
# Wir installieren die PDO MySQL Erweiterung direkt beim Start
command: >
sh -c "docker-php-ext-install pdo pdo_mysql && apache2-foreground"
restart: unless-stopped