keepalvied双备模式
node1配置
! Configuration File for keepalived
vrrp_script chk_keepalive {
script "/root/scripts/check.sh" ###监控脚本
interval 2 ###间隔时间
}
#网卡需要注意,使用ifconfig查看一下当前活动网卡
vrrp_instance VI_1 {
state BACKUP ###设置为BACKUP
nopreempt ###不抢占MASTER
interface eth0 ###监控网卡
virtual_router_id 42
priority 100 ###权重值
authentication {
auth_type PASS ###加密
auth_pass 1q2w3e ###密码
}
#设置额外的监控,里面的任意一个网卡出现问题,都会进入FAULT状态
track_interface {
eth0
}
track_script {
chk_keepalive ###执行上面定义的chk_keepalive
}
virtual_ipaddress {
10.0.36.201 ######VIP
}
notify_master /root/scripts/change_master.sh # 当此节点切换为master时执行的脚本
notify_backup /root/scripts/change_backup.sh # 当此节点切换为backup时执行的脚本
notify_fault /root/scripts/change_fault.sh # 当此节点故障时(chk_keepalive中脚本返回非0)执行的脚本
notify_stop /root/scripts/change_stop.sh # 当此节点keepalived服务stop时执行的脚本
}
node2配置
! Configuration File for keepalived
vrrp_script chk_keepalive {
script "/root/scripts/check.sh"
interval 2
}
#同样要注意网卡
vrrp_instance VI_1 {
state BACKUP ###设置为BACKUP
interface eth0 ###监控网卡(注意这里没有nopreempt配置)
virtual_router_id 42
priority 10 ###比MASTRE权重值低
authentication {
auth_type PASS
auth_pass 1q2w3e ###密码与MASTRE相同
}
#设置额外的监控,里面的任意一个网卡出现问题,都会进入FAULT状态
track_interface {
eth0
}
track_script {
chk_keepalive ###执行上面定义的chk_keepalive
}
virtual_ipaddress {
10.0.36.201 ####vip
}
notify_master /root/scripts/change_master.sh
notify_backup /root/scripts/change_backup.sh
notify_fault /root/scripts/change_fault.sh
notify_stop /root/scripts/change_stop.sh
}
脚本
四个notify脚本根据业务需要配置,我的是在改变状态时同时插入一条日志
check.sh脚本
#!/bin/bash
cmd=`ps -C haproxy --no-header |wc -l`
if [ $cmd -eq 0 ];then
exit 1
else
exit 0
fi
此脚本针对双备keepalive不抢占的脚本,当主检查haproxy无进程时,返回非0,此时keepalive进入故障状态并移除VIP。