haproxy负载均衡算法引发的性能波动问题

为提高效率,请提供以下信息,问题描述清晰能够更快得到解决:

【概述】:
情况1:比如有4个tidb server,连接情况如下
|tidb server ip 连接数|
|10.12.101.10 100|
|10.12.101.11 100|
|10.12.101.12 100|
|10.12.101.13 10|
这些连接都是长连接,sleep状态,此时如果大并发批处理业务进来,会自动负载10.12.101.13 上,
导致10.12.101.13 活跃并发很高,资源瓶颈,而其他tidb server节点都是sleep连接,资源使用率很低

【背景】:业务测试时发现的问题

【现象】:业务性能测试波动很大,有时相差近1倍的测试指标

【问题】:负载均衡只是按照连接数(包括sleep和活跃的)均衡了,如何按照活跃并发连接数据负载均衡?

【业务影响】:测试阶段无影响

【TiDB 版本】:
v4.0.13
【附件】:

自己顶一下,哪位大侠帮忙看看

是这个 haproxy 么 /?

这个应该没办法搞,不清楚为啥你这边这么多 sleep 呢 ?

https://docs.pingcap.com/zh/tidb/stable/haproxy-best-practices#haproxy-在-tidb-中的最佳实践

HAProxy负载均衡策略非常多,HAProxy的负载均衡算法现在具体有如下8种:
① roundrobin,表示简单的轮询,这个不多说,这个是负载均衡基本都具备的;
② static-rr,表示根据权重,建议关注;
③ leastconn,表示最少连接者先处理,建议关注;
④ source,表示根据请求源IP,这个跟Nginx的IP_hash机制类似,我们用其作为解决session问题的一种方法,建议关注;
⑤ ri,表示根据请求的URI;
⑥ rl_param,表示根据请求的URl参数’balance url_param’ requires an URL parameter name;
⑦ hdr(name),表示根据HTTP请求头来锁定每一次HTTP请求;
⑧ rdp-cookie(name),表示根据据cookie(name)来锁定并哈希每一次TCP请求。

8种策略,按照你需要的选一个?
我建议你用一下,2 权重 和 3 最少连接者优先处理

1 Like

是这个,业务上是这么多sleep的,时不时的会发一些sql

这个感觉也合理,长连接为了保持定期会发心跳,方便之后有sql过来直接使用。
感觉好像没有在leastconn 下配置参数均衡各个tidb-server 实例资源的。 这个只能按照链接数分配。试试楼上的2按照权重试试呢

之前试过了,也不行,目前情况只能按照leastconn配置了,谢谢

好的,或者可能就是只保留一个长连接 sleep。 其他的链接要新建了,感觉又失去了长连接的意义。:sweat_smile: 看看其他人是否还有好的方法吧。

可不可以从数据库级别来修改呢,这种频繁的调用适当缩短wait_timeout的参数,如果sleep时间达到阈值就kill掉

对连接池不太友好,应用层可能会出现连接池频繁创建链接,浪费资源 :ghost:

最好的办法,就是对链接数控制,只保留一个空闲长连接

嗯,对,也是,内存回收没有这么快也是个问题