Database HA in Compose: Replikation, Failover und split-brain Risiken

In produktiven Docker Compose-Umgebungen ist die Hochverfügbarkeit von Datenbanken essenziell, um Datenverlust und Ausfallzeiten zu vermeiden. Dieses Tutorial behandelt, wie man Datenbank-Cluster in Compose aufsetzt, Replikation implementiert, Failover automatisiert und typische Risiken wie Split-Brain minimiert. Der Fokus liegt auf praxisnahen Patterns für MySQL/MariaDB, PostgreSQL und ähnliche relationale Systeme.

1. Grundlagen der Database HA

Datenbank-Hochverfügbarkeit umfasst mehrere Aspekte:

  • Replikation: Synchronisation von Daten zwischen Master und Replicas.
  • Failover: Automatische Umschaltung auf einen Replica bei Master-Ausfall.
  • Split-Brain: Szenario, bei dem zwei Nodes gleichzeitig als Master agieren, was zu Dateninkonsistenzen führt.
  • Consistency vs. Availability: Abwägen zwischen strenger Konsistenz und systemweiter Verfügbarkeit.

2. Architektur in Compose

In Compose werden mehrere Datenbank-Container definiert, die über ein internes Netzwerk miteinander kommunizieren. Typische Rollen:

  • Primary/Master für Schreibzugriffe
  • Replica/Secondary für Lesezugriffe
  • Optional: Arbiter oder Witness für Quorum-basierte Entscheidungen

Beispiel Compose-Setup für MySQL HA

version: "3.8"
services:
  mysql-master:
    image: mysql:8
    environment:
      MYSQL_ROOT_PASSWORD: rootpass
      MYSQL_DATABASE: appdb
    volumes:
      - db-master-data:/var/lib/mysql
    networks:
      - dbnet

mysql-replica:
image: mysql:8
environment:
MYSQL_ROOT_PASSWORD: rootpass
MYSQL_DATABASE: appdb
MYSQL_REPLICATION_MODE: replica
MYSQL_REPLICATION_USER: repl
MYSQL_REPLICATION_PASSWORD: replpass
MYSQL_MASTER_HOST: mysql-master
depends_on:
- mysql-master
volumes:
- db-replica-data:/var/lib/mysql
networks:
- dbnet

volumes:
db-master-data:
db-replica-data:

networks:
dbnet:
driver: bridge

3. Replikation einrichten

Für relationale Datenbanken kann die Replikation auf Binlog-Basis (MySQL) oder WAL (PostgreSQL) erfolgen. Wichtig ist, Benutzer für die Replikation anzulegen und die Netzwerkverbindung zu konfigurieren.

MySQL Replikation initialisieren

# Auf dem Master
mysql> CREATE USER 'repl'@'%' IDENTIFIED BY 'replpass';
mysql> GRANT REPLICATION SLAVE ON *.* TO 'repl'@'%';
mysql> FLUSH PRIVILEGES;
mysql> FLUSH TABLES WITH READ LOCK;
mysql> SHOW MASTER STATUS;

Die erhaltenen Werte (File, Position) werden auf den Replica übertragen, um die Replikation zu starten.

PostgreSQL Streaming Replication

# Auf dem Master (postgresql.conf)
wal_level = replica
max_wal_senders = 3
hot_standby = on

Auf dem Replica

pg_basebackup -h master -D /var/lib/postgresql/data -U repl -v -P

4. Failover Mechanismen

Automatisches Failover kann über externe Tools oder Scripts umgesetzt werden, da Compose selbst keine orchestrierte Failover-Logik bietet.

Beispiel: Keepalived + VIP

  • Master bindet VIP (z. B. 10.0.0.50)
  • Backup überwacht Master über Healthchecks
  • Master fällt aus → Backup übernimmt VIP und neue Clients verbinden sich automatisch

Beispiel: Orchestrierte Failover Scripts

# healthcheck.sh
#!/bin/bash
if ! mysqladmin ping -h mysql-master --silent; then
  echo "Failover required"
  # Promote replica to master
  mysql -h mysql-replica -e "STOP SLAVE; RESET SLAVE ALL; SET GLOBAL read_only=0;"
