From 09e6e0c4f7ebf7854d7f0c6b0710c928e1838596 Mon Sep 17 00:00:00 2001 From: Debian Date: Fri, 31 Jul 2026 19:06:05 +0200 Subject: [PATCH] =?UTF-8?q?fix(keepalived):=20notify=5Fmaster=20ermittelt?= =?UTF-8?q?=20PG-Rolle=20=C3=BCber=20Publication=20statt=20Datei=20?= =?UTF-8?q?=E2=80=94=20v1.3.10?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit keepalived-master.sh loggte beim VIP-Übernehmen "PG-Rolle ist noch 'standby'", weil es /var/lib/edgeguard/pg_role las — die schreibt nur `promote`, ein via cluster-init-replication eingerichteter Primary hat sie nie → falsches Label. Jetzt zuverlässig über pg_publication (nur der Primary trägt edgeguard_shared, Konvention wie cluster_repair.go): Primary → "bereits PG-Primary (kein promote nötig)", sonst → "standby, edgeguard-ctl promote". Rein kosmetisch/Logging. Co-Authored-By: Claude Opus 4.8 --- VERSION | 2 +- packaging/scripts/keepalived-master.sh | 16 ++++++++++++++-- 2 files changed, 15 insertions(+), 3 deletions(-) diff --git a/VERSION b/VERSION index 2fe9589..7c2791e 100644 --- a/VERSION +++ b/VERSION @@ -1 +1 @@ -1.3.9 \ No newline at end of file +1.3.10 \ No newline at end of file diff --git a/packaging/scripts/keepalived-master.sh b/packaging/scripts/keepalived-master.sh index 282071c..0dc82d2 100644 --- a/packaging/scripts/keepalived-master.sh +++ b/packaging/scripts/keepalived-master.sh @@ -4,8 +4,20 @@ # KEIN Auto-Promote — Split-Brain-Schutz durch manuelle Promotion. # Admin muss "edgeguard-ctl promote" ausführen wenn PG-Failover gewünscht. -logger -t keepalived -p daemon.warning \ - "MASTER: VIP übernommen — PG-Rolle ist noch '$(cat /var/lib/edgeguard/pg_role 2>/dev/null || echo standby)'. Für PG-Failover: edgeguard-ctl promote" +# PG-Rolle ZUVERLÄSSIG über die Publication ermitteln — nicht über die evtl. +# veraltete/fehlende Datei /var/lib/edgeguard/pg_role (die schrieb nur `promote`; +# ein via cluster-init-replication eingerichteter Primary hat sie nie → Log sagte +# fälschlich "standby"). Nur der Primary trägt die Publication edgeguard_shared +# (Konvention, vgl. cluster_repair.go). Best-effort: bei psql-Fehler neutral. +if sudo -u postgres psql -d edgeguard -tAc \ + "SELECT EXISTS(SELECT 1 FROM pg_publication WHERE pubname='edgeguard_shared')" \ + 2>/dev/null | grep -q '^t$'; then + logger -t keepalived -p daemon.warning \ + "MASTER: VIP übernommen — dieser Node ist bereits PG-Primary (kein promote nötig)." +else + logger -t keepalived -p daemon.warning \ + "MASTER: VIP übernommen — PG-Rolle ist 'standby'. Für PG-Failover: edgeguard-ctl promote" +fi # ── Upstream-ARP/Routing für die Failover-VIP(s) aktualisieren ── # Manche Hoster lernen die neue MAC einer Failover-IP NICHT zuverlässig über