feat(cluster): Replikations-Reconcile + Backend-Down nur auf VIP-Master — v1.3.7

- fix(scheduler): backend.down-Check läuft nur noch wenn dieser Node den VIP
  hält (nodeHoldsVIP). Ein keepalived-BACKUP-Node hat KEINE VLAN-IP → erreicht
  die Backend-Subnetze nicht → sah bisher ALLE Backends L4-down und feuerte
  Dauer-Fehlalarme (Hauptquelle des alert_events-Spams). Master sieht die
  echten States.
- feat(ctl): `cluster-reconcile-replication` — bringt Publication/Grants/
  Subscription idempotent in den Soll-Zustand (Publisher: fehlende Shared-
  Tables ADD, node-lokale DROP, GRANT SELECT für Replikator; Subscriber:
  neue Tabellen leeren + REFRESH). Läuft im postinst nach migrate.
- fix(packaging): postinst re-added network_interfaces/ip_addresses bei JEDEM
  Upgrade in die Publication (alter fester Block) → ersetzt durch den Reconcile.
  DAS war die Wiederkehr-Ursache.
- fix(replication): waf_alerts → localOnlyTables (Event-Daten, node-lokal wie
  alert_events).

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
Debian
2026-07-31 17:07:21 +02:00
parent 96290253c8
commit 8e4759ccc6
7 changed files with 333 additions and 19 deletions

View File

@@ -780,24 +780,20 @@ VIPCMD
exit 1
fi
# ALTER PUBLICATION erfordert den PG-Superuser (edgeguard ist nicht
# Owner der Publication). Idempotent — No-Op auf Secondary-Nodes
# (wo die Publication nicht existiert) und wenn die Tabellen schon
# drin sind.
sudo -u postgres psql edgeguard <<'EOSQL' 2>/dev/null || true
DO $$
BEGIN
IF EXISTS (SELECT 1 FROM pg_publication WHERE pubname = 'edgeguard_shared') THEN
IF NOT EXISTS (
SELECT 1 FROM pg_publication_tables
WHERE pubname = 'edgeguard_shared' AND tablename = 'network_interfaces'
) THEN
ALTER PUBLICATION edgeguard_shared ADD TABLE network_interfaces, ip_addresses;
END IF;
END IF;
END;
$$;
EOSQL
# ── Replikation reconcilen (Publication / Grants / Subscription) ──
# Ersetzt die frühere feste ADD-TABLE-Logik (die network_interfaces/
# ip_addresses bei JEDEM Upgrade fälschlich wieder in die Publication
# zog — beide sind node-lokal). edgeguard-ctl erkennt die Rolle selbst
# und bringt idempotent den Soll-Zustand:
# Publisher : fehlende Shared-Tables ADD, node-lokale (localOnlyTables)
# DROP, GRANT SELECT für den Replikations-User (deckt per
# Migration neu hinzugekommene Tabellen ab — sonst hängt
# deren tablesync in 'd').
# Subscriber: neue Tabellen leeren + REFRESH PUBLICATION.
# Standalone: No-Op.
# Läuft als root → buildPsqlCmd nutzt `sudo -u postgres psql` (Superuser).
# Best-effort: ein Reconcile-Fehler darf das Upgrade nie abbrechen.
/usr/bin/edgeguard-ctl cluster-reconcile-replication 2>&1 || true
# ── CrowdSec IDS installation ─────────────────────────────────────────
# Install CrowdSec if not present. We use the official CrowdSec APT repo.