解决Haproxy误报"backend xxx_server has no server available!"

把Haproxy用在生产环境后,经常会遇到Haproxy误报"backend xxx_server has no server available!"的消息,而实际上,xxx_server是正常运行的。

最近误报越来越多,已经严重影响服务器的使用,之前几个月间或google了一些资料,都没有坚决这个问题。于是决定腾出时间从Haproxy的源码找原因。

仔细在Haproxy的源码里找了找,发现是tcp连接返回的错误导致误报。于是在一台测试服务器上重新部署了一个Haproxy准备调试具体的tcp错误信息。

有趣的是,新部署的测试Haproxy居然一切正常,没有误报。

对比了一下两台服务器,网络参数方面主要就是生产环境的内核TCP参数做过优化,而测试环境是系统默认的。

生产环境之前在/etc/sysctl.conf 文件中做了如下优化:

kernel.shmall = 268435456
net.ipv4.tcp_syncookies = 1
net.ipv4.tcp_tw_reuse = 1
net.ipv4.tcp_tw_recycle = 1
net.ipv4.tcp_fin_timeout = 30
net.ipv4.tcp_keepalive_time = 1200
net.ipv4.ip_local_port_range = 1024 65000
net.ipv4.tcp_max_tw_buckets = 5000
net.ipv4.tcp_max_tw_buckets = 5000
net.ipv4.tcp_fin_timeout = 30
net.ipv4.tcp_keepalive_time = 300
net.ipv4.tcp_syncookies = 1
net.ipv4.tcp_tw_reuse = 1
net.ipv4.tcp_tw_recycle = 1
net.ipv4.ip_local_port_range = 5000 65000
net.ipv4.tcp_mem = 786432 1048576 1572864
net.core.wmem_max = 873200
net.core.rmem_max = 873200
net.ipv4.tcp_wmem = 8192 436600 873200
net.ipv4.tcp_rmem = 32768 436600 873200
net.core.somaxconn = 256
net.core.netdev_max_backlog = 1000
net.ipv4.tcp_max_syn_backlog = 2048
net.ipv4.tcp_retries2 = 5
net.ipv4.tcp_keepalive_time = 500
net.ipv4.tcp_keepalive_intvl = 30
net.ipv4.tcp_keepalive_probes = 3
net.ipv4.conf.lo.arp_ignore = 0
net.ipv4.conf.lo.arp_announce = 0
net.ipv4.conf.all.arp_ignore = 0
net.ipv4.conf.all.arp_announce = 0

看来这个是导致Haproxy在做健康检查时误报的原因,于是去掉上面的配置,重启生产环境的服务器,一切正常了。

时间: 2024-07-31 07:17:27

解决Haproxy误报"backend xxx_server has no server available!"的相关文章

解决JavaWeb项目报错:The origin server did not find a current representation for the target resource or is not willing to disclose that one exists.

明明有项目和文件,而且别的项目都可以运行,偏偏这个不能用,报错The origin server did not find a current representation for the target resource or is not willing to disclose that one exists.,开始很紧张,现在说下我的解决办法. 找到Services工具栏 然后右击这个Tomcat v9.0 Server at localhost 选择Add and Remove 重新rem

Myeclipse中误报错误解决办法

下午写jsp页面的时候,用了一个js文件,拖到MyEclipse下了报错,开始还以为是js文件问题,折腾了半天,后来才知道原来是Myeclipse误报错误.真坑爹啊呀~~ 解决方法: 点击你需要忽略错误的页面右键--MyEclipse--Exclude From Validation 勾选就OK. 关于在MyEclipse上WEB工程里面的JS/JSP经常会有语法错误提示,这是由于MyEclipse对其语法要求相当严格所造成的,而这些文件本身是可以运行并没有什么错误的,在你实际应用部署中并无影响

