Preempt-Rückkehr (preempt_delay 120) wieder aktiv: der bevorzugte Node (PG-Primary, Prio 200) holt die VIP nach Erholung zurück. Der Incident 2026-08-03 (halb-kaputter Node riss die VIP an sich) wird verhindert, weil keepalived-check.sh jetzt zusätzlich fordert: - haproxy-Prozess aktiv - :443 gebunden (bedient wirklich Traffic) Ein nicht-bedienender Node geht damit in FAULT und kann NICHT (mehr) preempten. Außerdem: CrowdSec-Management-Whitelist (Backend api_backend) fest ins postinst gebacken (Admin-SPA-Traffic wird nie mehr als http-crawl gebannt, IP-unabhängig, Incident-Root-Fix) + Altlast netcell-mgmt-whitelist.yaml wird aufgeräumt. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
86 lines
2.7 KiB
Smarty
86 lines
2.7 KiB
Smarty
global_defs {
|
|
router_id {{ .RouterID }}
|
|
script_user root
|
|
enable_script_security
|
|
# GARP: beim Master-Wechsel Gratuitous-ARP forciert senden (repeat) UND
|
|
# periodisch auffrischen (master_refresh) — sonst lässt der Upstream-Switch
|
|
# die VIP-MAC altern und die Failover-IP wird nach Minuten unerreichbar.
|
|
# Ergänzt durch den Priming-Ping in keepalived-master.sh (Traffic AUS der VIP).
|
|
# (vrrp_garp_interval/gna NICHT setzen: keepalived 2.3.x lehnt 0 ab, Default passt.)
|
|
vrrp_garp_master_repeat 5
|
|
vrrp_garp_master_refresh 60
|
|
}
|
|
|
|
{{/* KEIN weight: in einer vrrp_sync_group ignoriert keepalived gewichtete
|
|
Track-Scripts ("ignoring tracked script ... with weights due to SYNC
|
|
group") → die Health-Checks wären wirkungslos. Ohne weight wirken sie
|
|
als binäre FAULT-Trigger: schlägt ein Check fall-mal in Folge fehl,
|
|
geht die Instanz (und via Sync-Group der ganze Node) in FAULT → der
|
|
gesunde Peer übernimmt. Für einen 2-Node-Cluster die saubere Semantik. */}}
|
|
vrrp_script chk_edgeguard {
|
|
script "/usr/lib/edgeguard/keepalived-check.sh"
|
|
interval 2
|
|
fall 8
|
|
rise 2
|
|
}
|
|
{{ if .GWCheckIP }}
|
|
vrrp_script chk_gateway {
|
|
script "/usr/lib/edgeguard/keepalived-gw-check.sh {{ .GWCheckIP }}"
|
|
interval 5
|
|
fall 5
|
|
rise 2
|
|
}
|
|
{{ end }}
|
|
{{ if .HBInterface }}
|
|
vrrp_sync_group VG_1 {
|
|
group {
|
|
VI_1
|
|
VI_HB
|
|
}
|
|
}
|
|
{{ end }}
|
|
vrrp_instance VI_1 {
|
|
state {{ .State }}
|
|
interface {{ .Interface }}
|
|
virtual_router_id {{ .RouterID }}
|
|
priority {{ .Priority }}
|
|
advert_int 2
|
|
{{ if .PreemptDelay }}preempt_delay {{ .PreemptDelay }}{{ else }}nopreempt{{ end }}
|
|
{{ if .SrcIP }} unicast_src_ip {{ .SrcIP }}
|
|
unicast_peer {
|
|
{{ .PeerIP }}
|
|
}
|
|
{{ end }} authentication {
|
|
auth_type PASS
|
|
auth_pass {{ .AuthPass }}
|
|
}
|
|
virtual_ipaddress {
|
|
{{ range .VIPs }} {{ .Address }}/{{ .Prefix }} dev {{ .Device }}
|
|
{{ end }} }
|
|
track_script {
|
|
chk_edgeguard
|
|
{{ if .GWCheckIP }} chk_gateway
|
|
{{ end }} }
|
|
notify_master "/usr/lib/edgeguard/keepalived-master.sh"
|
|
notify_backup "/usr/lib/edgeguard/keepalived-backup.sh"
|
|
notify_fault "/usr/lib/edgeguard/keepalived-backup.sh"
|
|
}
|
|
{{ if .HBInterface }}
|
|
vrrp_instance VI_HB {
|
|
state {{ .State }}
|
|
interface {{ .HBInterface }}
|
|
virtual_router_id {{ .HBRouterID }}
|
|
priority {{ .Priority }}
|
|
advert_int 2
|
|
{{ if .PreemptDelay }}preempt_delay {{ .PreemptDelay }}{{ else }}nopreempt{{ end }}
|
|
{{ if .HBSrcIP }} unicast_src_ip {{ .HBSrcIP }}
|
|
unicast_peer {
|
|
{{ .HBPeerIP }}
|
|
}
|
|
{{ end }} authentication {
|
|
auth_type PASS
|
|
auth_pass {{ .AuthPass }}
|
|
}
|
|
}
|
|
{{ end }}
|