美文网首页
同一客户端访问多个负载均衡实例失败或超时

同一客户端访问多个负载均衡实例失败或超时

作者: 孙毛毛丶 | 来源:发表于2021-01-28 09:40 被阅读0次

    背景:服务器突然被很多渠道报告出现大量 timeout.随找问题

    服务器中间有负载均衡
    1.解决方法
    增加负载均衡配置(无效)
    检查 timewait 问题 TCP

    ss -ant|awk '{s[$1]++} END {for (k in s) print k, s[k] }'
    
    image.png

    2.多台服务器对多台负载(无效)
    最后找到
    3.试图优化 Nginx(无效)


    image.png

    CentOS下内核TCP参数优化配置详解https://www.cnblogs.com/xkus/p/7463135.html

    现象或问题
    将相同 ECS 同时挂载在多个负载均衡实例的后端,并在这些负载均衡实例下创建相同的后端端口的四层监听。在这种场景下,用户用同一台客户端去同时访问这些负载均衡实例时,有时会出现失败或超时。
    如下图所示,用户有两个负载均衡实例 SLB1 和 SLB2,分别有两个 TCP 监听,其前端端口不一致,但后端端口一致,并且这两个监听后端挂载了相同的云服务器 ECS。当一个用户 Client 去访问这两个 SLB 实例时,访问可能会失败。

    引用:https://help.aliyun.com/document_detail/54007.html
    https://help.aliyun.com/document_detail/32431.html

    image.png

    解决方法
    这种异常的具体原因为:
    四层 (TCP协议) 负载均衡会对用户的访问流量在入方向做 DNAT。
    当客户端访问 SLB1 时,CIP:CPORT->VIP1:VPORT1 的连接在到达后端 ECS 的时候,会被转换成 CIP:CPORT->DIP:DPORT。
    当客户端访问 SLB2 时,CIP:CPORT->VIP2:VPORT2 的连接在到达后端 ECS 的时候,也会被转换成 CIP:CPORT->DIP:DPORT。
    两条 TCP 连接的序列号和 TCP 状态在后端服务器上互相干扰,导致建连失败,即 Client 建立的两条连接在后端服务器上变成了同样的五元组 TCP:CIP:CPORT:DIP:DPORT。

    四层负载均衡(TCP协议)服务可以直接在后端ECS上获取客户端的真实IP地址,无需进行额外的配置。

    七层负载均衡(HTTP/HTTPS协议)服务需要对应用服务器进行配置,然后使用X-Forwarded-For的方式获取客户端的真实IP地址

    配置 Nginx 解决

     # 配置阿里云
        # 负载均衡的IP地址段100.64.0.0/10(100.64.0.0/10 是阿里云保留地址,其他用户无
    法分配到该网段内,不会存在安全风险)
        set_real_ip_from 100.64.0.0/10; #真实服务器上一级代理的IP地址或者IP段,可以写>多行。
        real_ip_header X-Forwarded-For; #设置请求头字段,表示从X-Forwarded-For字段获>取用户 IP
        real_ip_recursive on;           #递归的去除所配置中的可信IP。
    

    相关文章

      网友评论

          本文标题:同一客户端访问多个负载均衡实例失败或超时

          本文链接:https://www.haomeiwen.com/subject/poouzktx.html