Ubuntu 22.04
Sponsored Link

Keepalived : 監視スクリプトで監視する2023/10/11

 

Keepalived で特定のプロセスやサービスの状態を、スクリプトで監視することもできます。

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

                            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 ノード間の基本的な設定に加えて、HAProxy サービスを監視するように、全ノードで設定します。
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
}

# haproxy サービスの状態監視を設定
# [script] の引数には任意のコマンドや自作スクリプトを設定可
vrrp_script track_haproxy {
    script "systemctl is-active haproxy"
    # スクリプト実行インターバル (秒)
    interval 5
    # exit コードが 0 以外で 4 回続くと FAULT と判断する
    fall 4
    # exit コード 0 が 2 回続くと FAULT 状態を exit する
    rise 2
}

# HTTP ポートの状態監視を設定
vrrp_script track_http_port {
    script "nc -zv localhost 80"
    interval 5
    fall 4
    rise 2
}

vrrp_instance VRRP1 {
    state MASTER
    # nopreempt
    interface enp1s0
    virtual_router_id 101
    priority 200
    advert_int 1
    virtual_ipaddress {
        10.0.0.30/24
    }
    # 追記
    track_script {
        track_haproxy
        track_http_port
    }
    smtp_alert
}

root@node01:~#
systemctl restart keepalived
[3] 以上で設定完了です。プライマリーノードで HAProxy サービスを落として、仮想 IP アドレスがバックアップノードに切り替わるか確認しておきます。
# プライマリーノード

root@node01:~#
ip address show enp1s0

2: enp1s0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000
    link/ether 52:54:00:35:69:7c brd ff:ff:ff:ff:ff:ff
    inet 10.0.0.51/24 brd 10.0.0.255 scope global enp1s0
       valid_lft forever preferred_lft forever
    inet 10.0.0.30/24 scope global secondary enp1s0
       valid_lft forever preferred_lft forever
    inet6 fe80::5054:ff:fe35:697c/64 scope link
       valid_lft forever preferred_lft forever

root@node01:~#
systemctl stop haproxy

root@node01:~#
systemctl is-active haproxy

inactive
root@node01:~#
echo $?

3
root@node01:~#
nc -zv localhost 80

nc: connect to localhost (127.0.0.1) port 80 (tcp) failed: Connection refused
root@node01:~#
echo $?

1
root@node01:~#
ip address show enp1s0

2: enp1s0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000
    link/ether 52:54:00:35:69:7c brd ff:ff:ff:ff:ff:ff
    inet 10.0.0.51/24 brd 10.0.0.255 scope global enp1s0
       valid_lft forever preferred_lft forever
    inet6 fe80::5054:ff:fe35:697c/64 scope link
       valid_lft forever preferred_lft forever

root@node01:~#
ssh ubuntu@node02 "ip address show enp1s0"

ubuntu@node02's password:
2: enp1s0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000
    link/ether 52:54:00:7d:c5:e7 brd ff:ff:ff:ff:ff:ff
    inet 10.0.0.52/24 brd 10.0.0.255 scope global enp1s0
       valid_lft forever preferred_lft forever
    inet 10.0.0.30/24 scope global secondary enp1s0
       valid_lft forever preferred_lft forever
    inet6 fe80::5054:ff:fe7d:c5e7/64 scope link
       valid_lft forever preferred_lft forever
関連コンテンツ