web-dev-qa-db-ja.com

Keepalivedの現在の状態を表示する

サーバーインスタンス内のコマンドラインを使用して現在の状態(マスター/バックアップ)を表示する方法はありますか?

乾杯

6
Ben

Notifyコマンドを使用して、状態ファイルを書き出すことができます。

       # 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

次のような通知スクリプトを作成します。

#!/bin/bash
# notify.sh

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

そして、次のような状態取得スクリプト:

#!/bin/bash
# getstate.sh

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

SNMPを介して現在のステータスを読み取ることは、私にとって最も信頼できることが証明されています。これを有効にするには、snmpサポートを使用してkeepalivedを開始する必要があります。

  • デーモンオプションに-xを追加します(RedHatベースのシステムでは/ etc/sysconfig/keepalivedを参照)

そしてsnmpdをインストールします。

次に、確実にステータスを照会できます

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

通知スクリプトを使用して実行することもできますが、これらは常に実行されるわけではなく、状態ファイルが現実と同期しなくなります。

6
Erwin Vrolijk

コマンドを発行する場合:

journalctl -u keepalived

それはリストされた状態を持っています:

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

スレーブ側で見ることができます:

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

バージョン1.3.0で、keepalivedはDBusインターフェースを追加しました。これは、設定ファイルのenable_dbusブロックのglobal_defsオプションで有効にできます(ただし、インターフェースはconfigure中に--enable-dbusビルドオプションで有効にする必要があります。バイナリパッケージを使用している場合は、そうではない可能性があります。

DBusクライアント/ライブラリ(例:dbus-sendgdbusqdbus)を使用してDBusインターフェースにアクセスできます。ここでは例として、systemdのbusctlを使用しています。これは非常に優れたインターフェースを備えているためです。

# 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

org.keepalived.Vrrp1.Vrrpのグローバル/org/keepalived/Vrrp1/Vrrpの2つのインターフェースを使用できます。

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

そしてforeach VRRPインスタンス、このテンプレートorg.keepalived.Vrrp1.Instanceに従ったパス上の/org/keepalived/Vrrp1/Instance/<interface>/<virtual-router-id>/<ip-family> org.keepalived.Vrrp1.Instanceインターフェース。 1という名前のeth1にID my-instanceを持つIPv4 VRRPインスタンスの場合、次のようになります。

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

この特定のインスタンスの状態を取得するには、次のコマンドを使用できます

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

返されるプロパティはSTRUCTで、状態コードと人間が読み取れる名前が含まれています。状態は、0 "Init"1 "Backup"2 "Master"3 "Fault"4 "Goto master"98 "Goto fault"です。最後の3つの状態は、内部および公式のRFC 2338状態です。

複数のkeepalivedプロセスを使用してinstanceオプションを設定している場合、またはnamespaceオプションでネットワーク名前空間機能を使用している場合、パスのプレフィックスは/org/keepalived/Vrrp1/<namespace>/<interface>を変更します。

2

現在の状態をダンプするには、USR2シグナルをkeepalived親プロセスに送信します。

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

/tmp/keepalived.statsの結果を参照してください。

注:SELinuxが使用されている場合(CentOS 7)、これに書き込むことはできませんファイル。この準備でこれを回避することができます:

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

もう一度信号を送信してみてください。

2
SergA