zoukankan      html  css  js  c++  java
  • keepalived+LVS超时设置产生的realserver的tcp连接不释放问题

    redis的集群使用keepalived+LVS做的负载集群

    persistent时间设置为30s

    而ipvsadm的超时时间则为900 120 300【使用ipvsadm -l --timeout】第一个为tcp超时时间,第二个为tcpfin超时时间,第三个为udp超时时间

    由于在这种设置下ActionConn的连接数在高频访问下总是不会释放,恒定在100,【5个客户端恒定TCP连接每台10个】

    决定设短ipvsadm的tcp超时时间为5s,而tcpfin设置为120,udp为300

    结果就悲催了

    keepalived的ActionConn和InActConn的数量猛增猛降也还可以接受

    realserver的tcp连接则出现了端口上连接堆积不释放的情况,从1000多梦飙升到8000多

    客户端狂报远程连接中断的错误


    仔细研读了LVS的原理和TCP有限状态机

    发现了问题所在

    tcp的连接超时时间严重小于tcpfin的时间,结果lvs就会每隔5s在即使tcp连接还健康存在的时候强制中断

    由于客户端会恒定保持10个TCP连接,然后就不断的被中断,不断的重新建立

    realserver因为tcp连接是被强制中断的,有可能还没有收到lvs转发的tcp操作完成信号,就会在端口上继续保持连接 ESTABLISHED

    然后就悲催了


    一个明显的失误就是tcp的连接超时时间远小于tcp完成超时时间,真是的~~~



  • 相关阅读:
    正则表达式
    [创业指南]给海归技术创业兄弟的九个忠告
    about avast
    设计模式Hibernate
    job desc
    把INT转换成2进制等
    微服务调用跟踪
    Redis 分布式锁实现
    jquery中的$.ajax()方法
    订单从ftp写入到b2b
  • 原文地址:https://www.cnblogs.com/AI001/p/3996955.html
Copyright © 2011-2022 走看看