fixes
This commit is contained in:
1 parent
7130ee6b53
commit
6524fb3fbd
13 files changed
+187
-44
No files matched your search
@@ -0,0 +1,55 @@
|
||||
# MariaDB Galera Cluster Setup (3 Server)
|
||||
|
||||
Dieses Setup ist für den Betrieb auf drei separaten Servern optimiert.
|
||||
|
||||
## Server-Struktur
|
||||
- **Server 1:** 10.233.1.101 (Bootstrap)
|
||||
- **Server 2:** 10.233.1.102 (Joiner)
|
||||
- **Server 3:** 10.233.1.103 (Joiner)
|
||||
|
||||
## Vorbereitung
|
||||
1. Stelle sicher, dass auf allen Servern **Docker** installiert ist.
|
||||
2. Die Firewall muss folgende Ports zwischen den Servern erlauben:
|
||||
- `3306` (MySQL/MariaDB)
|
||||
- `4567` (Galera Cluster)
|
||||
- `4568` (IST)
|
||||
- `4444` (SST)
|
||||
|
||||
## Installations-Ablauf
|
||||
|
||||
### 1. Auf Server 1 (10.233.1.101)
|
||||
Kopiere das Verzeichnis `docker/mariadb/n1` auf diesen Server.
|
||||
```bash
|
||||
cd n1
|
||||
# Cluster initialisieren
|
||||
GALERA_BOOTSTRAP="--wsrep-new-cluster" docker compose up -d
|
||||
```
|
||||
|
||||
### 2. Auf Server 2 (10.233.1.102)
|
||||
Kopiere das Verzeichnis `docker/mariadb/n2` auf diesen Server.
|
||||
```bash
|
||||
cd n2
|
||||
# Dem Cluster beitreten
|
||||
docker compose up -d
|
||||
```
|
||||
|
||||
### 3. Auf Server 3 (10.233.1.103)
|
||||
Kopiere das Verzeichnis `docker/mariadb/n3` auf diesen Server.
|
||||
```bash
|
||||
cd n3
|
||||
# Dem Cluster beitreten
|
||||
docker compose up -d
|
||||
```
|
||||
|
||||
## Status prüfen
|
||||
Führe auf einem beliebigen Server folgenden Befehl aus:
|
||||
```bash
|
||||
docker exec -it mariadb mariadb -p"bBHofurUJWKzPE8Z" -e "SHOW STATUS LIKE 'wsrep_cluster_size';"
|
||||
```
|
||||
Die `wsrep_cluster_size` muss **3** sein.
|
||||
|
||||
## Besonderheit: Network Mode Host
|
||||
Die Container nutzen `network_mode: host`. Das bedeutet:
|
||||
- Beste Performance (kein Docker-NAT-Overhead).
|
||||
- MariaDB lauscht direkt auf der IP des Servers.
|
||||
- Keine Port-Mappings in der `docker-compose.yml` nötig.
|
||||
@@ -0,0 +1,7 @@
|
||||
NODE_NAME=node1
|
||||
# Die öffentliche oder interne IP dieses Servers (Server 1)
|
||||
NODE_IP=10.233.1.101
|
||||
MARIADB_ROOT_PASSWORD=bBHofurUJWKzPE8Z
|
||||
MARIADB_DATABASE=cluster
|
||||
MARIADB_USER=worker
|
||||
MARIADB_PASSWORD=bBHofurUJWKzPE8Z
|
||||
@@ -1,22 +1,17 @@
|
||||
services:
|
||||
mariadb:
|
||||
image: mariadb:11.4.3 # Feste Version statt :latest
|
||||
image: mariadb:11.4.3
|
||||
container_name: mariadb
|
||||
network_mode: host
|
||||
volumes:
|
||||
- ./data/:/var/lib/mysql
|
||||
- ./galera/galera.cnf:/etc/mysql/conf.d/galera.cnf
|
||||
environment:
|
||||
MARIADB_ROOT_PASSWORD: bBHofurUJWKzPE8Z
|
||||
MARIADB_DATABASE: cluster
|
||||
MARIADB_USER: worker
|
||||
MARIADB_PASSWORD: bBHofurUJWKzPE8Z
|
||||
ports:
|
||||
- "3306:3306"
|
||||
- "4567:4567"
|
||||
- "4567:4567/udp"
|
||||
- "4568:4568"
|
||||
- "4444:4444"
|
||||
restart: unless-stopped # Nicht "always" – sonst bootet Node1 ewig
|
||||
MARIADB_ROOT_PASSWORD: ${MARIADB_ROOT_PASSWORD}
|
||||
MARIADB_DATABASE: ${MARIADB_DATABASE}
|
||||
MARIADB_USER: ${MARIADB_USER}
|
||||
MARIADB_PASSWORD: ${MARIADB_PASSWORD}
|
||||
restart: unless-stopped
|
||||
command: >
|
||||
mariadbd
|
||||
--wsrep_node_address=${NODE_IP}
|
||||
|
||||
@@ -0,0 +1,7 @@
|
||||
NODE_NAME=node2
|
||||
# Die öffentliche oder interne IP dieses Servers (Server 2)
|
||||
NODE_IP=10.233.1.102
|
||||
MARIADB_ROOT_PASSWORD=bBHofurUJWKzPE8Z
|
||||
MARIADB_DATABASE=cluster
|
||||
MARIADB_USER=worker
|
||||
MARIADB_PASSWORD=bBHofurUJWKzPE8Z
|
||||
@@ -1,22 +1,17 @@
|
||||
services:
|
||||
mariadb:
|
||||
image: mariadb:11.4.3 # Feste Version statt :latest
|
||||
image: mariadb:11.4.3
|
||||
container_name: mariadb
|
||||
network_mode: host
|
||||
volumes:
|
||||
- ./data/:/var/lib/mysql
|
||||
- ./galera/galera.cnf:/etc/mysql/conf.d/galera.cnf
|
||||
environment:
|
||||
MARIADB_ROOT_PASSWORD: bBHofurUJWKzPE8Z
|
||||
MARIADB_DATABASE: cluster
|
||||
MARIADB_USER: worker
|
||||
MARIADB_PASSWORD: bBHofurUJWKzPE8Z
|
||||
ports:
|
||||
- "3306:3306"
|
||||
- "4567:4567"
|
||||
- "4567:4567/udp"
|
||||
- "4568:4568"
|
||||
- "4444:4444"
|
||||
restart: unless-stopped # Nicht "always" – sonst bootet Node1 ewig
|
||||
MARIADB_ROOT_PASSWORD: ${MARIADB_ROOT_PASSWORD}
|
||||
MARIADB_DATABASE: ${MARIADB_DATABASE}
|
||||
MARIADB_USER: ${MARIADB_USER}
|
||||
MARIADB_PASSWORD: ${MARIADB_PASSWORD}
|
||||
restart: unless-stopped
|
||||
command: >
|
||||
mariadbd
|
||||
--wsrep_node_address=${NODE_IP}
|
||||
|
||||
@@ -0,0 +1,7 @@
|
||||
NODE_NAME=node3
|
||||
# Die öffentliche oder interne IP dieses Servers (Server 3)
|
||||
NODE_IP=10.233.1.103
|
||||
MARIADB_ROOT_PASSWORD=bBHofurUJWKzPE8Z
|
||||
MARIADB_DATABASE=cluster
|
||||
MARIADB_USER=worker
|
||||
MARIADB_PASSWORD=bBHofurUJWKzPE8Z
|
||||
@@ -1,22 +1,17 @@
|
||||
services:
|
||||
mariadb:
|
||||
image: mariadb:11.4.3 # Feste Version statt :latest
|
||||
image: mariadb:11.4.3
|
||||
container_name: mariadb
|
||||
network_mode: host
|
||||
volumes:
|
||||
- ./data/:/var/lib/mysql
|
||||
- ./galera/galera.cnf:/etc/mysql/conf.d/galera.cnf
|
||||
environment:
|
||||
MARIADB_ROOT_PASSWORD: bBHofurUJWKzPE8Z
|
||||
MARIADB_DATABASE: cluster
|
||||
MARIADB_USER: worker
|
||||
MARIADB_PASSWORD: bBHofurUJWKzPE8Z
|
||||
ports:
|
||||
- "3306:3306"
|
||||
- "4567:4567"
|
||||
- "4567:4567/udp"
|
||||
- "4568:4568"
|
||||
- "4444:4444"
|
||||
restart: unless-stopped # Nicht "always" – sonst bootet Node1 ewig
|
||||
MARIADB_ROOT_PASSWORD: ${MARIADB_ROOT_PASSWORD}
|
||||
MARIADB_DATABASE: ${MARIADB_DATABASE}
|
||||
MARIADB_USER: ${MARIADB_USER}
|
||||
MARIADB_PASSWORD: ${MARIADB_PASSWORD}
|
||||
restart: unless-stopped
|
||||
command: >
|
||||
mariadbd
|
||||
--wsrep_node_address=${NODE_IP}
|
||||
|
||||
@@ -1 +1,3 @@
|
||||
sudo docker exec -it mariadb mariadb -p"bBHofurUJWKzPE8Z" -e "SHOW STATUS LIKE 'wsrep_cluster_size';"
|
||||
#!/usr/bin/env bash
|
||||
# Prüft den lokalen Status des Containers
|
||||
docker exec -it mariadb mariadb -p"bBHofurUJWKzPE8Z" -e "SHOW STATUS LIKE 'wsrep_cluster_size'; SHOW STATUS LIKE 'wsrep_local_state_comment';"
|
||||
@@ -1 +1,11 @@
|
||||
NODE_IP="10.233.1.101" NODE_NAME="node01" GALERA_BOOTSTRAP="--wsrep-new-cluster" docker compose -f /home/worker/docker/mariadb/n1/docker-compose.yml --env-file /home/worker/docker/mariadb/n1/.env up -d --force-recreate
|
||||
#!/usr/bin/env bash
|
||||
# Verzeichnis dieses Skripts ermitteln
|
||||
SCRIPT_DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
|
||||
# Pfad zum n1 Verzeichnis
|
||||
NODE_DIR="$(dirname "$SCRIPT_DIR")/mariadb/n1"
|
||||
|
||||
echo "Starte MariaDB Galera Cluster (BOOTSTRAP auf Server 1)..."
|
||||
cd "$NODE_DIR"
|
||||
GALERA_BOOTSTRAP="--wsrep-new-cluster" docker compose up -d
|
||||
|
||||
echo "Knoten 1 (n1) gestartet."
|
||||
@@ -1,4 +1,11 @@
|
||||
#!/usr/bin/env bash
|
||||
# Node 2 dem bestehenden Cluster joinen.
|
||||
# Voraussetzung: Node 1 ist bereits gestartet und healthy.
|
||||
NODE_IP="10.233.1.102" NODE_NAME="node02" GALERA_BOOTSTRAP="" docker compose -f /home/worker/docker/mariadb/n2/docker-compose.yml --env-file /home/worker/docker/mariadb/n2/.env up -d --force-recreate
|
||||
# Verzeichnis dieses Skripts ermitteln
|
||||
SCRIPT_DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
|
||||
# Pfad zum n2 Verzeichnis
|
||||
NODE_DIR="$(dirname "$SCRIPT_DIR")/mariadb/n2"
|
||||
|
||||
echo "Trete Galera Cluster bei (Server 2 / n2)..."
|
||||
cd "$NODE_DIR"
|
||||
docker compose up -d
|
||||
|
||||
echo "Knoten 2 (n2) gestartet."
|
||||
@@ -1,4 +1,11 @@
|
||||
#!/usr/bin/env bash
|
||||
# Node 3 dem bestehenden Cluster joinen.
|
||||
# Voraussetzung: Node 1 (und idealerweise Node 2) sind bereits gestartet und healthy.
|
||||
NODE_IP="10.233.1.103" NODE_NAME="node03" GALERA_BOOTSTRAP="" docker compose -f /home/worker/docker/mariadb/n3/docker-compose.yml --env-file /home/worker/docker/mariadb/n3/.env up -d --force-recreate
|
||||
# Verzeichnis dieses Skripts ermitteln
|
||||
SCRIPT_DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
|
||||
# Pfad zum n3 Verzeichnis
|
||||
NODE_DIR="$(dirname "$SCRIPT_DIR")/mariadb/n3"
|
||||
|
||||
echo "Trete Galera Cluster bei (Server 3 / n3)..."
|
||||
cd "$NODE_DIR"
|
||||
docker compose up -d
|
||||
|
||||
echo "Knoten 3 (n3) gestartet."
|
||||
@@ -0,0 +1,26 @@
|
||||
#!/usr/bin/env bash
|
||||
# Verzeichnis dieses Skripts ermitteln
|
||||
SCRIPT_DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
|
||||
BASE_DIR="$(dirname "$SCRIPT_DIR")"
|
||||
|
||||
echo "Erstelle Docker Netzwerk..."
|
||||
docker network create --subnet=10.233.1.0/24 galera_net 2>/dev/null || true
|
||||
|
||||
echo "Starte Node 1 (Bootstrap)..."
|
||||
cd "$BASE_DIR/mariadb/n1"
|
||||
GALERA_BOOTSTRAP="--wsrep-new-cluster" docker compose up -d --force-recreate
|
||||
|
||||
echo "Warte auf Node 1 Healthcheck..."
|
||||
until [ "$(docker inspect -f '{{.State.Health.Status}}' mariadb_n1)" == "healthy" ]; do
|
||||
sleep 2
|
||||
done
|
||||
|
||||
echo "Starte Node 2..."
|
||||
cd "$BASE_DIR/mariadb/n2"
|
||||
docker compose up -d --force-recreate
|
||||
|
||||
echo "Starte Node 3..."
|
||||
cd "$BASE_DIR/mariadb/n3"
|
||||
docker compose up -d --force-recreate
|
||||
|
||||
echo "Cluster wird gestartet. Status prüfen mit: ./check_nodes.sh"
|
||||
@@ -0,0 +1,30 @@
|
||||
<?php
|
||||
$nodes = ['10.233.1.101', '10.233.1.102', '10.233.1.103'];
|
||||
$user = 'worker';
|
||||
$pass = 'bBHofurUJWKzPE8Z';
|
||||
$db = 'cluster';
|
||||
|
||||
echo "<h1>Galera Cluster Status</h1>";
|
||||
|
||||
foreach ($nodes as $node) {
|
||||
echo "<h2>Verbindung zu $node:</h2>";
|
||||
try {
|
||||
$pdo = new PDO("mysql:host=$node;dbname=$db", $user, $pass, [
|
||||
PDO::ATTR_TIMEOUT => 2,
|
||||
PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION
|
||||
]);
|
||||
|
||||
$stmt = $pdo->query("SHOW STATUS LIKE 'wsrep_local_state_comment'");
|
||||
$state = $stmt->fetch(PDO::FETCH_ASSOC);
|
||||
|
||||
$stmt = $pdo->query("SHOW STATUS LIKE 'wsrep_cluster_size'");
|
||||
$size = $stmt->fetch(PDO::FETCH_ASSOC);
|
||||
|
||||
echo "Status: <span style='color:green'>" . $state['Value'] . "</span><br>";
|
||||
echo "Cluster Größe: " . $size['Value'] . "<br>";
|
||||
|
||||
} catch (PDOException $e) {
|
||||
echo "Status: <span style='color:red'>Offline (" . $e->getMessage() . ")</span><br>";
|
||||
}
|
||||
}
|
||||
?>
|
||||
Reference in new issue
Block a user