Soru Mevcut Durumunu Görüntüle


Bir sunucu örneğinin içinde bir komut satırı kullanarak mevcut durumu (Master / Yedekleme) görüntülemenin bir yolu var mı?

Şerefe


5
2017-12-08 21:20


Menşei




Cevaplar:


Bir durum dosyası yazmak için bildir komutunu kullanabilirsiniz.

       # 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şağıdaki gibi bir bildirim komut dosyası oluşturun:

#!/bin/bash
# notify.sh

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

Ve bir get devlet senaryosu gibi:

#!/bin/bash
# getstate.sh

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

6
2017-12-09 00:04



Güzel çözüm! Peki ya durumu herhangi bir devlet geçişi olmadan kontrol etmek isteseydiniz? Yama kullanmadan mümkün mü? - Ben
İlk başlangıç ​​durumu mevcut duruma eşitse demek istiyorsun? Başlangıç ​​komut dosyanızın bir parçası olarak /var/run/keepalive.*.*.stat dosyasını yazabilirsiniz. - dmourati
Demek istediğim, şu anda çalışan bir kişi çalışıyorsa. Bir başlangıç ​​betiği olmadan mevcut çalışma durumunu nasıl belirleyebilirim? - Ben
Yukarıdaki deneyin, sanırım olduğu gibi çalışacaktır. - dmourati


Mevcut durumu SNMP üzerinden okumak benim için en güvenilirliği kanıtladı. Bunu etkinleştirmek için snmp desteğiyle devam etmelisiniz:

  • deamon seçeneklerine -x ekleyin (bkz. RedHat tabanlı sistemlerde / etc / sysconfig / keepalived)

ve snmpd'yi yükleyin.

Daha sonra durumu güvenli bir şekilde sorgulayabilirsiniz.

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

Ayrıca, bildirim betiklerinin bir araya getirilmesi de mümkündür, ancak bunlar her zaman tetiklenmez, devlet dosyasını gerçekle eşitlemeden çıkarır.


6
2018-02-25 10:07



Bu gönderiden itibaren, bu, yerel depolardan CentOS 7'de çalışmaz. Repodaki Yum 1.2.13'tür. Bu, derlemek istiyorsanız, sonraki sürümlerde çözüldü. - jnovack


Eğer komutu verirseniz:

journalctl -u keepalived

listelenen devlet var:

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

köle tarafında görebilirsiniz:

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

2
2017-07-12 13:01





1.3.0 sürümü ile, bekletilen bir DBus arabirimi ekledi; enable_dbus seçeneğinde global_defs config dosyasının bloğu (Ancak, arayüzün --enable-dbus sırasında seçenek oluştur configureİkili bir paket kullanıyorsanız, durum böyle olmayabilir.).

DBus arayüzüne herhangi bir DBus istemcisi / kütüphanesiyle (ör. dbus-send, gdbus, qdbus). Systemd kullanıyorum busctl Burada bir örnek olarak, çok güzel bir arayüze sahip olduğu için:

# 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

İki arayüz mevcut, küresel org.keepalived.Vrrp1.Vrrp üzerinde /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    -         -            -

Ve foreach VRRP örneği, org.keepalived.Vrrp1.Instance Bu şablona göre yollarda arayüz /org/keepalived/Vrrp1/Instance/<interface>/<virtual-router-id>/<ip-family> org.keepalived.Vrrp1.Instance. Kimliğine sahip bir IPv4 VRRP örneği için 1 üzerinde eth1 adlı my-instance, aşağıdakileri alırız:

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

Bu özel durumun durumunu almak için aşağıdaki komutu kullanabiliriz

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

Döndürülen özellik, eyalet kodu ve insan okunabilir adı ile bir STRUCT. Devletler 0 "Init", 1 "Backup", 2 "Master", 3 "Fault", 4 "Goto master" ve 98 "Goto fault". Son üç devlet, iç ve resmi RFC 2338 devletleridir.

Birden çok kalıcı süreç kullanıyorsanız ve instance seçeneğini veya ağ ad alanı özelliğini namespace seçenek, yol öneki değişiklikleri /org/keepalived/Vrrp1/<namespace>/<interface>.


1
2017-09-02 14:36