Keepalived : 監視スクリプトで監視する2025/10/09 |
|
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:54:51:f0 brd ff:ff:ff:ff:ff:ff
altname enx5254005451f0
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 proto keepalived enp1s0
valid_lft forever preferred_lft forever
inet6 fe80::5054:ff:fe54:51f0/64 scope link proto kernel_ll
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:54:51:f0 brd ff:ff:ff:ff:ff:ff
altname enx5254005451f0
inet 10.0.0.51/24 brd 10.0.0.255 scope global enp1s0
valid_lft forever preferred_lft forever
inet6 fe80::5054:ff:fe54:51f0/64 scope link proto kernel_ll
valid_lft forever preferred_lft forever
root@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:99:69:06 brd ff:ff:ff:ff:ff:ff
altname enx525400996906
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 proto 0x12 enp1s0
valid_lft forever preferred_lft forever
inet6 fe80::5054:ff:fe99:6906/64 scope link proto kernel_ll
valid_lft forever preferred_lft forever
|
| Sponsored Link |
|
|