it-fraggle
Goto Top

Pacemaker und Corosync 3 Node Cluster

Hallo,

aktuell arbeite ich an einem 3 Node Cluster für Hochverfügbarkeit. Die Umschaltung etc ist kein Problem. Allerdings habe ich keinen Schimmer wie ich das konfiguriere, dass ein Node, der alleine ist, keine Resourcen mehr startet. Heißt also: Kann er die beiden anderen Nodes nicht erreichen, dann schalte deine Ressourcen ab. Kann mir da mal jemand einen Schups in die richtige Richtung geben?

Gruß und Dank

Content-Key: 351121

Url: https://administrator.de/contentid/351121

Printed on: April 19, 2024 at 15:04 o'clock

Member: maretz
maretz Oct 08, 2017 at 16:52:16 (UTC)
Goto Top
Ich denke zwar das könnte man per skript lösen - aber: warum willst du das? Das ist ja eigentlich genau das was man mit dem Cluster umgehen will -> wenn ein Server nicht da ist nimm dir dessen Ressourcen und starte den Service wieder....
Member: falscher-sperrstatus
falscher-sperrstatus Oct 08, 2017 at 17:19:49 (UTC)
Goto Top
Kann maretz in diesem Fall nur zustimmen, ein Cluster ist für nichts anderes da. Was du hier (anscheinend) machen willst ist der Tod jeglicher Serviceerreichbarkeit?

VG
Member: it-fraggle
it-fraggle Oct 08, 2017 at 17:24:27 (UTC)
Goto Top
Der Problem ist aber, dass ein Node seine Resourcen starten wird, weil seine Heartbeat-NIC kaputt ist und das Cluster nicht erreicht. Nun startet es ebenfalls die Resourcen und schon haben wir einen IP-Crash. Ich möchte ja nur verhindern, dass zwei Nodes den Dienst gleichzeitig ausführen.
Member: falscher-sperrstatus
falscher-sperrstatus Oct 08, 2017 at 17:46:39 (UTC)
Goto Top
Hallo IT-Fraggle, das ist ein anderer Ansatz, aber wenn solltest du es eher so schalten, dass die Heartbeat NIC überprüft wird.

VG
Member: maretz
maretz Oct 08, 2017 at 17:49:31 (UTC)
Goto Top
Moin,

ganz ehrlich - du weisst aber schon was du tust, ja? Weil:
a) das Problem hättest du ja in dem Moment wo ein Server deines Verbundes runtergeht -> wenn du das nicht willst dann packe die Dienste nicht in den Cluster-Betrieb und gut...

b) Du willst auch nicht die Heartbeat-NIC über dasselbe Netz wie die normale Verbindung laufen lassen und machst aber dem Cluster beides bekannt... Genau aus dem Grund (nennt sich dann Split-Brain) - falls eine Verbindung defekt ist (switch fällt aus) soll der nicht einfach was machen.

Alternative Lösung wäre "Shot the other node in the Head" - STONITH. Du besorgst dir schaltbare Steckdosen (z.B. IP-Dosen) oder gehst über IPMI, iLO,... -> und der aktive Server fährt im zweifel einfach den anderen Server hart runter. ABER: Vorsicht hierbei mit den Resourcen, sonst hast du eher den Wild-West-Actionfilm so schnell wie die sich wegballern...

Und wie immer gilt: Jede Konfig kann richtig sein wenn die Anforderungen passen... Es wäre also durchaus möglich das es richtig ist wenn du sagst das einige Dienste bei dir eben ausserhalb des Clusters laufen (genauso wie ich einige Konfigs kenne bei denen Dienste die nicht mal nen Cluster bräuchten trotzdem rein müssen und gehören!). Dann kannst du dir natürlich sicher sein - fällt der entsprechende Server aus ist der Dienst eben auch weg... Du kannst ja die Konfig auf nem Netzwerk-Dateisystem packen und schon wäre die trotzdem nicht weg so das du den Service dann manuell woanders starten kannst. DAS ist aber normal nicht Sinn und Zweck des Clusters...
Member: broecker
broecker Oct 08, 2017 at 18:01:36 (UTC)
Goto Top
ich find's berechtigt,
das Stichwort ist "Fencing" bei Clustern und - wie schon geschrieben wurde, als Software: STONITH;
hier wird zunächst nach dem Ping der anderen zwei Knoten ein init 0 schon reichen, generell sollte man m.E. wechselseitig von den anderen Servern über die RSA oder iLO oder DRAC - nach Hersteller - ein Abschalten machen.
Das Anschalten durch den Admin geht dann über die gleichen Karten wieder.
HG
Mark
Member: it-fraggle
it-fraggle Oct 08, 2017 updated at 18:47:23 (UTC)
Goto Top
Erst mal danke für die Antworten.

