Keepalived : 監視スクリプトで監視する2023/08/25 |
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] | |
[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:5b:6d:b6 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:fe5b:6db6/64 scope link valid_lft forever preferred_lft foreverroot@node01:~# systemctl stop haproxy root@node01:~# systemctl is-active haproxy inactive root@node01:~# echo $? 3 root@node01:~# nc -zv localhost 80 localhost [127.0.0.1] 80 (http) : 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:5b:6d:b6 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:fe5b:6db6/64 scope link valid_lft forever preferred_lft foreverroot@node01:~# ssh debian@node02 "ip address show enp1s0" debian@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:17:b6:c0 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:fe17:b6c0/64 scope link valid_lft forever preferred_lft forever |
Sponsored Link |