Saltar al contenido

Ver el estado actual de Keepalived

El paso a paso o código que verás en este artículo es la resolución más sencilla y válida que encontramos a esta inquietud o problema.

Solución:

Solución 1:

Puede usar el comando de notificación para escribir un archivo de estado.

       # for ANY state transition.
       # "notify" script is called AFTER the
       # notify_* script(s) and is executed
       # with 3 arguments provided by keepalived
       # (ie don’t include parameters in the notify line).
       # arguments
       # $1 = "GROUP"|"INSTANCE"
       # $2 = name of group or instance
       # $3 = target state of transition
       #     ("MASTER"|"BACKUP"|"FAULT")
       notify /path/notify.sh

Crear un script de notificación como:

#!/bin/bash
# notify.sh

echo $1 $2 is in $3 state > /var/run/keepalive.$1.$2.state

Y un script get state como:

#!/bin/bash
# getstate.sh

cat /var/run/keepalive.*.*.state

Solucion 2:

Leer el estado actual a través de SNMP ha demostrado ser lo más confiable para mí. Para habilitar esto, debe iniciar keepalived con el soporte de snmp:

  • agregue -x a las opciones de Deamon (consulte / etc / sysconfig / keepalived en sistemas basados ​​en RedHat)

e instale snmpd.

A continuación, puede consultar el estado de forma fiable a través de

snmpget -Oq -Ov -v2c -cpublic localhost KEEPALIVED-MIB::vrrpInstanceState.1

También se puede hacer a través de los scripts de notificación, pero estos no siempre se activan, dejando el archivo de estado desincronizado con la realidad.


Solución 3:

Si emite el comando:

journalctl -u keepalived

tiene el estado listado:

Jul 12 13:45:52 vmt007 Keepalived_vrrp[14335]: VRRP_Instance(VI_INT) Entering MASTER STATE

en el lado del esclavo puedes ver:

Jul 12 13:45:51 vmt008 Keepalived_vrrp[3569]: VRRP_Instance(VI_INT) Entering BACKUP STATE

Solución 4:

El volcado del estado actual se puede hacer enviando USR2 señal a mantener vivo proceso padre:

kill -USR2 `cat /var/run/keepalived.pid`

Ver resultado en /tmp/keepalived.stats.

Nota: si SELinux se usaCentOS 7), no permite escribir en este archivo. Puede solucionar esto con esta preparación:

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

Ahora intente enviar la señal nuevamente.


Solución 5:

Con la versión 1.3.0, keepalived agregó una interfaz DBus, que se puede habilitar con el enable_dbus opción en el global_defs bloque del archivo de configuración (Sin embargo, la interfaz debe estar habilitada con el --enable-dbus opción de construcción durante configure, que podría no ser el caso, si está utilizando un paquete binario).

Puede acceder a la interfaz DBus con cualquier cliente / biblioteca DBus (p. Ej. dbus-send, gdbus, qdbus). Estoy usando systemd’s busctl como ejemplo aquí, porque tiene una interfaz muy agradable:

# 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

Hay dos interfaces disponibles, la global org.keepalived.Vrrp1.Vrrp sobre /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    -         -            -

Y para cada instancia de VRRP, el org.keepalived.Vrrp1.Instance interfaz en rutas de acuerdo con esta plantilla /org/keepalived/Vrrp1/Instance/// org.keepalived.Vrrp1.Instance. Para una instancia de IPv4 VRRP con id 1 sobre eth1 llamado my-instance, obtenemos lo siguiente:

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

Para obtener el estado de esta instancia en particular, podemos usar el siguiente comando

# busctl get-property org.keepalived.Vrrp1 /org/keepalived/Vrrp1/Instance/br_vrrp/67/IPv4  org.keepalived.Vrrp1.Instance State
(us) 2 "Master"

La propiedad devuelta es un STRUCT, con el código de estado y el nombre legible por humanos. Los estados son 0 "Init", 1 "Backup", 2 "Master", 3 "Fault", 4 "Goto master" y 98 "Goto fault". Los últimos tres estados son estados RFC 2338 internos y oficiales.

Si está utilizando varios procesos keepalived y establece el instance opción o si está utilizando la función de espacio de nombres de red con la namespace opción, el camino prefix cambios /org/keepalived/Vrrp1//.

valoraciones y comentarios

Recuerda que puedes comunicar esta crónica si lograste el éxito.

¡Haz clic para puntuar esta entrada!
(Votos: 2 Promedio: 5)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *