Ver estado atual do keepalived

5

Existe uma maneira de visualizar o estado atual (mestre / backup) usando uma linha de comando dentro de uma instância do servidor?

Felicidades

    
por Ben 08.12.2013 / 22:20

4 respostas

6

Você pode usar o comando notify para escrever um arquivo 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

A criação de um script de notificação como:

#!/bin/bash
# notify.sh

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

E um script de estado get como:

#!/bin/bash
# getstate.sh

cat /var/run/keepalive.*.*.state
    
por 09.12.2013 / 01:04
6

A leitura do status atual por meio do SNMP provou ser a mais confiável para mim. Para habilitar isso, você deve iniciar o keepalive com o suporte snmp:

  • adicione -x às opções do deamon (consulte / etc / sysconfig / keepalived em sistemas baseados em RedHat)

e instale o snmpd.

Você pode consultar o status de maneira confiável por meio de

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

Isso também pode ser feito através dos scripts de notificação, mas eles nem sempre são disparados, deixando o arquivo de estado fora de sincronia com a realidade.

    
por 25.02.2015 / 11:07
2

Se você emitir o comando:

journalctl -u keepalived

tem o estado listado:

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

no lado do escravo você pode ver:

Jul 12 13:45:51 vmt008 Keepalived_vrrp[3569]: VRRP_Instance(VI_INT) Entering BACKUP STATE
    
por 12.07.2018 / 15:01
1

Com a versão 1.3.0, o keepalived incluiu uma interface DBus, que pode ser ativada com a opção enable_dbus no bloco global_defs do arquivo de configuração (no entanto, a interface deve ser ativada com a opção --enable-dbus build durante configure , o que pode não ser o caso, se você estiver usando um pacote binário.).

Você pode acessar a interface do DBus com qualquer cliente / biblioteca do DBus (por exemplo, dbus-send , gdbus , qdbus ). Estou usando o busctl do systemd como exemplo aqui, porque ele tem uma interface muito boa:

# 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

Duas interfaces estão disponíveis, o global org.keepalived.Vrrp1.Vrrp on /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    -         -            -

E para a instância VRRP foreach, a interface org.keepalived.Vrrp1.Instance nos caminhos de acordo com este modelo /org/keepalived/Vrrp1/Instance/<interface>/<virtual-router-id>/<ip-family> org.keepalived.Vrrp1.Instance . Para uma instância do IPv4 VRRP com o ID 1 on eth1 denominado my-instance , obtemos o seguinte:

# 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 obter o estado dessa instância específica, podemos usar o seguinte comando

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

A propriedade retornada é um STRUCT, com o código de estado e o nome legível por humanos. Os estados são 0 "Init" , 1 "Backup" , 2 "Master" , 3 "Fault" , 4 "Goto master" e 98 "Goto fault" . Os últimos três estados são internos e oficiais RFC 2338 estados.

Se você estiver usando vários processos keepalived e definir a opção instance ou se você estiver usando o recurso de namespace de rede com a opção namespace , o prefixo do caminho será alterado em /org/keepalived/Vrrp1/<namespace>/<interface> .

    
por 02.09.2017 / 16:36