
Seit wir CentOS 7 verwenden, sind wir von einem normalen Heartbeat-Setup auf Pacemker umgestiegen.
Hauptsächlich haben wir IP-Ressourcen, die auf einem Knoten aktiv sind und bei einem Failover auf einen zweiten Knoten umschalten. Außerdem führen wir im Falle eines Failovers einige Skripte aus. Nichts Besonderes.
Damit Ressourcen immer auf dem primären Knoten gestartet werden, verwende ich
pcs constraint location Cluster_IP prefers server1=master-server
Ich benutze auch
pcs resource defaults resource-stickiness=INFINITY
um zu verhindern, dass Ressourcen nach einem Failover zurück verschoben werden.
Dies funktioniert bei mir einwandfrei, wenn der Master ausfällt (beispielsweise aufgrund eines Hardwarefehlers).
Da es für mich kein Problem ist, wenn das Failover eine Weile dauert, würde ich für den Fall eines kurzen Split Brain gerne eine Art Verzögerung implementieren.
Bevor etwas unternommen wird, sollte der Slave ca. 2 Minuten warten, bevor er übernimmt, falls der Master in diesen ca. 2 Minuten wieder erreichbar ist.
Ich habe mich gefragt, wie man das am besten macht.
Antwort1
token
Ich habe ein Token-Timeout in Corosync nie auf einen Wert über 10 Sekunden eingestellt, aber Sie könnten versuchen, den Wert in Ihrem corosync.conf
auf 120000
(120 Sekunden in Millisekunden) zu erhöhen/einzustellen . Weitere Einzelheiten token
finden Sie im totem{}
Abschnitt Ihres corosync.conf
; .man corosync.conf
Dies sollte verhindern, dass Corosync einen Knoten für 120 Sekunden für tot erklärt, wenn das Netzwerk ausfällt.
Antwort2
Sie können das Überwachungsintervall der Ressource mit ändern, op monitor interval=Ns
wobei N
die Anzahl der Sekunden ist, und dann migration-threshold
für die Ressource auf festlegen 2
. Beachten Sie, dass bei einer Einstellung von 120s
eine Gesamtverzögerung von 120–240 Sekunden auftreten kann, je nachdem, wann der erste Fehler im Überwachungsintervall auftritt.
Es gibt noch weitere Einschränkungen, da der Fehlerzähler migration-threshold
bei Erfolg nicht zurückgesetzt wird. Dazu müssten Sie ihn ebenfalls festlegen failure-timeout
oder manuell eingreifen.
Mit op monitor interval=120s
, migration-threshold=2
, failure-timeout=121s
und Ihrer resource-stickiness
Einstellung müssten Sie testen, ob dies die erwartete Funktionalität bietet und wie sich die Fehlerzähler verhalten, wenn der ursprüngliche Master wiederhergestellt wird. Es könnte ein manuelles Eingreifen erforderlich sein, aber da bin ich mir nicht 100 % sicher