Zum Verständnis: Es geht um einen einfachen Mailserver, der möglichst nicht ausfallen soll. Dazu habe ich einen Sync mit DRBD für die Mailboxen zwischen den Servern. Dass das Cluster umschaltet, wenn der aktive Node wegfällt ist kein Problem. Wenn aber ein Node, der gerade die Resourcen _nicht_ ausführt plötzlich alleine ist weil bspw. seine Heartbeat-NIC (eth0) defekt ist oder Switch kaputt oder oder oder, dann startet er seine Resourcen ebenfalls (DRBD0 primary, Postfix starten etc.) und gibt sich dann auch die Cluster-IP (eth1) und schon habe ich einen herrlichen Crash. Ich möchte einfach nur erreichen, dass der Node, der die anderen Nodes nicht mehr erreichen kann _keine_ Resourcen mehr startet. 1 von 3 ist keine Mehrheit und darum soll er nicht starten.

@broecker
Dein Vorschlag mit dem Ping mit nachfolgendem init 0 wäre meine Alternative. Auf ein einfaches Skript will ich aber nur im Notfall zurückgreifen.
Member: Penny.Cilin
Penny.Cilin Oct 09, 2017 at 09:01:55 (UTC)
Goto Top
Guten Morgen,

icch gehe davon aus, daß Dein Cluster jeweils 2 Netzwerkkarten pro Knoten hat. Einmal für den Heartbeat und einmal für das Public Netz. Warum setzt Du als Backup nicht die zweite Netzwerkkarte (Public Netz) ein. D.h. im normalen Betrieb wird die dedizierte NIC für den Heartbeat verwendet und falls diese ausfallen sollte, die Public NIC.

Dadurch erreichst Du die Verfügbarkeit des Heartbeats. Stichwort dazu: Priorisierung des Netzwerkverkehrs.

Nur mal als Denkanstoß.

Gruss Penny
Member: it-fraggle
it-fraggle Oct 09, 2017 at 18:56:44 (UTC)
Goto Top
Das sieht auf den ersten Blick super aus, aber was ist, wenn die Public NIC tot ist? Der Heartbeat funktioniert, das Cluster schaltet deshalb _nicht_ um und der Service ist in der Folge nicht erreichbar.
Member: maretz
maretz Oct 09, 2017 at 19:37:02 (UTC)
Goto Top
Ok - aber was möchtest du denn? Soll dein Cluster Gedanken lesen?

Also - normal prüfst du beides -> ob der Service reagiert UND ob der Heartbeat da ist.
Natürlich gibt es Möglichkeiten das ein Cluster versagt - gar keine Frage. Aber für gewöhnlich ist die Erreichbarkeit besser (wenn richtig eingerichtet). Denn: Was hast du ohne Cluster wenn die Netzwerkkarte oder der ganze Server tot ist -> dann ist der Dienst auch weg. Ein Cluster hat für den Fall eben die STONITH-Funktion -> notfalls schiesse den unbekannten Knoten in den Kopf so das der auf jeden Fall weg ist (z.B. iLO Power-Off command). DANN kannst du sicher die Dienste übernehmen.

Natürlich kann das schief gehen - das hab ich sogar schon live gesehen, sieht ganz lustig aus wenn sich die Server gegenseitig immer runterschiessen.... Aber: DAS ist eben die Konfiguration, deshalb macht man das auch nicht ohne Erfahrung am Live-System. Denn an anderen Stellen sind die Probleme viel lustiger -> wenn du eben auf mal 2 Server hast die sich für den Master halten und deine Notabschaltung nicht läuft. Dürfte aber bei dir nicht schlimm sein da - so ich das richtig verstehe - eh nur 1 Server das richtige Dateisystem haben kann.
Member: Penny.Cilin
Penny.Cilin Oct 10, 2017 at 09:25:25 (UTC)
Goto Top
Zitat von @it-fraggle:

Das sieht auf den ersten Blick super aus, aber was ist, wenn die Public NIC tot ist? Der Heartbeat funktioniert, das Cluster schaltet deshalb _nicht_ um und der Service ist in der Folge nicht erreichbar.

Moment, was denn nun? Erst fragst Du nach, bezüglich Ausfall der Haertbeat-NIC und jetzt nach dem Ausfall der Public-NIC. - Also nochmal, was denn nun?

Wenn die Heartbeat-NIC ausfällt, dann hast Du die Erreichbarkeit immer noch über die Public-NIC, insofern Du es konfigurierst.

Wenn der Heartbeat über die Heartbeat-NIC funktioniert, ist doch alles in Ordnung. Bei Ausfall der Public NIC ist halt der Zugriff auf die Ressourcen nicht möglich. Das Cluster ist aber weiterhin Online.

Und eine 100%ige Ausfallsicherheit wird es NIEMALS geben, weil die Kosten dafür exorbitant hoch sind und es nicht bezahlbar ist.
Lese Dich hier zu dem Thema Verfügbarkeit ein.

Gruss Penny