负载均衡压力测试的方法
四层负载均衡采用开源软件LVS(Linux Virtual Server)结合Keepalived的方式实现负载均衡,七层负载均衡由Tengine实现负载均衡。
压力测试建议
在进行压力测试时,配置建议如下:
- 压测负载均衡转发能力建议使用短连接。
一般来说压测除了验证会话保持和均衡性等功能外,主要是验证负载均衡的转发能力,因此使用短连接比较合适,用于测试负载均衡和后端服务器的处理能力。使用短连接测试时,需要注意客户端端口不足的问题。
- 压测负载均衡吞吐量建议使用长连接,用于测试带宽上限或特殊业务。
压测工具的超时时间建议设置为一个较小值,如5秒。超时时间太大的话,测试结果会体现在平均响应时间加长,不利于判断压测水位是否已到达。超时时间调小,测试结果会体现在成功率上,便于快速判断压测水位。
- 后端服务器提供一个静态网页用于压测,以避免应用逻辑带来的损耗。
- 压测时,监听配置建议如下:
- 不开启会话保持功能,否则压力会集中在个别后端服务器。
- 关闭健康检查功能,减少健康检查对后端服务器的访问请求。
- 性能测试服务的5000并发规格能够提供5个及5个以上的公网IP。
压力测试工具建议
不建议您使用Apache ab作为压力测试工具:Apache ab在大量并发场景下存在3s、6s、9s阶梯式停顿的现象。Apache ab会通过判断content length来确定请求是否成功,而负载均衡挂载多台后端服务器时,返回的content length会不一致,导致测试结果有误。
可能导致压测性能低的原因
四层监听经过LVS后直接到达后端服务器;七层监听经过LVS后,还需要经过Tengine才到达后端服务器。
如果您使用七层监听进行压力测试,发现压测性能比较低。可能是以下原因造成的:
- 客户端端口不足。
在进行压力测试时,客户端端口不足会导致建立连接失败。负载均衡会默认抹除TCP连接的timestamp属性,Linux协议栈的tw_reuse(time_wait 状态连接复用)无法生效,time_wait状态连接堆积导致客户端端口不足。
解决方法:客户端使用长连接代替短连接。使用RST报文断开连接,即socket设置SO_LINGER属性。
- 后端服务器accept队列满。
后端服务器accept队列满,导致后端服务器不回复syn_ack报文,客户端超时。
解决方法:默认net.core.somaxconn的值为128,执行
sysctl -w net.core.somaxconn=1024
命令更改net.core.somaxconn的值,并重启后端服务器上的应用。 - 后端服务器连接过多。
由于架构设计的原因,使用七层负载均衡时,用户长连接经过Tengine后变成短连接,可能导致后端服务器连接过多,从而表现为压测性能低。
- 后端服务器依赖的应用成为瓶颈。
请求经过负载均衡到达后端服务器后,后端服务器本身负载正常,但由于所有的后端服务器上的应用又依赖其它应用,例如数据库,当数据库成为瓶颈时,也会引起性能降低。
- 后端服务器的健康检查状态异常。
在压测时,容易忽略后端服务器的健康检查状态,如果有后端服务器健康检查失败或者健康检查状态经常跳跃(好到坏,又从坏到好,反复变化),也会导致压测性能低。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· 三行代码完成国际化适配,妙~啊~
· .NET Core 中如何实现缓存的预热?
· 如何调用 DeepSeek 的自然语言处理 API 接口并集成到在线客服系统