1. 监控脚本

在Master节点和Slave节点 /etc/keepalived目录下添加check_nginx.sh 文件,用于检测Nginx的存活状况

#!/bin/bash
#时间变量,用于记录日志
d=`date --date today +%Y%m%d_%H:%M:%S`
#计算nginx进程数量
n=`ps -C nginx --no-heading|wc -l`
#如果进程为0,则尝试启动nginx,并且再次检测nginx进程数量,
#如果还为0,说明nginx无法启动,此时需要关闭keepalived
if [ $n -eq "0" ]; then
    #如果挂掉了,就启动nginx
     #注意nginx.conf配置文件的位置
#尝试重新启动nginx
/usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf
sleep 3  #睡眠3秒
        n2=`ps -C nginx --no-heading|wc -l`
        if [ $n2 -eq "0"  ]; then
					#把nginx宕机时间写入日志
                echo "$d nginx down,keepalived will stop" >> /usr/local/nginx/logs/check_ng.log 
                #启动失败,将keepalived服务杀死。将vip漂移到其它备份节点
service keepalived stop
        fi
fi

授权: chmod 755 /etc/keepalived/check_nginx.sh

2. 非抢占模式

在Master 节点 /etc/keepalived目录下,配置keepalived.conf 文件

vrrp_script check_nginx  {    # {有一个空格
  script "/etc/keepalived/check_nginx.sh"   #检测进程
  interval 2   # 检测间隔时间,即两秒检测一次
  #fall 2    # 检测失败的最大次数,超过两次认为节点资源发生故障
  #rise 1    # 请求一次成功认为节点恢复正常
  weight -20  #失败一次,将自己的优先级 -20
 
}  
vrrp_instance VI_1 {  
 state  BACKUP   #非抢占模式        #主标示状态为BACKUP 备份机也为BACKUP
 interface eth2        #设置实例绑定的网卡
 virtual_router_id 51    #同一实例下virtual_router_id必须相同   
 mcast_src_ip 192.168.43.101   
 priority 100      #MASTER权重要高于BACKUP(90)
 advert_int 1     #MASTER与BACKUP负载均衡器之间同步检查的时间间隔,单位是秒
 nopreempt                     #非抢占模式
 authentication {              #设置认证
        auth_type PASS         #主从服务器验证方式
        auth_pass 123456  
 }  
 track_script {  
        check_nginx  
 }  
 virtual_ipaddress {           #设置vip
        192.168.43.150         #可以多个虚拟IP,换行即可
 }  
}

在Backup节点 /etc/keepalived目录下添加 keepalived.conf 配置文件

vrrp_script check_nginx {  
 script "/etc/keepalived/check_nginx.sh"   #检测nginx进程  
 interval 2  
 weight -20  
}  
vrrp_instance VI_1 {  
 state BACKUP       #标示状态BACKUP
 interface eth2       #设置实例绑定的网卡
 virtual_router_id 51  #同一实例下virtual_router_id必须相同   
 mcast_src_ip 192.168.43.102  
 priority 90      #MASTER(100)  
 advert_int 1      #MASTER与BACKUP负载均衡器之间同步检查的时间间隔,单位是秒
 nopreempt          #非抢占模式
 authentication {              #设置认证
        auth_type PASS         #主从服务器验证方式
        auth_pass 123456  
 }  
 track_script {  
        check_nginx  
 }  
 virtual_ipaddress {           #设置vip
        192.168.43.150       #可以多个虚拟IP,换行即可
 }  
}

3. 抢占模式

只需要把主的state改成master,从的state还是backup

然后把主机和备份机的nopreempt那个非抢占模式的标识删掉即可.