J'ai eu exactement le même problème mais mon problème n'était pas dans le pare-feu ni dans mon adaptateur Ethernet mais dans les paramètres de "poids" du script de vérification.
C'était ma configuration:
MAÎTRE:
vrrp_instance haproxy {
state MASTER
interface eth0
virtual_router_id 51
priority 150
advert_int 1
SAUVEGARDE:
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
}
La raison pour laquelle le maître refusait de libérer le VIP était que malgré le fait que le script ait échoué, le maître avait toujours un numéro de priorité plus élevé du serveur BACKUP. Cela s'est produit parce que le paramètre "weight" sur check_script n'était pas suffisant pour couvrir le "GAP" entre le numéro de priorité, ce qui signifie augmenter le numéro de priorité du serveur BACKUP supérieur à celui de MASTER Server. J'expliquerai plus loin:
Selon le manuel de keepalived, un nombre positif sur le paramètre "poids" ajoutera ce nombre à la priorité si le contrôle réussit.
Un nombre négatif soustrait ce nombre du numéro de priorité si la vérification échoue.
Donc, selon ma configuration:
Priorités du serveur Échec préalable du script:
MASTER: 152
BACKUP: 100
Failover_IP: MASTER
L'IP de basculement est correctement «saisie» par le serveur maître car le maître a une priorité plus élevée que le serveur de sauvegarde (152> 100)
Priorités du serveur APRÈS l'échec du script:
serveur MASTER: 148
serveur BACKUP: 102
Failover_IP: STILL ON MASTER
L'IP de basculement est toujours sur le serveur maître car Master a encore une priorité plus élevée que BACKUP (148> 102). Le serveur MASTER refusait de libérer l'adresse IP et il l'a fait car sa priorité était plus élevée que l'autre serveur.
La solution à ma situation était:
Solution -1: Modifiez le numéro de priorité des deux serveurs afin qu'ils n'aient pas beaucoup de "GAP".
Par exemple:
Master Priority: 150
Priority Priority: 149
Check_script weight: Tel quel (2).
Avec la configuration ci-dessus, lorsque le script réussit (ce qui signifie que tout va bien), les priorités sont les suivantes:
Maître: 152
Sauvegarde: 149
IP_Location: Sur maître (152> 149)
Lorsque le script échoue:
Maître: 150
Sauvegarde: 151
IP_Location: En sauvegarde (151> 150)
Solution - 2: changez le numéro de poids du script de 2 à -60