Ubuntu 22.04
Sponsored Link

Keepalived : 通知スクリプトを設定する2023/10/11

 

通知スクリプトを設定すると、Keepalived でシステムの状態 (MASTER / BACKUP / FAULT) が変化した際に、任意のアクションを実行することができます。

当例では以下のような環境を例にします。

                            VIP:10.0.0.30
+----------------------+          |          +----------------------+
|  [node01.srv.world]  |10.0.0.51 | 10.0.0.52|  [node02.srv.world]  |
|     Keepalived#1     +----------+----------+     Keepalived#2     |
|                      |                     |                      |
+----------------------+                     +----------------------+

[1]

こちらを参考に、Keepalived ノード間の基本的な設定を実施しておきます

[2] 例として、Keepalived ノード間の基本的な設定に加えて、通知スクリプトを作成して設定します。
# 通知スクリプト作成

root@node01:~#
vi /etc/keepalived/notify.sh
# 新規作成
#!/bin/bash

TYPE=$1
NAME=$2
ENDSTATE=$3

MASTER_STATE () {
    # MASTER 状態になった際に実行したい処理を記述
    /usr/bin/echo "MASTER state for VRRP ${TYPE} ${NAME}" > /tmp/keepalive.stat
}

BACKUP_STATE () {
    # BACKUP 状態になった際に実行したい処理を記述
    /usr/bin/echo "BACKUP state for VRRP ${TYPE} ${NAME}" > /tmp/keepalive.stat
}

FAULT_STATE () {
    # FAULT 状態になった際に実行したい処理を記述
    /usr/bin/echo "FAULT state for VRRP ${TYPE} ${NAME}" > /tmp/keepalive.stat
}

case $ENDSTATE in
    "MASTER")
        MASTER_STATE
        exit 0
        ;;
    "BACKUP")
        BACKUP_STATE
        exit 0
        ;;
    "FAULT")
        FAULT_STATE
        exit 0
        ;;
    *)
        echo "${ENDSTATE} is unknown state for VRRP ${TYPE} ${NAME}"
        exit 1
        ;;
esac

root@node01:~#
chmod 755 /etc/keepalived/notify.sh
root@node01:~#
vi /etc/keepalived/keepalived.conf
global_defs {
    router_id node01
    notification_email {
        root@localhost
    }
    notification_email_from root@node01.srv.world
    smtp_server localhost
    smtp_connect_timeout 30
    # 追記
    enable_script_security
    # スクリプト実行ユーザーを指定
    # セキュリティ上は可能であれば root 以外のユーザーがよい
    script_user root
}

vrrp_instance VRRP1 {
    state BACKUP
    nopreempt
    interface enp1s0
    virtual_router_id 101
    priority 200
    advert_int 1
    virtual_ipaddress {
        10.0.0.30/24
    }
    smtp_alert
    # 追記
    # notify に指定するスクリプトへの引数指定は不可
    # notify に指定するスクリプトには自動的に以下の引数が付与される
    # notify script.sh (INSTANCE|GROUP) (instance name) (ENDSTATE) (priority)
    notify /etc/keepalived/notify.sh

    # 以下のように個別指定も可
    # こちらは任意の引数指定可
    # notify_master "script.sh arg1 arg2 ..."
    # notify_backup "script.sh arg1 arg2 ..."
    # notify_fault  "script.sh arg1 arg2 ..."
}

root@node01:~#
systemctl restart keepalived
[3] 以上で設定完了です。通知スクリプトの動作確認をしておきます。
# プライマリーノード

root@node01:~#
cat /tmp/keepalive.stat

MASTER state for VRRP INSTANCE VRRP1
root@node01:~#
systemctl restart keepalived
root@node01:~#
cat /tmp/keepalive.stat

BACKUP state for VRRP INSTANCE VRRP1
関連コンテンツ