zoukankan      html  css  js  c++  java
  • HAProxy端口资源耗尽的解决办法

    项目背景

    系统使用HAProxy为mq和部分应用的负载均衡服务。近期,瞬时流量过大,导致出现连锁反应,HA开始波动。
    HAProxy版本:1.6.3

    问题分析


    心跳检测大量失败,项目状态极不稳定。观察日志发现如下警告:

    FD limit (65535) too low for maxconn=204800/maxsock=410295. Please raise 'ulimit-n' to 410295 or more to avoid any trouble.
    

    初步确定是因为机器的端口资源耗尽,导致项目通信异常,而异常的出现,将流量又进行了放大,导致资源更加紧张,形成恶性循环。

    解决办法

    通过查阅资料,发现两种解决办法:

    • 升级HAProxy版本到1.7,利用linux内核的IP_BIND_ADDRESS_NO_PORT特性,变相提升连接数能力。但是需要升级内核到4.2。(需要停机维护)
    • 参考https://blog.csdn.net/libaineu2004/article/details/79147778,暂时增加源端口数量并重用等待端口。
      最终采取第二种办法解决问题:
    解决方案
    1.增加本地端口范围
    对于单一的dstIP:port,可用的源端口默认是28K左右,可以用如下命令查看当前值:
    [haproxy ~]# sysctl net.ipv4.ip_local_port_range
    net.ipv4.ip_local_port_range = 32768 61000
    
    增加到64K个源端口
    [haproxy ~]# vi /etc/sysctl.conf
    net.ipv4.ip_local_port_range = 1025 65000
    
    2.允许处于TIME_WAIT状态的源端口重用
    [haproxy ~]# vi /etc/sysctl.conf
    net.ipv4.tcp_tw_reuse = 1
    net.ipv4.tcp_tw_recycle = 1
    

    总结

    • 系统基础架构要保持升级,特别是重要的可能成为瓶颈的服务;
    • 负载方式多样化,利用好备用方案;
    • 完善服务降级方案。
    定位问题原因* 根据原因思考问题解决方案* 实践验证方案有效性* 提交验证结果
  • 相关阅读:
    varnish反向代理
    Asp.Net MVC 3.0
    反向代理(Reverse Proxy)
    Go语言开发Windows应用
    Windows下安装NodeJS和CoffeeScript方法
    数据库设计....
    发布一个开源的c++网络事件库
    非小型电子商务系统设计经验分享 Coding changes the world
    SqlServer查询计划
    cocos2dx总结(一)HelloWord
  • 原文地址:https://www.cnblogs.com/jimoliunian/p/13896263.html
Copyright © 2011-2022 走看看