fi

5. Split-Brain Risiken

Split-Brain tritt auf, wenn Netzwerkpartitionen entstehen und mehrere Nodes gleichzeitig als Master agieren. Dies kann zu Datenverlust oder Inkonsistenzen führen.

Strategien zur Vermeidung

  • Quorum-basierte Abstimmungen (z. B. mit Galera Cluster)
  • VIP oder external fencing, um nur einem Node Schreibrechte zu geben
  • Monitoring und Healthchecks, um aktive Master zu identifizieren
  • Replication Mode: Semi-Sync Replikation bei MySQL

6. Backup und Restore Tests

HA allein schützt nicht vor Datenverlust. Regelmäßige Backups und Restore-Tests sind essenziell.

# Beispiel mysqldump Backup
docker exec mysql-master sh -c 'exec mysqldump --all-databases -uroot -prootpass' > all_db_backup.sql

# Restore auf Replica/Testhost
docker exec -i mysql-replica sh -c 'mysql -uroot -prootpass' < all_db_backup.sql

7. Monitoring

Wichtige Metriken für HA-Datenbanken:

  • Replication Lag
  • Connection Errors
  • VIP Failover Events
  • CPU/Memory Nutzung der DB-Container

Tools: Prometheus + Grafana, ELK Stack, Percona Monitoring Plugins.

8. Best Practices

  • Immer mindestens zwei Replikate für kritische Dienste.
  • Regelmäßige Failover Tests durchführen.
  • Healthchecks für Master und Replica implementieren.
  • Backup und Restore Prozesse automatisieren und testen.
  • Quorum-Mechanismen bei Clustern wie Galera oder Patroni nutzen.
  • Netzwerkpartitionen und Split-Brain Szenarien bewusst simulieren.

9. Zusammenfassung

Hochverfügbare Datenbanken in Docker Compose erfordern eine klare Trennung von Master/Replica-Rollen, sorgfältige Replikationseinstellungen, Failover-Mechanismen und Monitoring. Durch den Einsatz von VIPs, Healthchecks und bewährten Backup-Strategien lassen sich Ausfallzeiten minimieren und Split-Brain-Risiken reduzieren. Dieses Setup eignet sich für produktive Compose-Umgebungen ohne Orchestrator, in denen dennoch Redundanz und Datenintegrität gefordert sind.

Konfiguriere Cisco Router & Switches und liefere ein Packet-Tracer-Lab/GNS3

Ich biete professionelle Unterstützung im Bereich Netzwerkkonfiguration und Network Automation für private Anforderungen, Studienprojekte, Lernlabore, kleine Unternehmen sowie technische Projekte. Ich unterstütze Sie bei der Konfiguration von Routern und Switches, der Erstellung praxisnaher Topologien in Cisco Packet Tracer, dem Aufbau und Troubleshooting von GNS3- und EVE-NG-Labs sowie bei der Automatisierung von Netzwerkaufgaben mit Netmiko, Paramiko, NAPALM und Ansible. Kontaktieren Sie mich jetzt – klicken Sie hier.

Meine Leistungen umfassen:

  • Professionelle Konfiguration von Routern und Switches

  • Einrichtung von VLANs, Trunks, Routing, DHCP, NAT, ACLs und weiteren Netzwerkfunktionen

  • Erstellung von Topologien und Simulationen in Cisco Packet Tracer

  • Aufbau, Analyse und Fehlerbehebung von Netzwerk-Labs in GNS3 und EVE-NG

  • Automatisierung von Netzwerkkonfigurationen mit Python, Netmiko, Paramiko, NAPALM und Ansible

  • Erstellung von Skripten für wiederkehrende Netzwerkaufgaben

  • Dokumentation der Konfigurationen und Bereitstellung nachvollziehbarer Lösungswege

  • Konfigurations-Backups, Optimierung bestehender Setups und technisches Troubleshooting

Benötigen Sie Unterstützung bei Ihrem Netzwerkprojekt, Ihrer Simulation oder Ihrer Network-Automation-Lösung? Kontaktieren Sie mich jetzt – klicken Sie hier.

Related Articles