サーバーインスタンス内のコマンドラインを使用して現在の状態(マスター/バックアップ)を表示する方法はありますか?
乾杯
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
SNMPを介して現在のステータスを読み取ることは、私にとって最も信頼できることが証明されています。これを有効にするには、snmpサポートを使用してkeepalivedを開始する必要があります。
そしてsnmpdをインストールします。
次に、確実にステータスを照会できます
snmpget -Oq -Ov -v2c -cpublic localhost KEEPALIVED-MIB::vrrpInstanceState.1
通知スクリプトを使用して実行することもできますが、これらは常に実行されるわけではなく、状態ファイルが現実と同期しなくなります。
コマンドを発行する場合:
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
バージョン1.3.0で、keepalivedはDBusインターフェースを追加しました。これは、設定ファイルのenable_dbus
ブロックのglobal_defs
オプションで有効にできます(ただし、インターフェースはconfigure
中に--enable-dbus
ビルドオプションで有効にする必要があります。バイナリパッケージを使用している場合は、そうではない可能性があります。
DBusクライアント/ライブラリ(例:dbus-send
、gdbus
、qdbus
)を使用して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>
を変更します。
現在の状態をダンプするには、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
もう一度信号を送信してみてください。