2> BACKUP(192.168.1.202)
global_defs {
router_id nginx_02
}
vrrp_script chk_nginx {
script "/etc/keepalived/nginx_check.sh"
interval 2
weight -20
}
vrrp_instance VI_1 {
state BACKUP
interface enp0s3
virtual_router_id 51
mcast_src_ip 192.168.1.202
priority 90
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
192.168.1.210
}
track_script {
chk_nginx
}
}
3> 创建nginx服务检测脚本
分别在主备服务器/etc/keepalived目录下创建nginx_check.sh脚本,并为其添加执行权限chmod +x /etc/keepalived/nginx_check.sh。用于keepalived定时检测nginx的服务状态,如果nginx停止了,会尝试重新启动nginx,如果启动失败,会将keepalived进程杀死,将vip漂移到备份机器上。
#!/bin/bash A=`ps -C nginx --no-header | wc -l` if [ $A -eq 0 ];then /opt/nginx/sbin/nginx #尝试重新启动nginx sleep 2 #睡眠2秒 if [ `ps -C nginx --no-header | wc -l` -eq 0 ];then killall keepalived #启动失败,将keepalived服务杀死。将vip漂移到其它备份节点 fi fi
4> 启动keepalived服务
shell> service keepalived start shell> ps -ef | grep keepalived [root@localhost ~]# ps -ef | grep keepalived root 865 1 0 23:36 ? 00:00:00 keepalived -D root 869 865 0 23:36 ? 00:00:00 keepalived -D root 870 865 0 23:36 ? 00:00:00 keepalived -D
如果看到如上进程信息,表示keepalived已经启动成功。下面用ip add命令查看vip绑定的情况,如下图所示:
从上图可以看出,vip地址192.168.1.210绑定在MASTER(192.168.1.201)的enp0s3网卡上。
5> 测试故障转移
将MASTER上的keepalived停止,查看vip是否会漂移到192.168.2.202上。
停止201的keepalived服务:
shell> service keepalived stop shell> ip addr
从上图可以看出,vip已经成功从201漂移到了202。此时再将201的keepalived服务启动后,由于201是MASTER,所以会将202的VIP抢占过来。
启动201的keepalived服务:
shell> service keepalived start
结果VIP又回到了201,如下图所示:

3、非抢占模式
master从故障中恢复后,不会抢占备份节点的vip
1> MASTER(192.168.1.201):
global_defs {
router_id nginx_01 #标识本节点的名称,通常为hostname
}
vrrp_script chk_nginx {
script "/etc/keepalived/nginx_check.sh"
interval 2
weight -20
}
vrrp_instance VI_1 {
state BACKUP
interface enp0s3
virtual_router_id 51
mcast_src_ip 192.168.1.201
priority 100
advert_int 1
nopreempt
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
192.168.1.210
}
track_script {
chk_nginx # nginx存活状态检测脚本
}
}








