四层负载均衡采用开源软件LVS(Linux Virtual Server)+ Keepalived的方式实现负载均衡,七层负载均衡由Tengine实现。 压力测试性能概述 四层监听经过LVS后直接到达后端服务器,而七层监听经过LVS后,还需要再经过Tengine,最后到达后端服务器。七层比四层多了一个处理环节,因此,七层性能没有四层性能好。 如果您使用七层监听进行压力测试,发现压测性能比较低。挂了两台ECS的七层负载均衡监听性能还不如挂了一台ECS的四层负载均衡监听性能,除了七层本身的性能比四层低外,以下情况也可能会造成七层压测性能低: 客户端端口不足 。 在进行压力测试时,客户端端口不足会导致建立连接失败。负载均衡会默认抹除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后变成短连接,可能导致后端服务器连接过多,从而表现为压测性能低。 后端服务器依赖的应用成为瓶颈。 请求经过负载均衡到达后端服务器后,后端服务器本身负载正常,但由于所有的后端服务器上的应用又依赖其它应用,例如数据库,当数据库成为瓶颈时,也会引起性能降低。 后端服务器的健康检查状态异常。 在压测时,容易忽略后端服务器的健康检查状态,如果有后端服务器健康检查失败或者健康检查状态经常跳跃(好到坏,又从坏到好,反复变化),也会导致压测性能低。 压力测试建议 在进行压力测试时,请注意如下配置: 压测负载均衡转发能力建议使用短连接 。 一般来说压测除了验证会话保持和均衡性等功能外,主要想验证负载均衡的转发能力,因此使用短连接比较合适,用于测试负载均衡和后端服务器的处理能力。使用短连接测试时,需要注意客户端端口不足的问题。 压测负载均衡吞吐量建议使用长连接,用于测试带宽上限或特殊业务。 压测工具的超时时间建议设置为一个较小值,如5秒。超时时间太大的话,测试结果会体现在平均响应时间加长,不利于判断压测水位是否已到达。超时时间调小,测试结果会体现在成功率上,便于快速判断压测水位。 后端服务器提供一个静态网页用于压测,以避免应用逻辑带来的损耗。 压测时,监听配置建议如下: 不开启会话保持功能,否则压力会集中在个别后端服务器。 关闭健康检查功能,减少健康检查对后端服务器的访问请求。 性能测试服务的5000并发规格能够提供5个及5个以上的公网IP。 压力测试工具建议 不建议您使用Apache ab作为压力测试工具。 Apache ab在大量并发场景下存在3s、6s、9s阶梯式停顿的现象。Apache ab会通过判断content length来确定请求是否成功,而负载均衡挂载多台后端服务器时,返回的content length会不一致,导致测试结果有误。 建议使用阿里云PTS。 可以设置足够高的并发,PTS会分配来自全国各地的公网IP,压力来源足够分散,并且可以在PTS中集成云监控,实时查看端到端的全部性能数据。 使用PTS简单压测示例 创建一个负载均实例,添加两台ECS实例作为后端服务器,分别创建一个TCP监听和HTTP监听,后端端口设置为80。ECS服务器的配置为CPU 1核,内存512M使用CentOS 6.3 64位的操作系统。 安装Apache Web Server提供Web服务。
yum install -y httpd 初始化默认首页index.html。
echo "testvm" > /var/www/html/index.html 启动HTTP服务。
service httpd start 访问本地的80端口,确认Web服务可用。
curl localhost 在PTS中创建测试场景,开始压力测试。
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。