Wie richte ich STONITH in einem 2-Knoten-Aktiv / Passiv-Linux-HA-Schrittmacher-Cluster ein?

12

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?

MMehr
quelle
Wie sieht die Ausgabe von crm_monaus, wenn sich Ihr Cluster in einem fehlerhaften Zustand befindet?
Larsks
1
Jetzt verwende ich ein Stonith-Gerät, das nicht auf demselben Knoten wie Postgres ausgeführt wird. Diese Arbeit ist wie erwartet!
MMehr

Antworten:

21

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 corosyncauf dem aktiven Knoten aus. Andere Möglichkeiten sind crm node fenceoder stonith_admin -F.

Aus der nicht ganz vollständigen Beschreibung Ihres Clusters (wo ist die Ausgabe von crm configure showund cat /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 wie node1172.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. node1tut ssh root@node2 "shutdown -h now"und node2tut ssh 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 fenceoder stonith_admin -Fstatt. Eine Unterbrechung der Cluster-Kommunikation führt nur zu einem Split-Brain-Szenario, das zur Beschädigung von Daten führen kann und wird.

daff
quelle
2

Sie können versuchen, sie auto_tie_breaker: 1in den Quorum-Abschnitt von /etc/corosync/corosync.conf einzufügen

Wenn ATB aktiviert ist, können im Cluster bis zu 50% der Knoten gleichzeitig ausfallen, und zwar deterministisch. Die Cluster-Partition oder die Gruppe von Knoten, die noch mit dem Knoten mit der niedrigsten Knoten-ID in Kontakt stehen, bleibt uneingeschränkt gültig. Die anderen Knoten werden abgefragt.

1mi
quelle
0

Lesen Sie das Kapitel Quorum und Cluster mit zwei Knoten in der Pacemaker-Dokumentation.

larsks
quelle
Denken Sie, Sie meinen die Sache 'Nicht-Quorum-Politik = Ignorieren'. Ich habe es bereits eingestellt (bearbeitet auch meinen ersten Beitrag). Hilft mir hier nicht. Können Sie das bitte genauer erläutern?
Mehr
Aus der Dokumentation geht hervor, dass der Schrittmacher bestimmte Meldungen protokolliert, wenn Quorumprobleme mit dem Cluster vorliegen. Sehen Sie das in Ihren Protokollen? Was crm_monzeigt?
Larsks
Ich kann etw nicht finden interessant in den Protokollen. Ich habe meinen ersten Beitrag mit Informationen von bearbeitet crm_mon -1.
Mehr