Cluster-Setup (HA mit Corosync/Pacemaker): Unterschied zwischen den Versionen

Aus homelab-wiki.de
Zur Navigation springen Zur Suche springen
Die Seite wurde neu angelegt: „v“
 
Keine Bearbeitungszusammenfassung
 
(5 dazwischenliegende Versionen desselben Benutzers werden nicht angezeigt)
Zeile 1: Zeile 1:
v
= Hochverfügbarkeits-Cluster mit Corosync & Pacemaker unter Debian 12 =
 
== Ziel ==
Einrichten eines einfachen 2-Knoten HA-Clusters mit '''Pacemaker''', '''Corosync''' und '''PCS''' auf '''Debian 12'''.
 
== Voraussetzungen ==
{| class="wikitable"
! Hostname !! IP-Adresse
|-
| node1 || 10.0.0.10
|-
| node2 || 10.0.0.11
|}
 
* Frische Debian 12-Installation auf beiden Knoten
* Root-Zugang oder ''sudo''
* Zeitsynchronisierung (z. B. via ''chrony'' oder ''ntp'')
 
== Hostnamen & /etc/hosts einstellen ==
Auf '''beiden Knoten''':
 
<syntaxhighlight lang="bash">
echo "node1" > /etc/hostname  # nur auf node1
echo "node2" > /etc/hostname  # nur auf node2
</syntaxhighlight>
 
Datei '''/etc/hosts''' bearbeiten:
 
<syntaxhighlight lang="bash">
127.0.0.1  localhost
10.0.0.10  node1
10.0.0.11  node2
</syntaxhighlight>
 
== Netzwerkverbindung testen ==
 
<syntaxhighlight lang="bash">
ping -c3 10.0.0.11  # von node1
ping -c3 10.0.0.10  # von node2
</syntaxhighlight>
 
== Installation der Pakete ==
Auf '''beiden Knoten''':
 
<syntaxhighlight lang="bash">
sudo apt update
sudo apt install -y corosync pacemaker pcs
</syntaxhighlight>
 
== Benutzer für pcs konfigurieren ==
<syntaxhighlight lang="bash">
sudo passwd hacluster
</syntaxhighlight>
Das Passwort auf '''beiden Knoten identisch''' setzen!
 
== pcs-Dienst aktivieren und starten ==
<syntaxhighlight lang="bash">
sudo systemctl enable pcsd
sudo systemctl start pcsd
</syntaxhighlight>
 
== Firewall deaktivieren (zum Testen) ==
<syntaxhighlight lang="bash">
sudo ufw disable  # oder:
sudo systemctl stop firewalld
</syntaxhighlight>
 
== Authentifizierung der Knoten ==
Auf '''einem''' der Knoten (z. B. node1):
 
<syntaxhighlight lang="bash">
sudo pcs host auth node1 node2 -u hacluster
</syntaxhighlight>
 
== Cluster einrichten ==
Auf node1:
 
<syntaxhighlight lang="bash">
sudo pcs cluster setup ha_cluster node1 node2
sudo pcs cluster start --all
sudo pcs cluster enable --all
</syntaxhighlight>
 
== Clusterstatus prüfen ==
<syntaxhighlight lang="bash">
pcs status
</syntaxhighlight>
 
== Beispiel: Virtual IP als Ressource ==
Füge eine Cluster-VIP hinzu (z. B. '''10.0.0.100'''):
 
<syntaxhighlight lang="bash">
sudo pcs resource create ClusterIP ocf:heartbeat:IPaddr2 ip=10.0.0.100 cidr_netmask=24 op monitor interval=30s
</syntaxhighlight>
 
== STONITH deaktivieren (nur für Testumgebungen) ==
<syntaxhighlight lang="bash">
sudo pcs property set stonith-enabled=false
sudo pcs property set no-quorum-policy=ignore
</syntaxhighlight>
 
== Test des Clusters ==
* Prüfe mit <code>ip a</code>, ob die VIP (z. B. 10.0.0.100) aktiv ist.
* Simuliere einen Ausfall durch Herunterfahren eines Knotens:
<syntaxhighlight lang="bash">
sudo shutdown now
</syntaxhighlight>
 
