Existe-t-il un moyen d'afficher l'état actuel (maître/sauvegarde) à l'aide d'une ligne de commande dans une instance de serveur?
À votre santé
Lecture du statut actuel via SNMP a prouvé le plus fiable pour moi. Pour activer cela, vous devez commencer à suivre le support SNMP:
et installer SNMPD.
Vous pouvez ensuite interroger de manière fiable le statut via
snmpget -Oq -Ov -v2c -cpublic localhost KEEPALIVED-MIB::vrrpInstanceState.1
Il peut également être fait à travers les scripts de notification, mais ceux-ci ne tirent pas toujours, laissant le fichier d'état à l'écart de la synchronisation avec la réalité.
Si vous publiez la commande:
journalctl -u keepalived
il a l'état énuméré:
Jul 12 13:45:52 vmt007 Keepalived_vrrp[14335]: VRRP_Instance(VI_INT) Entering MASTER STATE
sur le côté esclave, vous pouvez voir:
Jul 12 13:45:51 vmt008 Keepalived_vrrp[3569]: VRRP_Instance(VI_INT) Entering BACKUP STATE
Avec la version 1.3.0, maintenue a ajouté une interface DBU, pouvant être activée avec l'option enable_dbus
dans le bloc global_defs
Block du fichier de configuration (toutefois, l'interface doit être activée avec le --enable-dbus
Option de construction pendant configure
, ce qui pourrait ne pas être le cas, si vous utilisez un package binaire.).
Vous pouvez accéder à l'interface DBU avec n'importe quel client/bibliothèque de DBU (E.G. dbus-send
, gdbus
, qdbus
). J'utilise SystemD's busctl
comme exemple ici, car il a une très belle interface:
# busctl tree org.keepalived.Vrrp1
└─/org
└─/org/keepalived
└─/org/keepalived/Vrrp1
├─/org/keepalived/Vrrp1/Instance
│ └─/org/keepalived/Vrrp1/Instance/eth0
│ └─/org/keepalived/Vrrp1/Instance/eth0/1
│ └─/org/keepalived/Vrrp1/Instance/eth0/1/IPv4
└─/org/keepalived/Vrrp1/Vrrp
Deux interfaces sont disponibles, le global org.keepalived.Vrrp1.Vrrp
sur /org/keepalived/Vrrp1/Vrrp
:
# busctl introspect org.keepalived.Vrrp1 /org/keepalived/Vrrp1/Vrrp org.keepalived.Vrrp1.Vrrp
NAME TYPE SIGNATURE RESULT/VALUE FLAGS
.CreateInstance method ssuu - -
.DestroyInstance method s - -
.PrintData method - - -
.PrintStats method - - -
.ReloadConfig method - - -
.VrrpReloaded signal - - -
.VrrpStarted signal - - -
.VrrpStopped signal - - -
Et foreach intestation VRRP, l'interface org.keepalived.Vrrp1.Instance
sur les chemins en fonction de ce modèle /org/keepalived/Vrrp1/Instance/<interface>/<virtual-router-id>/<ip-family> org.keepalived.Vrrp1.Instance
. Pour une instance VRRP IPv4 avec ID 1
sur eth1
nommé my-instance
, nous obtenons les éléments suivants:
# busctl introspect org.keepalived.Vrrp1 /org/keepalived/Vrrp1/Instance/eth0/1/IPv4 org.keepalived.Vrrp1.Instance
NAME TYPE SIGNATURE RESULT/VALUE FLAGS
.SendGarp method - - -
.Name property s "my-instance" emits-change
.State property (us) 2 "Master" emits-change
.VrrpStatusChange signal u - -
Pour obtenir l'état de cet exemple particulier, nous pouvons utiliser la commande suivante
# busctl get-property org.keepalived.Vrrp1 /org/keepalived/Vrrp1/Instance/br_vrrp/67/IPv4 org.keepalived.Vrrp1.Instance State
(us) 2 "Master"
La propriété renvoyée est une structure, avec code d'état et le nom lisible humain. Les états sont 0 "Init"
, 1 "Backup"
, _ 2 "Master"
, 3 "Fault"
, 4 "Goto master"
et 98 "Goto fault"
_ . Les trois derniers États sont des États internes et officiels 2338.
Si vous utilisez plusieurs processus conservent et définissez l'option instance
ou si vous utilisez la fonction d'espace de noms de réseau avec l'option namespace
, le préfixe du chemin change /org/keepalived/Vrrp1/<namespace>/<interface>
.
Dumping Etat actuel peut être effectué en envoyant USR2
Signal à Keepalived Processus parent:
kill -USR2 `cat /var/run/keepalived.pid`
Voir résultat en /tmp/keepalived.stats
.
Remarque: Si SELINUX est utilisé (CENTOS 7), il ne permet pas d'écrire à cette déposer. Vous pouvez contourner cela avec cette préparation:
touch /tmp/keepalived.stats
chmod go+w /tmp/keepalived.stats
semanage fcontext -a -t keepalived_var_run_t /tmp/keepalived.stats
restorecon /tmp/keepalived.stats
Maintenant, essayez d'envoyer à nouveau le signal.