微服务基础----keepalived抢占式和非抢占式的配置及区别
Keepalived抢占模式和非抢占模式:keepalived的HA分为抢占模式和非抢占模式,抢占模式即MASTER从故障中恢复后,会将VIP从BACKUP节点中抢占过来。非抢占模式即MASTER恢复后不抢占BACKUP升级为MASTER后的VIP。1.在Master节点和Slave节点/etc/keepalived目录下添加check_nginx.sh 文件,用...
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切换可能造成的服务延迟。
更多推荐
所有评论(0)