CLB 如何均衡客户端流量--长连接篇
1. 背景概述
上一篇文章(CLB是怎么均衡client流量的-短连接篇),测试验证了CLB与RS之间是短连接时,CLB是按照客户端的每个HTTP请求来均衡,无论client与CLB是长连接还是短连接。
那CLB和后端RS之间是长连接时,CLB如何均衡client流量呢?这片文章我们重点实验下这一点。
2. CLB与RS长连接实验环境
本次实验的配置环境与之前的一样,避免新看文章的读者不了解,这里再陈述一次:
一台CLB下面挂两个Nginx,CLB和Nginx间开启长连接,两台Nginx静态页,一台返回0,一台返回1,通过并发访问Nginx静态页来模拟业务场景。看看会不会有不均的情况
CLB与Nginx开启长连接见第三部分
具体配置内容比较简单,这里略掉
3. 启用CLB与RS间长连接
3.1 启用
1、打开CLB界面,点击新建监听器
2、在打开页面,将 启用长连接 开关打开
3、在CLB安全组界面,启用默认放通
3.2 验证
从CLB官网文档了解到:CLB与后端服务之间使用长连接,CLB不再透传源IP,请从XFF中获取源IP。可以基于此规则,来判断长连接是否已开启
Nginx access.log配置文件如下:
log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';
access.log内容如下:
从日志可以看出,remote_addr是100.127.X.X,对应CLB网段;http_x_forwarded_for是180.153.X.X,对应我本机IP,符合官网说明。证明长连接已开启。
文档地址:负载均衡 七层个性化配置-操作指南-文档中心-腾讯云
4. 均衡验证
5.1 小规模验证
在浏览器,直接访问CLB的IP地址,看看返回情况。如果每次刷新,返回值都对应不同的nginx,证明是按请求轮询的。
5.1.1 浏览器和CLB是长连接
5.1.2 浏览器返回0
5.1.3 浏览器返回1
浏览器与CLB是长连接,每刷新一次,浏览器的结果都在0和1间轮番出现;说明尽管CLB和RS间启用了长连接,CLB还是按HTTP请求进行负载均衡。
5.2 大规模验证
通过腾讯云的PTS压测工具,模拟客户的真实流量,通过nginx-export观测nginx连接数
5.2.1 PTS压测结果
平均响应时间从短连接的9.57ms降到8.24s了 ,说明启用长连接对降低链路消耗,有一定优势。
5.2.2 Nginx exporter监控
处理连接数和总请求数两个指标,两台机器结果一致,说明在CLB和RS是长连接情况下,负载也是均衡的。
5. 测试结果
从上面测试可以得出结论,在CLB与RS间是长连接时,CLB也不会考虑client与CLB是长连接还是短连接,直接按照总的HTTP请求的数量,并根据配置的负载均衡算法处理。本文用的负载均衡算法时RR,所以看到两台设备的请求几乎一样。
另外,启用了长连接后,由于CLB不用每次HTTP请求都会和RS建连,理论上链路消耗时间会缩短。从pts的压测结果也能看到这一点。
在实际场景下,客户端相当分散,在按HTTP请求均衡下,可以预期Nginx的负载是均衡的。
我正在参与2023腾讯技术创作特训营第二期有奖征文,瓜分万元奖池和键盘手表
上一篇: ARM STM32 各种缩写和全名