线上某架构组织结构基本如下:
基本架构描述:
前端采用的是lvs+keepalived做负载均衡和高可用,用来转发客户的请求给后端的业务服务器,也就是那4组nginx+tomcat业务服务器。说的更直白一些,那几台nginx+tomcat可以简答理解为lvs的客户端。
故障描述:
其中lvs转发到58.2.12.20这台服务器的时候, ActiveConn的值还有一些,InActConn几乎是没有数值的。为了这个问题纠结了好几天迟迟未能解决,由于刚到公司也不能不解决这些问题哦。
解决思路:
1)首先是判断后端的realserver是否可以正常访问,结果逐一调试访问 ,都没有发现问题。
2)查看keepalived.conf也没有发现任何的问题
3)查看各个的realserver的VIP也都能正常获取到,甚至后来自己写脚本去lvs服务器端重新获取;发现和原来没什么两样,也都能获取到VIP地址,证明这个VIP配置没有问题;
4)联系运维全的朋友们,问了几个远程也没看出是具体的什么问题,我郁闷哦。
5)排除方法,既然有些LVS客户端,也就是realserver(nginx+tomcat),,那么对比这些正常转发的nginx配置文件(也就是lvs的客户端配置文件,nginx这块入手),然后下载到本地的Windows系统,和不能转发的另外的一台nginx的配置文件采用Beyond Compare 3进行对比。发现了一个重大的问题。其中不正常的可以转发的都是没有在nginx的配置文件里面,截图如下
不能转发的nginx配置文件里面,直接写死了采用eth0来处理客户的请求,也就是来直接处理lvs服务端抛过来的请求。
解决方法:直接把nginx的listen监听ip地址采用sed给替换为空,然后保存,重启nginx。
再次观察:
可以看到,已经可以正常。
由于整理的比较仓促,有什么不到位的地方,还请大家多多指导。多多批评指正。特此记录,留作备忘。
追风 2015 07 10