keepalived踩坑记录
环境
操作系统: CentOS7.9
keepalived: 1.35
master配置
cat > /etc/keepalived/keepalived.conf<<'EOF'
global_defs {
router_id Nginx1
}
vrrp_script chk_nginx {
script "/etc/keepalived/check_nginx.sh"
interval 3
weight -3
}
vrrp_instance VI_1 {
state MASTER
interface enp0s8
virtual_router_id 101
priority 120
advert_int 2
nopreempt
authentication {
auth_type PASS
auth_pass 12333
}
virtual_ipaddress {
192.168.240.6
}
track_script {
chk_nginx
}
}
EOF
cat > /etc/keepalived/check_nginx.sh<<'EOF'
B=$(pgrep nginx | wc -l)
if [[ $B -eq 0 ]]; then
/usr/bin/systemctl stop keepalived
exit 1
fi
exit 0
EOF
backup配置
cat > /etc/keepalived/keepalived.conf<<'EOF'
global_defs {
router_id Nginx2
}
vrrp_script chk_nginx {
script "/etc/keepalived/check_nginx.sh"
interval 3
weight -3
}
vrrp_instance VI_1 {
state BACKUP
interface enp0s8
virtual_router_id 101
priority 119
advert_int 2
nopreempt
authentication {
auth_type PASS
auth_pass 12333
}
virtual_ipaddress {
192.168.240.6
}
track_script {
chk_nginx
}
}
EOF
cat > /etc/keepalived/check_nginx.sh<<'EOF'
B=$(pgrep nginx | wc -l)
if [[ $B -eq 0 ]]; then
/usr/bin/systemctl stop keepalived
exit 1
fi
exit 0
EOF
说明
坑点
- 检测脚本
/etc/keepalived/check_nginx.sh
第一行一定不要写#!/bin/bash
- 检测脚本
/etc/keepalived/check_nginx.sh
的退出状态码不起作用,所以只能/usr/bin/systemctl stop keepalived
排错参考文档
【Linux】详解shell中source、sh、bash、./执行脚本的区别