2014-10-06 让我们一起来对360误报说不!

 长期以来,360对易语言程序的误报十分严重,并且一直得不到解决.这件事情对易语言用户推广自己的软件产品带来了极大的困扰,并直接影响到了易语言本身的发展状大. 个人的力量是有限的,单凭易语言公司的力量也是有限的,现在让我们大家一起集中起来,扭成一股绳,一起来对360大声说不.告诉他,你必须要解决掉这个问题,不能再赤裸裸地非法侵犯我们的利益! 请大家按如下步骤进行: 1. 如果发现360确实误报了您的软件产品,请先到他们网站上申诉; 2. 如果申诉得不到及时处理或者被反复误报,请告诉您的软件产

易宝典文章——玩转Office 365中的Exchange Online服务 之二十七 怎样处理并释放误报隔离邮件

在Exchange Online中有众多的垃圾邮件过滤功能,其过滤的结果大致分为四类: >直接拒绝接收: >放入垃圾邮件文件夹: >主题中进行标记为垃圾邮件: >隔离对于直接拒绝接收这种情况大多会针对确切到发件人.发件域.发件服务器的IP地址来进行设置,所以很少会出现误拒的情况.而放入垃圾邮件文件夹和主题中进行标注,这些垃圾邮件实际已经到了用户的邮箱.即使出现误报,用户也可以看到邮件.只有最后一种隔离邮件,如果是将用户所需要的邮件进行了隔离,那么用户往往会申请要找回这封邮件.怎样才

解决mysqldump备份报错: Couldn't execute 'SHOW FIELDS FROM Unknown error 1356

服务器环境: [[email protected] mysql]# cat /etc/redhat-releaseCentOS Linux release 7.3.1611 (Core) [[email protected] mysql]# uname -aLinux localhost.localdomain 3.10.0-514.21.1.el7.x86_64 #1 SMP Thu May 25 17:04:51 UTC 2017 x86_64 x86_64 x86_64 GNU/Linux

Win7 64bit 安装VisualSVN出现报错:Servic 'VisualSVN Server' failed to start.解决办法

问题描述: Win7 64bit 安装VisualSVN时出现报错: Servic 'VisualSVN Server' failed to start.Please check VisualSVN Server log in Event Viewer for more details Service 'VisualSVN Server' failed to start. 解决办法: 控制面板——管理工具——服务——VisualSVN Server——鼠标右键——属性——登录——选择“本地系统账

解决JVM启动报错:Unrecognized VM option '+HeapDumpOnOutOfMemeryError'

今天再搞一些OutOfMemery的相关知识探索,我想在JVM遇到OOM错误的时候,能够打印出heap dump,以便事后用Eclipse Memory Analyzer Tool(MAT)等内存分析工具分析内存的占用情况.我使用了JDK1.6.0_37和JDK1.7.0_60版本进行试验,到网上找了下,知道-XX:+HeapDumpOnOutOfMemoryError可以让JVM在探测到内存OOM的时候打印dump.但是在JVM启动参数添加这个参数的时候,JVM启动失败: Unrecogniz

代码静态分析工具的误报原因分析

1. 引言 本篇文章分析了代码静态分析的基本原理以产生误报的根本原因,并介绍了形式化方法在LDRA工具套件中的应用情况.文章从实际工程应用的角度阐述了这些形式化方法的局限性,在参考文献1<Formal Methods Implemented in the LDRA Tool Suite>中我们详细描述了形式化方法是如何在LDRA工具套件中被实现的,了解到实现这些形式化方法的算法都被内化在了LDRA工具套件的静态分析组件之中,使用工具的用户不需要具备这方面的知识.在工具中所有被分析的源代码文件,

Nmap误报1720端口开放的原因

在使用Nmap扫描服务器开放端口(全连接扫描)时,一直会发现误报1720端口开放,telnet也有时会连接成功.而实际上服务器并未开启此端口.经过查阅资料,确定原因如下: H.323协议在负载中放入了重要的控制信息,例如语音和视频终端使用哪一个数据端口来接收别的终端的语音和视频数据.通过分析哪一个端口需要打开,NAT设备/防火墙动态地打开那些被应用的端口,而所有别的端口依然安全地保持关闭状态. 如果一个NAT被应用来屏蔽内部IP地址,这时ALG就需要一个代理,一些防火墙生产厂商把代理结合到ALG