fix(ui): Cluster-Karte zeigte auf dem Standby beide Knoten als DB-Primary
Auf utm-2 trug die Cluster-Karte an BEIDEN Knoten "DB-Primary" — auf utm-1 dagegen korrekt "primary" und "peer". Es kann aber nur einen DB-Primary geben, also war mindestens eine der beiden Ansichten falsch. Ursache: ha_nodes ist NICHT repliziert (node-lokale Tabelle, jeder Knoten fuehrt seine eigene Sicht), und in `role` traegt sich jeder Knoten selbst ein. Ein per Join dazugekommener Knoten behaelt dort den Default "primary" — utm-2 behauptete in seiner eigenen Ansicht also, es sei Primary. Der Code weiss das an anderer Stelle bereits: cluster_repair.go dokumentiert "role/pg_role sind je Node lokal und unzuverlaessig", und keepalived.go gibt pg_role deshalb seit v1.2.46 absoluten Vorrang vor role. Die Karte zeigt jetzt pg_role statt role. Das folgt der tatsaechlichen Replikationsrolle und stimmt auf beiden Seiten ueberein (utm-1=primary, utm-2=standby). 'standalone'/leer heisst "keine Replikation eingerichtet" und zeigt bewusst gar keine Rolle, statt eine zu erfinden. Die stale role='primary'-Zeile auf utm-2 wurde separat direkt in der node-lokalen DB korrigiert. Sie war nicht nur kosmetisch: faellt pg_role irgendwann aus (leer/'standalone'), greift in keepalived.go der role-Fallback — und genau diese Konstellation hat 2026-05 schon einmal einen Split-Brain ausgeloest (beide Knoten Prio 200, hoehere IP gewinnt). Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
@@ -424,8 +424,9 @@
|
||||
"split-brain": "split-brain"
|
||||
},
|
||||
"roleDbPrimary": "DB primary",
|
||||
"rolePeer": "Peer",
|
||||
"roleHint": "Database/cluster role: decides where writes go. It does NOT follow the VIP — a node can be DB primary while currently being keepalived BACKUP (see the VIP/VRRP card). It only changes via \"edgeguard-ctl promote\"."
|
||||
"roleHint": "Database role from replication: the DB primary accepts writes, the DB standby replicates from it. It does NOT follow the VIP — a node can be DB primary while currently being keepalived BACKUP (see the VIP/VRRP card). It only changes via \"edgeguard-ctl promote\".",
|
||||
"roleDbStandby": "DB standby",
|
||||
"roleDbUnknown": "—"
|
||||
},
|
||||
"routingCard": {
|
||||
"title": "Routing",
|
||||
|
||||
Reference in New Issue
Block a user