mindong 发表于 2019-1-2 11:39:59

LVS故障解决案例解析

    记上一篇LVS防火墙配置后,接下来想分享一篇LVS故障排错案例,仅供大家参考和学习,LVS使用过程中,我们都会遇到很多的问题,但是遇到问题后,我们需要该如何处理呢?那这里分享我的解决思路。
LVS+Keepalived+Nginx架构中,某天突然发现网站www.wuguangke.cn 部分用户访问巨慢,甚至无法访问,那这个问题我们该如何定位呢?分两种情况:如果有监控,如果有报警短信再好不过了。然后可以很快的定位到某一台机器。如果没有监控,或者其他的原因没法看监控,那我们该如何排查呢?如下步骤:


[*]第一步:首先我们想到ping www.wuguangke.cn ,通过ping返回数据部正常
[*]

[*]第二步:登录LVS服务器,ipvsadm –Ln 查看当前后端web连接信息,显示如下:
[*]
[*]# ipvsadm -Ln
[*]
[*]IP Virtual Server version 1.2.1 (size=4096)
[*]
[*]Prot LocalAddress:Port Scheduler Flags
[*]
[*]-> RemoteAddress:Port         Forward Weight ActiveConn InActConn
[*]
[*]TCP192.168.1.10:80 wlc
[*]
[*]-> 192.168.1.6:80               Route   100    2         13         
[*]
[*]-> 192.168.1.5:80               Route   100    120       13         
[*]
[*]-> 192.168.1.4:80               Route   100    1363      45

通过LVS信息,我们看到LVS 选择的轮训方式为加权最少连接,而网站也是部分无法访问,我们可以猜测是其中一台web服务器无法访问或者访问巨慢导致,我们会想难道LVS不会自己判断吗?想法很好,那我们接下来查看keepalived.conf配置,部分截图如下:


[*]real_server 192.168.1.480{
[*]
[*]      weight 100         
[*]      TCP_CHECK {
[*]      connect_timeout 10
[*]      nb_get_retry 3
[*]      delay_before_retry 3
[*]      connect_port 80
[*]      }
[*]}

通过配置文件我们发现LVS默认用的是TCP检测方式,只要80端口能通,请求就会转发到后端服务器。紧接着在LVS /tmp目wget http://192.168.1.4/ 返回502超时,另外几台nginx返回正常,1.4服务器80端口对于LVS来说是打开的,所以LVS会把请求转发给给它。
这就造成了为什么部分用户可以访问,有的用户无法访问的问题。登录1.4 nginx服务器,pkill nginx ,临时停止nginx保证服务保证正常访问,然后再查看nginx日志发现是后端程序连接一台数据库出现的问题。
回过头来我们会发现,LVS不会检测你后端502超时错误,只关心80端口是否开启对于应用来说,这样检测明显不足,那我们需要如何处理呢?增加LVS对后端Nginx URL的检测,能访问URL则表示服务正常,直接看代码:


[*]real_server 192.168.1.4 80 {
[*]
[*]      weight 100
[*]
[*]      HTTP_GET {
[*]
[*]      url {
[*]
[*]      path /monitor/warn.jsp
[*]
[*]      status_code 200
[*]
[*]      }
[*]      connect_timeout 10
[*]
[*]      nb_get_retry 3
[*]
[*]      delay_before_retry 3
[*]
[*]   }
[*]
[*]}

我们对比之前的检测方式,从单纯的80端口到现在的URL检测,后端如果某台出现502超时错误,LVS会自动踢出,等后端恢复后自动添加。自此故障解决完毕!欢迎大家共同交流和学习!



页: [1]
查看完整版本: LVS故障解决案例解析