LVS负载均衡企业实战排错经验

LVS在企业生产环境中如何去排错呢,遇到问题我们该怎么办呢?LVS使用过程中,会遇到很多问题,如下为LVS故障排错思路。

企业网站LVS+Keepalived+Nginx架构中,突然发现网站www.cnbugs.com部分用户访问巨慢,甚至无法访问,这个问题我们该如何定位呢?

  1. 客户端ping  www.cnbugs.com ,通过ping返回域名对应的IP是否正常;
  2. 如果无法返回IP,或者响应比较慢,定位DNS或者网络延迟问题,可以通过tracert www.cnbugs.com测试客户端本机到服务器的链路延迟;
  3. 登录LVS服务器,ipvsadm  -Ln 查看当前后端web连接信息,显示如下:
[root@LVS-Master keepalived]# ipvsadm -Ln 
IP Virtual Server version 1.2.1 (size=4096)  
Prot LocalAddress:Port Scheduler Flags  
-> RemoteAddress:Port           Forward Weight ActiveConn InActConn  
TCP  192.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 ipvsadm信息,看到LVS 选择的轮训方式为加权最少连接,而网站也是部分无法访问,猜测是其中一台WEB服务器无法访问或者访问巨慢导致,如果单台WEB异常,为什么LVS+keepalived不能将异常的WEB服务器IP异常均衡列表呢?

查看keepalived.conf负载均衡健康检查配置,部分截图如下:

real_server 192.168.1.4  80  { 
  weight 100         
  TCP_CHECK { 
  connect_timeout 10  
  nb_get_retry 3 
  delay_before_retry 3 
  connect_port 80 
} 
}

通过配置文件发现LVS默认用的是TCP检测方式,只要80端口能通,请求就会被转发到后端服务器。紧接着在LVS服务器使用wget  http://192.168.1.4/ 返回很慢,直至超时,而另外几台Nginx realserver返回正常,查看Nginx 192.168.1.4服务器80端口服务正常启动,所以对于LVS服务器来说是打开的,所以LVS会把请求转发给给它。

为什么部分用户可以访问,有的用户无法访问呢,发现192.168.1.4服务器ifconfig查看IP,但是没有看到VIP地址绑定在lo:0网卡上,经排错由于该服务器被重启,realserver脚本配置VIP异常,启动realserver脚本,网站恢复正常。

为了防止以上突发问题,增加LVS对后端Nginx URL的检测,能访问URL则表示服务正常。 对比之前的检测方式,从单纯的80端口到现在的URL检测,后端如果某台出现502超时错误,keepalived列表会自动踢出异常的realserver,等待后端realserver恢复后自动添加到服务器正常列表。Keepalived基于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 
 } 
}

发表评论

后才能评论