== Hinweise ==
* In produktiven Umgebungen sollte '''STONITH''' korrekt konfiguriert werden.
* Weitere Ressourcen wie Apache, MariaDB oder DRBD können ebenfalls integriert werden.
 
= Fehlerdiagnose: Node ''UNCLEAN (offline)'' =
 
=== Beschreibung ===
Wenn ein Knoten im Cluster mit dem Status:
 
<pre>
Node node1: UNCLEAN (offline)
</pre>
 
angezeigt wird, bedeutet dies, dass der Cluster den Node als '''unsauberen (unclean) Knoten''' markiert hat. Dies passiert, wenn der Knoten nicht ordnungsgemäß aus dem Cluster entfernt oder heruntergefahren wurde.
 
=== Ursachen ===
 
* Knoten wurde unerwartet ausgeschaltet (z. B. VM manuell gestoppt)
* Netzwerkverbindung ist unterbrochen
* Dienste wie '''corosync''' oder '''pacemaker''' sind abgestürzt oder wurden gewaltsam beendet
* Hardware-/Ressourcenprobleme (z. B. hoher RAM- oder CPU-Verbrauch)
 
=== Auswirkungen ===
 
Der Cluster betrachtet den Node als potenziell fehlerhaft. Ressourcen werden ggf. nicht korrekt verteilt, und der Cluster reagiert mit Vorsicht, um Datenverlust oder Split-Brain-Szenarien zu verhindern.
 
=== Lösungsschritte ===
 
==== 1. Clusterdienste auf dem betroffenen Node neu starten ====
 
Auf dem betroffenen Node (z. B. node1) folgende Befehle ausführen:
 
<syntaxhighlight lang="bash">
sudo systemctl restart corosync
sudo systemctl restart pacemaker
</syntaxhighlight>
 
oder alternativ:
 
<syntaxhighlight lang="bash">
sudo pcs cluster start
</syntaxhighlight>
 
==== 2. Clusterstatus prüfen ====
 
Auf einem beliebigen Clusterknoten:
 
<syntaxhighlight lang="bash">
pcs status
</syntaxhighlight>
 
Wenn erfolgreich, sollte angezeigt werden:
 
<pre>
Node node1: Online
</pre>
 
==== 3. Optional: Manuelles Cleanup (nur bei Bedarf) ====
 
Falls der Node weiterhin als unclean angezeigt wird:
 
<syntaxhighlight lang="bash">
sudo pcs cluster node cleanup node1
</syntaxhighlight>
 
oder für alle Nodes:
 
<syntaxhighlight lang="bash">
sudo pcs cluster node cleanup --all
</syntaxhighlight>
 
'''Hinweis:''' Cleanup entfernt Fehlerstatus und Ressourcenzuweisungen. Nur durchführen, wenn die Ursache geklärt ist.
 
=== Prävention ===
 
* Alle Nodes sollten korrekt heruntergefahren werden (nicht "hart" stoppen)
* Stabile Netzwerkverbindung zwischen den Knoten sicherstellen
* Zeitsynchronisation über NTP oder chrony einrichten
* DNS oder ''/etc/hosts'' korrekt konfigurieren, sodass alle Knoten erreichbar sind

Aktuelle Version vom 9. Juli 2025, 15:38 Uhr

Hochverfügbarkeits-Cluster mit Corosync & Pacemaker unter Debian 12

Ziel

Einrichten eines einfachen 2-Knoten HA-Clusters mit Pacemaker, Corosync und PCS auf Debian 12.

Voraussetzungen

Hostname IP-Adresse
node1 10.0.0.10
node2 10.0.0.11
  • Frische Debian 12-Installation auf beiden Knoten
  • Root-Zugang oder sudo
  • Zeitsynchronisierung (z. B. via chrony oder ntp)

Hostnamen & /etc/hosts einstellen

Auf beiden Knoten:

echo "node1" > /etc/hostname   # nur auf node1
echo "node2" > /etc/hostname   # nur auf node2

Datei /etc/hosts bearbeiten:

127.0.0.1   localhost
10.0.0.10   node1
10.0.0.11   node2

