keepalived: 2-y. VRRP_Script ne commence jamais

J'essaie de mettre en œuvre keepalived sur les 3e cases mongodb, L'idée est que si mongod L'une des cases échoue ou nous devons déplacer le nœud principal vers un autre système, pour une raison quelconque, notre application n'a pas besoin d'être reconfigurée.

Keepalived.conf Assez simple, il y a 2 VRRP_scripts, un pour vérifier le travail mongod, Et l'autre est conçu pour exécuter le script bash, qui vérifie si une instance locale est mongod Le nœud principal.

keepalived.conf

!Configuration File for keepalived

# Global definitions
global_defs {
notification_email {
myemail@myserver.com
}
notification_email_from mongodbtest@myserver.com
smtp_server smtprelay.penton.com
smtp_connect_timeout 30
}

# Check to see if mongod is running
vrrp_script chk_mongod {
script "killall -0 mongod" # verify the pid exists
interval 2 # check every 2 seconds
# weight 2 # add 2 points if OK
}

# Check to see if this node is the primary
vrrp_script chk_mongod_primary {
script "/usr/local/bin/chk_mongo_primary.sh"
interval 2
# weight 2
}

# Virtual interface configuration
vrrp_instance VI_1 {
state MASTER
interface eth0 #interface to monitor
virtual_router_id 51
priority 101 # 101 on mater, 100 on backup

virtual_ipaddress {
192.168.122.99
}

track_script {
chk_mongod
chk_mongo_primary
}
}

Si j'éteins le service mongod Sur le nœud, l'adresse IP flottante ira à un autre champ, comme prévu, je verrai cette conclusion dans / var / log / messages

Jul 17 16:23:34 mongodbtest01 Keepalived_vrrp[30304]: VRRP_Script(chk_mongod) failed
Jul 17 16:23:35 mongodbtest01 Keepalived_vrrp[30304]: VRRP_Instance(VI_1) Entering FAULT STATE
Jul 17 16:23:35 mongodbtest01 Keepalived_vrrp[30304]: VRRP_Instance(VI_1) removing protocol VIPs.
Jul 17 16:23:35 mongodbtest01 Keepalived_vrrp[30304]: VRRP_Instance(VI_1) Now in FAULT state
Jul 17 16:23:35 mongodbtest01 Keepalived_healthcheckers[30303]: Netlink reflector reports IP 192.168.122.99 removed

Si je reviens mongod retour, IP retournera à cette case (Comme il a la priorité).

Jul 17 16:27:42 mongodbtest01 Keepalived_vrrp[30304]: VRRP_Script(chk_mongod) succeeded
Jul 17 16:27:43 mongodbtest01 Keepalived_vrrp[30304]: VRRP_Instance(VI_1) prio is higher than received advert
Jul 17 16:27:43 mongodbtest01 Keepalived_vrrp[30304]: VRRP_Instance(VI_1) Transition to MASTER STATE
Jul 17 16:27:44 mongodbtest01 Keepalived_vrrp[30304]: VRRP_Instance(VI_1) Entering MASTER STATE
Jul 17 16:27:44 mongodbtest01 Keepalived_vrrp[30304]: VRRP_Instance(VI_1) setting protocol VIPs.
Jul 17 16:27:44 mongodbtest01 Keepalived_vrrp[30304]: VRRP_Instance(VI_1) Sending gratuitous ARPs on eth0 for 192.168.122.99

faire attention à VRRP_Script (chk_mongod) Dans chaque sortie du magazine quand mongod Désactiver et retourne en arrière. Cependant, si j'écrase un ensemble de réplique de sorte que ce nœud ne soit plus le principal, je ne verrai jamais mon VRRP_Script Avec nom chk_mongod_primary Cela fonctionne avec succès ou ne fonctionne pas. J'ai testé le script de la ligne de commande et renvoie le résultat attendu à chaque fois, mais il semble qu'il ne soit jamais effectué en utilisant collectd.

C'est ce qui ressemble à /usr/local/bin/chk_mongo_primary.sh:

#!/bin/bash
# Check to see if this node is master
result=$(mongo --eval "printjson(db.isMaster().ismaster)" 2>&1)
m_status=`echo $result | cut -d' ' -f 8`

if [ "$m_status" == "true" ] ;
then
echo "I am primary"
exit 0
else
echo "I am secondary"
exit 1
fi

J'ai essayé différentes choses et j'ai regardé d'autres configurations keepalived, Pour comprendre si je peux découvrir où je fais une erreur, mais cela me perplexe.

Quelqu'un peut-il me dire où je me trompe?

Merci en avance.
Invité:

Emilie

Confirmation de:

Il est décidé, le problème était dans le nom gras du script de la section. track_script Déposer conf. Il a été décidé d'utiliser l'équipe. keepalived --dump-conf, qui a analysé le fichier de configuration et les résultats émis. J'ai consulté / var / log / messages Et découvert une erreur associée au manque de script de piste.

Pour répondre aux questions, connectez-vous ou registre