Ich versuche einen aktiven / passiven (2 Knoten) Linux-HA-Cluster mit Corosync und Schrittmacher einzurichten, um eine PostgreSQL-Datenbank in Betrieb zu halten. Es funktioniert über DRBD und eine Service-IP. Wenn node1 ausfällt, sollte node2 übernehmen. Das gleiche gilt, wenn PG auf Node2 ausgeführt wird und dies fehlschlägt. Alles funktioniert gut, bis auf das STONITH-Ding.
Zwischen den Knoten besteht eine dedizierte HA-Verbindung (10.10.10.X), daher habe ich folgende Schnittstellenkonfiguration:
eth0 eth1 host
10.10.10.251 172.10.10.1 node1
10.10.10.252 172.10.10.2 node2
Stonith ist aktiviert und ich teste mit einem SSH-Agenten, um Knoten zu töten.
crm configure property stonith-enabled=true
crm configure property stonith-action=poweroff
crm configure rsc_defaults resource-stickiness=100
crm configure property no-quorum-policy=ignore
crm configure primitive stonith_postgres stonith:external/ssh \
params hostlist="node1 node2"
crm configure clone fencing_postgres stonith_postgres
crm_mon -1
zeigt an:
============
Last updated: Mon Mar 19 15:21:11 2012
Stack: openais
Current DC: node2 - partition with quorum
Version: 1.0.9-74392a28b7f31d7ddc86689598bd23114f58978b
2 Nodes configured, 2 expected votes
4 Resources configured.
============
Online: [ node2 node1 ]
Full list of resources:
Master/Slave Set: ms_drbd_postgres
Masters: [ node1 ]
Slaves: [ node2 ]
Resource Group: postgres
fs_postgres (ocf::heartbeat:Filesystem): Started node1
virtual_ip_postgres (ocf::heartbeat:IPaddr2): Started node1
postgresql (ocf::heartbeat:pgsql): Started node1
Clone Set: fencing_postgres
Started: [ node2 node1 ]
Problem ist: Wenn ich die Verbindung zwischen den eth0-Schnittstellen unterbreche, werden beide Knoten zerstört . Ich denke, es ist ein Problem mit dem Quorum, weil es nur 2 Knoten gibt. Aber ich möchte keinen dritten Knoten hinzufügen, nur um das richtige Quorum zu berechnen.
Gibt es Ideen, um dieses Problem zu lösen?
crm_mon
aus, wenn sich Ihr Cluster in einem fehlerhaften Zustand befindet?Antworten:
Dies ist eine etwas ältere Frage, aber das hier vorgestellte Problem beruht auf einer falschen Vorstellung darüber, wie und wann ein Failover in Clustern, insbesondere in Clustern mit zwei Knoten, funktioniert.
Das Wesentliche ist: Sie können keine Failover-Tests durchführen, indem Sie die Kommunikation zwischen den beiden Knoten deaktivieren. Auf diese Weise erhalten Sie genau das, was Sie gerade sehen, ein Split-Brain-Szenario mit zusätzlichem, gegenseitigem STONITH. Wenn Sie die Fencing-Funktionen testen möchten, reicht ein einfacher Befehl
killall -9 corosync
auf dem aktiven Knoten aus. Andere Möglichkeiten sindcrm node fence
oderstonith_admin -F
.Aus der nicht ganz vollständigen Beschreibung Ihres Clusters (wo ist die Ausgabe von
crm configure show
undcat /etc/corosync/corosync.conf
?) Geht hervor, dass Sie die Adressen 10.10.10.xx für Messaging verwenden, dh Corosync / Cluster-Kommunikation. Die 172.10.10.xx-Adressen sind Ihre regulären / Service-Netzwerkadressen, und Sie würden auf einen bestimmten Knoten, beispielsweise mit SSH, über seine 172.10.10.xx-Adresse zugreifen. DNS scheint auch einen Knoten-Hostnamen wienode1
172.10.10.1 aufzulösen.Sie haben STONITH für die Verwendung von SSH konfiguriert, was an sich keine sehr gute Idee ist, aber Sie testen wahrscheinlich nur. Ich habe es selbst nicht verwendet, aber ich gehe davon aus, dass sich der SSH STONITH-Agent beim anderen Knoten anmeldet und einen Befehl zum Herunterfahren ausgibt, wie z
ssh root@node2 "shutdown -h now"
. B. oder etwas Ähnliches .Was passiert nun, wenn Sie die Clusterkommunikation zwischen den Knoten unterbrechen? Die Knoten sehen nicht mehr jeden Knoten als gesund und munter an, da zwischen ihnen keine Kommunikation mehr besteht. Somit nimmt jeder Knoten an, dass er der einzige Überlebende eines unglücklichen Ereignisses ist, und versucht, der aktive oder primäre Knoten zu werden (oder zu bleiben). Dies ist das klassische und gefürchtete Split-Brain-Szenario .
Ein Teil davon besteht darin , sicherzustellen, dass der andere, offensichtlich und vermutlich ausgefallene Knoten endgültig ausgefallen ist. Hier kommt STONITH ins Spiel . Denken Sie daran, dass beide Knoten jetzt dasselbe Spiel spielen: versuchen, aktiv zu werden (oder zu bleiben) und zu übernehmen über alle Cluster-Ressourcen, sowie den anderen Knoten im Kopf zu schießen.
Sie können sich wahrscheinlich vorstellen, was jetzt passiert.
node1
tutssh root@node2 "shutdown -h now"
undnode2
tutssh root@node1 "shutdown -h now"
. Hierbei wird nicht das Cluster-Kommunikationsnetz 10.10.10.xx, sondern das Dienstnetz 172.10.10.xx verwendet. Da beide Knoten tatsächlich am Leben sind und in Ordnung sind, können sie problemlos Befehle ausgeben oder SSH-Verbindungen empfangen, sodass beide Knoten gleichzeitig auf einander zugreifen. Dies tötet beide Knoten.Wenn Sie STONITH nicht verwenden, kann ein Split-Brain noch schlimmere Konsequenzen haben, insbesondere im Falle von DRBD, bei dem beide Knoten primär werden können. Datenkorruption ist wahrscheinlich und das Split-Brain muss manuell behoben werden.
Ich empfehle, das Material auf http://www.hastexo.com/resources/hints-and-kinks zu lesen, das von den Leuten geschrieben und gepflegt wird, die einen großen Teil dessen beigetragen haben (und immer noch beitragen), was wir heute als "Linux HA" bezeichnen Stapel".
TL; DR : Wenn Sie die Cluster-Kommunikation zwischen Ihren Knoten unterbrechen, um Ihre Fencing-Konfiguration zu testen, machen Sie es falsch . Verwendung
killall -9 corosync
,crm node fence
oderstonith_admin -F
statt. Eine Unterbrechung der Cluster-Kommunikation führt nur zu einem Split-Brain-Szenario, das zur Beschädigung von Daten führen kann und wird.quelle
Sie können versuchen, sie
auto_tie_breaker: 1
in den Quorum-Abschnitt von /etc/corosync/corosync.conf einzufügenquelle
Lesen Sie das Kapitel Quorum und Cluster mit zwei Knoten in der Pacemaker-Dokumentation.
quelle
crm_mon
zeigt?crm_mon -1
.Überprüfen Sie dies für HA-Cluster mit Pacemaker: http://clusterlabs.org/doc/en-US/Pacemaker/1.1/html/Clusters_from_Scratch/index.html
quelle