童鞋们众所周知LVS是基于第4层来做负载均衡调度的,默认也是基于端口来做后端服务器的健康状态检测,但公司总是出现一些后端Real Server如JBOSS假死后不服务,端口却还存活着的状况,这样导致LVS继续将用户的请求分发给这台宕机的服务器,结果返回给用户的却是502,503......,当然也可以用HAProxy或Nginx做7层负载均衡,但是转发性能有瓶颈,这里不对产品和功能做介绍,本文主要与下面这种架构的童鞋们做交流。
LVS基于应用层的健康状态检测脚本下载:
具体下载目录在 /2013年资料/10月/30日/LVS基于应用层的健康状态检测
我们的目的:
1,不伤害用户,尽可能的将服务器错误封杀在内部,不要暴露出50X。
2,提高服务的稳定性,向99.99%甚至5个9迈进。
我们的思路:
1,在每台RealServer的业务上放一个JAVA或者PHP可以解释的页面,如alive_test.jsp,alive_test.php,根据自己的业务类型来定。内容自定义,也可以写成功能检测的接口,我们就简单返回一个null值啦。
2,在LVS上做一个监控,每5秒去访问一次这个接口,获取返回值或者返回状态。
3,根据访问结果判断,正常不管,失败就从LVS中踢下去,恢复则自动添加进LVS。平滑上下线,控制好LVS分发请求的正确性。
4,全程日志记录,当然我们还可以增加功能,如踢下线的时候邮件提醒下Admin等等,这里就不多说了,有更多好的思路希望能分享给我学习,Thanks。
我们的做法:
好的我们在开始之前先简单说明下用到的几条命令:
ipvsadm -a -t $CTVIP:80 -r $1:80 -g -w 80
ipvsadm -d -t $CTVIP:80 -r $1:80
ipvsadm -L -t $CTVIP:80|grep $1
-a:增加一台RealServer
-d:删除一台RealServer
-L/-l:列出LVS调度表
-t: TCP的服务
-r: RealServer的IP和端口
-g:指定为DR模式
-w:权重
#----------------------------------------------------------#
curl -f --connect-timeout 2 -m 2 -H "Host:" $I/alive_test.jsp
显示页面访问的状态,超过2秒返回超时。
应个人写脚本的的习惯,我分成了函数和脚本两类文件,将公用的功能写成函数文件,检测脚本再引用函数文件,可以从附件中下载。这里为了方便理解,我就整合成一个脚本内容介绍,看以来内容很长,只是因为要处理的端口多,实际上功能点不多,脚本还是很简单的。
相关阅读:
企业Web高可用集群实战之LVS+Keepalived+MySQL HA
使用Linux实现WEB服务的LVS负载均衡
Linux 集群的基本概念与LB(负载均衡)集群详解
服务器群集及Web服务器负载均衡Lvs-network小案例