keepalived plus nginx

与lvs集成到linux内核相比,nginx是7层的负载均衡调度器。因此keepalived需要一个脚本来检查本机nginx的存活状态。而lvs由于是内核模块,没有vrrp script。

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

2台ngigx的keepalvied配置:

keepalived通过vrrp_script来检查本机nginx,然后kill keepalived的进程,这样backup和master之间基于vrrp报文的心跳模式就能知道master现在失效,backup节点要接管vip。
即:
vrrp_script 确定本机nginx的状态
vrrp报文确定多个vrrp节点的状态

vrrp_script check_nginx_status{
script “/etc/nginx/chk_nginx_status.sh”
interval 2 #每2s检查本机的nginx服务状态
weight -20 #每失败一次,将本机vrrp 节点的priority减少 20 ,不建议设置此项
}
vrrp_instance VI_1{

track_script{
check_nginx_status #调用上面定义的vrrp_script check_nginx_status
}

}

#!/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服务杀死。backup在3次vrrp通告间隔后没收到vrrp报文,认为master失效,将vip漂移到自身,同时发送vrrp通告,响应arp报文
fi
fi

非抢占模式:
2台nginx的vrrp_instance模块,均配置nopreempt,且均为backup
这样,2台nginx通过priority来选举master,当master失效恢复后,并不会把vip抢占回来,避免了切换vip造成的业务延迟。

由于A、B两个节点设置的“weight”值都为10,因此符合选举策略的第一种,在A节点停止Mysql服务后,A节点的脚本检测将失败,此时A节点的权值将保持为A节点上设置的“priority”值,即为100,而B节点的权值将变为“weight”值与“priority”值之和,也就是90(10+80),这样就出现了A节点权值仍然大于B节点权值的情况,因此不会发生主、备切换。

对于“weight”值的设置,有一个简单的标准,即“weight”值的绝对值要大于Master和Backup节点“priority”值之差。对于上面A、B两个节点的例子,只要设置“weight”值大于20即可保证集群正常运行和切换。由此可见,对于“weight值的设置,要非常谨慎,如果设置不好,将导致集群角色选举失败,使集群陷于瘫痪状态。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值