项目背景

系统使用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

总结

  • 系统基础架构要保持升级,特别是重要的可能成为瓶颈的服务;
  • 负载方式多样化,利用好备用方案;
  • 完善服务降级方案。

HAProxy端口资源耗尽的解决办法的更多相关文章

  1. LoadRunner 自带订票系统flights 功能空白、1080端口被占用的解决办法

    LoadRunner 自带订票系统flights 功能空白.1080端口被占用的解决办法 安装LoadRunner8.1后运行Mercury Web Tours Application,点击fligh ...

  2. maven打包忽略静态资源解决办法,dispatchServlet拦截静态资源请求的解决办法

    问题: maven 打包时,有的文件打不进去target 解决: 因为maven打包默认打Java文件.在项目中的pom文件中加build标签 <build> <resources& ...

  3. 启动PHP study时提示80端口或者3306端口被占用的解决办法

    一.查看PID WIN+R打开命令行------>netstat -ano+回车,就会显示下面的信息: 二.打开任务管理器 Ctrl+Alt+Delete------>任务管理器,找到对应 ...

  4. 在Eclipse中运行Web项目Jsp网页时提示端口被占用的解决办法:Several ports (8005, 8888, 8009) required by Tomcat v9.0 Server at localhost are already in use.

    问题: 在Eclipse中运行Web项目Jsp网页启动Tomcat时提示端口被占用: Several ports (8005, 8080, 8009) required by Tomcat v9.0 ...

  5. nginx反向代理服务器获取不到端口的问题的解决办法

    使用nginx为反向代理服务器时,后端应用程序获取不到请求端口的解决办法. 以下是nginx 简单的配置 server {         listen       81;         serve ...

  6. webdriver.close() quit() 批量kill进程 内存耗尽的解决办法

    问题现象: shell窗口卡,换IP的登录窗,不开: 猜测: 内存耗尽 spider_url,py driver = webdriver.PhantomJS( executable_path='/us ...

  7. Windows下启动ActiveMq端口被占用的解决办法

    cd /D E:\RuntimeSoft\apache-activemq-5.11.0\binactivemq.bat start结果提示:端口号被占用. Windows下查看端口号被占用开始--运行 ...

  8. Linux配置Tomcat8080端口 远程无法访问解决办法

    是因为Linux的防火墙没有开放8080端口 解决办法: /sbin/iptables -I INPUT -p tcp --dport 8080 -j ACCEPT #开启8080端口  /sbin/ ...

  9. centos7 ngxin启动失败:Job for nginx.service failed(80端口被占用的解决办法)

    问题描述:(flaskApi) [root@67 flaskDemo]# service nginx start Redirecting to /bin/systemctl start nginx.s ...

  10. C# 数组、HashSet等内存耗尽的解决办法

    在C#中,如果数据量太大,就会出现 'System.OutOfMemoryException' 异常. 解决办法来自于Stack Overflow和MSDN    https://docs.micro ...

随机推荐

  1. [转帖]jemalloc内存分配算法

    https://www.cnblogs.com/xiaojiesir/p/15450732.html jemalloc内存分配算法简介 jemalloc 是由 Jason Evans 在 FreeBS ...

  2. buildkit 官网 service 资料

    [Unit]   Description=BuildKit   Requires=buildkit.socket   After=buildkit.socket   Documentation=htt ...

  3. TCP内核参数与Nginx配置的简单测试

    背景 昨天晚上整理了下几个TCP内核的参数. 学习到了一点内核参数的影响. 但是因为时间比较晚了没有继续钻研与nginx的关系 今天想着继续研究一下TCP的部分参数与nginx的关系 每个系统都不一样 ...

  4. 使用yagmail发送邮件

    一.yagmail基本数据准备 1.终端下载yagmail:pip install yagmail 2.获取SMTP和密钥 我们以新浪邮箱为例,登录成功后进入设置页面,点击客户端pop/imap/sm ...

  5. charles如何抓取https请求

    我们都知道charles下载安装后只能抓取http请求,要想抓取https请求需要下载安装证书 下面介绍pc端和移动端的配置方法 一.pc端(win) 1.打开charles,点击help>SS ...

  6. css3中的圆角border-radius

    css3的属性应该加上浏览器前缀 不同的浏览器内核不同,因此css的前缀不同. 常见的几种浏览器内核 火狐浏览器 Geoko内核 前缀是 -mox- 谷歌浏览器, Webkit内核 前缀是 -wekb ...

  7. 【VictoriaMetrics源码阅读】vm中仿照RoaringBitmap的实现:uint64set

    作者:张富春(ahfuzhang),转载时请注明作者和引用链接,谢谢! cnblogs博客 zhihu 公众号:一本正经的瞎扯 正文 VictoriaMetrics中使用uint64类型来表示一个Me ...

  8. (数据科学学习手札157)pandas新增case_when方法

    本文示例代码已上传至我的Github仓库https://github.com/CNFeffery/DataScienceStudyNotes 1 简介 大家好我是费老师,pandas在前不久更新的2. ...

  9. go中bytes.Buffer使用小结

    buffer 前言 例子 了解下bytes.buffer 如何创建bytes.buffer bytes.buffer的数据写入 写入string 写入[]byte 写入byte 写入rune 从文件写 ...

  10. 深入探索OCR技术:前沿算法与工业级部署方案揭秘

    深入探索OCR技术:前沿算法与工业级部署方案揭秘 注:以上图片来自网络 1. OCR技术背景 1.1 OCR技术的应用场景 OCR是什么 OCR(Optical Character Recogniti ...