Ich hatte genau das gleiche Problem, aber mein Problem lag weder in der Firewall noch in meinem Ethernet-Adapter, sondern in den "Gewichts" -Einstellungen des Überprüfungsskripts.
Dies war meine Konfiguration:
MEISTER:
vrrp_instance haproxy {
state MASTER
interface eth0
virtual_router_id 51
priority 150
advert_int 1
SICHERUNG:
vrrp_instance haproxy {
state BACKUP
interface eth0
virtual_router_id 51
priority 100
advert_int 1
Check_script:
vrrp_script chk_haproxy {
script "python /root/ha_check.py"
interval 2 # check every 2 seconds
weight 2
rise 2
fall 2
}}
Der Grund, warum der Master sich weigerte, den VIP freizugeben, war, dass der Master trotz der Tatsache, dass das Skript fehlgeschlagen war, immer noch eine höhere Prioritätsnummer vom BACKUP-Server hatte. Dies geschah, weil die Einstellung "weight" in check_script nicht ausreichte, um die "Lücke" zwischen der Prioritätsnummer abzudecken, was bedeutet, dass die Prioritätsnummer des BACKUP-Servers höher als die von MASTER Server ist. Ich werde weiter erklären:
Gemäß dem Handbuch von keepalived fügt eine positive Zahl in der Einstellung "Gewicht" diese Zahl der Priorität hinzu, wenn die Prüfung erfolgreich ist.
Eine negative Zahl subtrahiert diese Zahl von der Prioritätsnummer, wenn die Prüfung fehlschlägt.
Also, entsprechend meiner Konfiguration:
Serverprioritäten Vorheriger Fehler des Skripts:
MASTER: 152
BACKUP: 100
Failover_IP: MASTER
Die Failover-IP wird vom Master-Server korrekt "erfasst", da der Master im Vergleich zum Backup-Server eine höhere Priorität hat (152> 100).
Serverprioritäten NACH Ausfall des Skripts:
MASTER-Server: 148
BACKUP-Server: 102
Failover_IP: STILL ON MASTER
Die Failover-IP befindet sich immer noch auf dem Master-Server, da der Master im Vergleich zu BACKUP (148> 102) erneut eine höhere Priorität hat. Der MASTER-Server weigerte sich, die IP freizugeben, und richtig, da seine Priorität höher war als die des anderen Servers.
Die Lösung für meine Situation war:
Lösung -1: Ändern Sie die Prioritätsnummer beider Server, damit sie nicht viel "GAP" haben.
Zum Beispiel:
Master-Priorität: 150
Sicherungspriorität: 149
Check_script-Gewicht: Wie es ist (2).
Wenn das Skript mit der obigen Konfiguration erfolgreich ist (was bedeutet, dass alles in
Ordnung ist), lauten die Prioritäten:
Master: 152
Backup: 149
IP_Location: On Master (152> 149)
Wenn das Skript fehlschlägt:
Master: 150
Backup: 151
IP_Location: On Backup (151> 150)
Lösung - 2: Ändern Sie die Gewichtsnummer des Skripts von 2 auf -60