web-dev-qa-db-fra.com

Afficher l'état actuel de Keepalived

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é

6
Ben

Lecture du statut actuel via SNMP a prouvé le plus fiable pour moi. Pour activer cela, vous devez commencer à suivre le support SNMP:

  • add -x aux options de Damon (voir/etc/sysconfig/conserve sur les systèmes à base de redhat)

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é.

6
Erwin Vrolijk

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
4
eeijlar

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>.

2
Sebastian Schrader

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.

2
SergA