Ich betreibe einen 2-Knoten-Cluster mit DRBD (aktiv/passiv), der vom drbd-systemd-Dienst verwaltet wird, und ein kleines Skript, das Volumes bereitstellt, wenn eine Ressource primär wird.
Ich möchte das DRBD so konfigurieren, dass es jedes Split Brain immer auflöst und immer mindestens einen Knoten hat, der primär ist und in jedem Fall dienen kann, solange nicht beide Maschinen ausgefallen sind.
Ich habe folgende Konfiguration ausprobiert (wo pri-lost-after-sb
ist "reboot"
)
after-sb-0pri discard-younger-primary;
after-sb-1pri discard-secondary;
after-sb-2pri call-pri-lost-after-sb;
und on-suspended-primary-outdated force-secondary
einige andere Kombinationen.
Aber ich stoße immer wieder auf ein Szenario, in dem der Cluster in einen schlechten Zustand gerät und sich nicht von einem Split Brain erholt. Normalerweise gelange ich StandAlone
zu den Knoten und force-io-failures
zum Sekundärknoten (so dass dieser Sekundärknoten nach einem weiteren Ausfall des Primärknotens nicht mehr funktioniert, selbst wenn er verbunden ist).
Kann ich sonst noch etwas tun, um die Robustheit dieses Setups zu verbessern, wenn man bedenkt, dass für mich die Dienstverfügbarkeit höchste Priorität hat und nicht die Vermeidung von Datenverlust?
Antwort1
Damals habe ich mehrmals versucht, einen ähnlichen Cluster einzurichten. Das war, bis ich begriff, dass DRBD von Natur aus kaputt ist und seinen zweiten Namen „Split Brain“ hat. In DRBD9 wurde es etwas besser (nur im Vergleich zu 8.xx, das ein Albtraum war), aber es kann immer noch nicht in der Produktion verwendet werden. Ich sehe nur eine Lösung: Sparen Sie Zeit und migrieren Sie zu etwas Zuverlässigerem. Zum Beispiel Ceph.