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