Netzwerkverbindung testen

ping -c3 10.0.0.11  # von node1
ping -c3 10.0.0.10  # von node2

Installation der Pakete

Auf beiden Knoten:

sudo apt update
sudo apt install -y corosync pacemaker pcs

Benutzer für pcs konfigurieren

sudo passwd hacluster

Das Passwort auf beiden Knoten identisch setzen!

pcs-Dienst aktivieren und starten

sudo systemctl enable pcsd
sudo systemctl start pcsd

Firewall deaktivieren (zum Testen)

sudo ufw disable  # oder:
sudo systemctl stop firewalld

Authentifizierung der Knoten

Auf einem der Knoten (z. B. node1):

sudo pcs host auth node1 node2 -u hacluster

Cluster einrichten

Auf node1:

sudo pcs cluster setup ha_cluster node1 node2
sudo pcs cluster start --all
sudo pcs cluster enable --all

Clusterstatus prüfen

pcs status

Beispiel: Virtual IP als Ressource

Füge eine Cluster-VIP hinzu (z. B. 10.0.0.100):

sudo pcs resource create ClusterIP ocf:heartbeat:IPaddr2 ip=10.0.0.100 cidr_netmask=24 op monitor interval=30s

STONITH deaktivieren (nur für Testumgebungen)

sudo pcs property set stonith-enabled=false
sudo pcs property set no-quorum-policy=ignore

Test des Clusters

  • Prüfe mit ip a, ob die VIP (z. B. 10.0.0.100) aktiv ist.
  • Simuliere einen Ausfall durch Herunterfahren eines Knotens:
sudo shutdown now

Hinweise

  • In produktiven Umgebungen sollte STONITH korrekt konfiguriert werden.
  • Weitere Ressourcen wie Apache, MariaDB oder DRBD können ebenfalls integriert werden.

Fehlerdiagnose: Node UNCLEAN (offline)

Beschreibung

Wenn ein Knoten im Cluster mit dem Status:

Node node1: UNCLEAN (offline)

angezeigt wird, bedeutet dies, dass der Cluster den Node als unsauberen (unclean) Knoten markiert hat. Dies passiert, wenn der Knoten nicht ordnungsgemäß aus dem Cluster entfernt oder heruntergefahren wurde.

Ursachen

  • Knoten wurde unerwartet ausgeschaltet (z. B. VM manuell gestoppt)
  • Netzwerkverbindung ist unterbrochen
  • Dienste wie corosync oder pacemaker sind abgestürzt oder wurden gewaltsam beendet
  • Hardware-/Ressourcenprobleme (z. B. hoher RAM- oder CPU-Verbrauch)

Auswirkungen

Der Cluster betrachtet den Node als potenziell fehlerhaft. Ressourcen werden ggf. nicht korrekt verteilt, und der Cluster reagiert mit Vorsicht, um Datenverlust oder Split-Brain-Szenarien zu verhindern.

Lösungsschritte

1. Clusterdienste auf dem betroffenen Node neu starten

Auf dem betroffenen Node (z. B. node1) folgende Befehle ausführen:

sudo systemctl restart corosync
sudo systemctl restart pacemaker

oder alternativ:

sudo pcs cluster start

2. Clusterstatus prüfen

Auf einem beliebigen Clusterknoten:

pcs status

Wenn erfolgreich, sollte angezeigt werden:

Node node1: Online

3. Optional: Manuelles Cleanup (nur bei Bedarf)

Falls der Node weiterhin als unclean angezeigt wird:

sudo pcs cluster node cleanup node1

oder für alle Nodes:

sudo pcs cluster node cleanup --all

Hinweis: Cleanup entfernt Fehlerstatus und Ressourcenzuweisungen. Nur durchführen, wenn die Ursache geklärt ist.

Prävention

  • Alle Nodes sollten korrekt heruntergefahren werden (nicht "hart" stoppen)
  • Stabile Netzwerkverbindung zwischen den Knoten sicherstellen
  • Zeitsynchronisation über NTP oder chrony einrichten
  • DNS oder /etc/hosts korrekt konfigurieren, sodass alle Knoten erreichbar sind