现象2:查看haproxy日志会有部分显示端口耗尽
Jan 9 14:59:04 127.0.0.1 haproxy[37]: Connect() failed for backend ha-proxy: no free ports.
Jan 9 14:59:04 127.0.0.1 haproxy[38]: Connect() failed for backend ha-proxy: no free ports.
Jan 9 14:59:04 127.0.0.1 haproxy[38]: Connect() failed for backend ha-proxy: no free ports.
Jan 9 14:59:04 127.0.0.1 haproxy[38]: Connect() failed for backend ha-proxy: no free ports.
Jan 9 14:59:04 127.0.0.1 haproxy[38]: Connect() failed for backend ha-proxy: no free ports.
Jan 9 14:59:04 127.0.0.1 haproxy[35]: Connect() failed for backend ha-proxy: no free ports.
现象3:mysql连接偶尔报错
ERROR 2013 (HY000): Lost connection to MySQL server at 'reading initial communication packet', system error: 0
ERROR 2013 (HY000): Lost connection to MySQL server at 'reading initial communication packet', system error: 0
ERROR 2013 (HY000): Lost connection to MySQL server at 'reading initial communication packet', system error: 0
ERROR 2013 (HY000): Lost connection to MySQL server at 'reading initial communication packet', system error: 0
现象4:登录mysql以后show processlist会存在部分unauthenticated user,reading from net
短时间内大量的短连接导致haproxy端口耗尽,通过查看cat /proc/sys/net/ipv4/ip_local_port_range 的数值可得知当前可使用的端口范围,我这里默认是32768到61000;即使将其调整到1024到65535,在大量短连接情况下效果也是很有限的,因为处于time_wait状态的端口没法复用。
为何会出现大量的time_wait:因为tcp连接断开时,主动发起tcp的一方会处于time_wait,而这个持续时间由内核参数/proc/sys/net/ipv4/tcp_fin_timeout控制,我这里是60s,也就是说,我的可用端口数量是65535-1024=28232,那我平均每秒的新建连接数超过28232/60=470时就必然会出现端口耗尽的情况;假如我只调整端口范围的话,那我平均每秒的新建连接数(65535-1024)/60=1075时也会出现端口耗尽的情况,提升空间不是很大
如何查看haproxy的每秒新建连接数:有两种方法,第一种是简单地过滤某一秒的haproxy的日志行数,每新建一个连接,haproxy日志都会加一行记录;另外一种方法是使用socat打印当前haproxy的各种信息(haproxy开了多进程模式以后貌似不准),下面的信息就显示当前每秒新建连接337个,进程启动以后历史最大为1172个
echo "show info"| socat stdio /opt/udb/instance/haproxy/35d96a08-c230-4a32-9de5-5fe6b80eff46/stats |grep -i conn
Maxconn: 6000
Hard_maxconn: 6000
CurrConns: 170
CumConns: 1195526325
ConnRate: 337
ConnRateLimit: 0
MaxConnRate: 1172
优化方法有好几种,大概以下
1 业务层使用长连接
2 修改内核参数/proc/sys/net/ipv4/tcp_tw_reuse,将其改为1,并确保客服端和服务器端的/proc/sys/net/ipv4/tcp_timestamps也为1,这样就可以复用处于time_wait状态的端口。由于时间戳是精确到秒的,这样设置以后,haproxy能够承受的每秒最大短连接数量就是端口数量了,即
28232
3 mysql前端加memcache或者redis缓存,减少每秒打开的连接数
现象现象1:在haproxy中间件层查看netstat会有大量的time_wait,大概有几万个以上现象2:查看haproxy日志会有部分显示端口耗尽Jan 9 14:59:04 127.0.0.1 haproxy[37]: Connect() failed for backend ha-proxy: no free ports.Jan 9 14:59:04 127.0
有没有想过把22
端口
3389
端口
80
端口
一次性绑在一个
端口
上
在对外
端口
非常紧缺的时候,这种做法非常重要
haproxy
是一个传统的负载均衡软件,但是他可以实现通过协议判断来实现数据包转发的功能
比如80
端口
http的数据流就转给8080
端口
rdp数据流转给 3389 ssh数据流就转给22
端口
实现对外
端口
的复用。
本附件里面的例子就可以实现这三个
端口
的复用,好用加分。
Haproxy
是一个使用C语言编写的自由及开放源代码软件,其提供高可用性、负载均衡,以及基于TCP和HTTP的应用程序代理。大型网站,LVS的实施配置复杂,维护成本相对较高
Haproxy
是一款可提供高可用性、负载均衡、及基于TCP和HTTP应用的代理软件适用于负载大的web站点运行在硬件上可支持数以万计的并发
连接
的
连接
请求
1、可靠性和稳定性非常好,可以与硬件级的F5负载均衡设备相媲美2、最高可以同时维护40000-50000个并发
连接
,单位时间内处理的最大请求数为20000个,最大处理能力可达10Gi
优化一:开启多个
haproxy
的work process
前言:当经过
haproxy
时比不经过
haproxy
明显慢很多,说明
haproxy
的work process处理用户请求速率不够,此时可以增加
haproxy
的work process数目,以达到当用户访问增多时,
haproxy
不会成为影响性能的地方,业务场景有很大关系。
==>
haproxy
支持master-wor...
Haproxy
集群部署与优化一、常见的Web集群调度器二、
Haproxy
应用分析三、
Haproxy
调度算法原理1、RR (Round Robin)2、LC(Least Connections)3、SH(Source Hashing)四、
Haproxy
集群部署步骤
一、常见的Web集群调度器
1、目前常见的Web集群调度器分为软件和硬件
2、软件通常使用开源的LVS、
Haproxy
、 Nginx
LVS性能最好,但是搭建相对复杂;Nginx 的upstream模块支持群集功能,但是对群集节点健康检查功能不强,
近日平稳运行了将近4年的发号器突然出现问题,在元旦0分的时候出现
短
暂的性能下降,
导致
发号失败率飙高到一个不可接收的值,哎,意外总是发生在你想不到的地方。
这几天赶紧和小伙伴们赶紧追查原因,制定改造方案,下面记录一下分析和定位问题的过程,以便后期查阅,并不在同一个地方跌倒两次。
一、分析过程
现象是业务所用的uuid服务的6052
端口
出现性能下降,
导致
成功率下降。
http://blog.sina.com.cn/s/blog_704836f40101jv9h.html
此文基本是翻译aloha的一篇文档,本人实际使用情况遇到的问题类似,但不是MySQL。
[2017.01.12 增补] 1.7版的
haproxy
开启了IP_BIND_ADDRESS_NO_PORT支持
,即可以复用source port,这样可以从更基础的内核层面解决这个问题,唯一
haproxy
负载by Sachin Malhotra 由Sachin Malhotra
负载测试
HAProxy
(第2部分) (Load Testing
HAProxy
(Part 2))
This is the second part in the 3 part series on performance testing of the famous TCP load balancer an...
keepalived和
haproxy
都是用于实现高可用性的工具,但是它们的功能和应用场景有所不同。
keepalived是一个基于VRRP协议的软件,主要用于实现
服务器
的故障转移和负载均衡。它可以监控
服务器
的状态,当主
服务器
出现故障时,自动将流量转移到备份
服务器
上,从而保证服务的可用性。同时,keepalived还支持负载均衡功能,可以将流量分发到多个
服务器
上,提高系统的性能和可扩展性。
haproxy
是一个高性能的负载均衡器,可以将流量分发到多个
服务器
上,从而提高系统的性能和可扩展性。它支持多种负载均衡算法,可以根据不同的应用场景进行配置。同时,
haproxy
还支持会话保持和健康检查等功能,可以保证服务的可用性和稳定性。
总的来说,keepalived主要用于实现
服务器
的故障转移和负载均衡,而
haproxy
则是一个专业的负载均衡器,可以提供更加丰富的负载均衡功能和性能优化。在实际应用中,可以根据具体的需求选择合适的工具来实现高可用性。
故障案例:主从同步报错Fatal error: The slave I/O thread stops because master and slave have equal MySQL server
36996
月度银墙:
深入理解SELECT ... LOCK IN SHARE MODE和SELECT ... FOR UPDATE
倒过来念的是猪:
理解innodb的锁(record,gap,Next-Key lock)
Look4youZzz:
mysql binlog_do_db参数设置的坑
yeahthon:
理解innodb的锁(record,gap,Next-Key lock)
yearningk99: