keepalived 进行大量 TCP DUP ACK 和 TCP 重传

keepalived 进行大量 TCP DUP ACK 和 TCP 重传

我正在尝试复制托管提供商为我们的负载均衡器所做的设置,该设置使用 keepalived。因此,我有一个“负载均衡器”,运行 CentOS 6 和 keepalived 1.2.7,两个 Web 服务器运行 Ubuntu 12.04 LTS 和 Apache 2.2。

如果我直接查询两个 Web 服务器中的其中一个,它会运行良好,我会在几毫秒内得到响应。但如果我尝试通过负载平衡器查询网站,则需要一分钟才能得到响应。

我在负载均衡器上启动了 wireshark,看到来自双方(我的 Mac 和负载均衡器)的大量 TCP DUP ACK 和 TCP 重传。

有人遇到同样的问题吗?

配置:

vrrp_script chk_haproxy {
script "killall -0 haproxy"
interval 2
weight 5
}

vrrp_script chk_http {
script "killall -0 apache2"
interval 2
weight 5
}

vrrp_instance VI_LOCAL {
interface eth1
state MASTER
virtual_router_id 51
priority 101
virtual_ipaddress {
    10.6.79.1
}
track_script {
    chk_haproxy
}
track_interface {
    eth0
    eth1
}
} 

vrrp_instance VI_PUB {
interface eth0
state MASTER
virtual_router_id 52
priority 101
virtual_ipaddress {
    192.168.1.129
    192.168.1.127
    192.168.1.128
}
track_script {
    chk_haproxy
    #chk_http
}
track_interface {
    eth0
    eth1
}
}

virtual_server 192.168.1.129 80 {
   delay_loop 6
   lb_algo rr
   lb_kind NAT
   protocol TCP

   real_server 10.6.79.10 80 {
           weight 1
           TCP_CHECK {
                   connect_timeout 180
           }
   }
   real_server 10.6.79.11 80 {
           weight 1
           TCP_CHECK {
                   connect_timeout 180
           }
   }
}

virtual_server 192.168.1.129 443 {
   delay_loop 6
   lb_algo rr
   lb_kind NAT
   protocol TCP

   real_server 10.6.79.10 443 {
           weight 1
           TCP_CHECK {
                   connect_timeout 180
           }
   }
   real_server 10.6.79.11 443 {
           weight 1
           TCP_CHECK {
                   connect_timeout 180
           }
   }
}

答案1

可能是您在堆栈的更深处遇到了导致 TCP 重新传输的错误。这可能很简单,比如以太网电缆和/或网卡损坏。运行“ifconfig”并查找错误...也查看消息。

如果排除了 L1 硬件的原因,请检查 L2 问题,例如交换机端口上的速度/双工不匹配等...

相关内容