Keepalived抢占模式和非抢占模式:

    keepalived的HA分为抢占模式和非抢占模式,抢占模式即MASTER从故障中恢复后,会将VIP从BACKUP节点中抢占过来。

    非抢占模式即MASTER恢复后不抢占BACKUP升级为MASTER后的VIP。

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

check_nginx.sh文件信息如下:(注意 “ ` ” 这是大写锁定后的飘号)

#!/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

添加完成后,为check_nginx.sh 文件授权,便于脚本获得执行权限。

[root@localhost keepalived]# chmod 755 /etc/keepalived/check_nginx.sh

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

keepalived会定时执行脚本并对脚本执行的结果进行分析,动态调整vrrp_instance的优先级。如果脚本执行结果为0,并且weight配置的值大于0,则优先级相应的增加。

如果脚本执行结果非0,并且weight配置的值小于 0,则优先级相应的减少。其他情况,维持原本配置的优先级,即配置文件中priority对应的值。

非抢占模式:

vrrp_script check_nginx  {    # {有一个空格

  script "/etc/keepalived/check_nginx.sh"   #检测nginx进程

  interval 2   #每2秒检测一次nginx的运行状态

  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,换行即可
 }  
}

3.在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,换行即可
 }  
}

抢占模式:

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

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

 

Tips:关于配置信息的几点说明:

state - 主服务器需配成MASTER,从服务器需配成BACKUP

interface - 这个是网卡名

mcast_src_ip -实际IP地址

priority - 主服务器的优先级必须比从服务器的高,这里主服务器配置成260,从服务器配置成240

virtual_ipaddress - 配置虚拟IP(192.168.43.150)

authentication - auth_pass主从服务器必须一致,keepalived靠这个来通信

virtual_router_id - 主从服务器必须保持一致

 

非抢占模式配置(master从故障中恢复后,不会抢占备份节点的vip):

1> 在vrrp_instance块下两个节点各增加了nopreempt指令,表示不争抢vip

2> 节点的state都为BACKUP
两个keepalived节点都启动后,默认都是BACKUP状态,双方在发送组播信息后,会根据优先级来选举一个MASTER出来。由于两者都配置了nopreempt,所以MASTER从故障中恢复后,不会抢占vip。这样会避免VIP切换可能造成的服务延迟。

两个keepalived节点都启动后,默认都是BACKUP状态,双方在发送组播信息后,会根据优先级来选举一个MASTER出来。由于两者都配置了nopreempt,所以MASTER从故障中恢复后,不会抢占vip。这样会避免VIP切换可能造成的服务延迟。

Logo

权威|前沿|技术|干货|国内首个API全生命周期开发者社区

更多推荐