网站首页 > 技术教程 正文
出于对负载均衡工具的疑问,分别对haproxy和nginx的负载均衡进行了抓包分析,分析的过程跟大家分享下。先说下对haproxy抓包得到的结论吧:haproxy在负载均衡的一台后端挂掉后,如果还没达到探测的时间点时,请求还会往挂掉的这台转发,请求会丢失。
haproxy负载均衡的实验过程如下:
1: 先看下haproxy的配置。配置inter 20000为20s检测一次,这个是为了更明显的抓下haproxy的负载均衡探测机制。
listen test9090 bind 127.0.0.1:9090 mode tcp server localhost90 127.0.0.1:90 check inter 20000 server localhost91 127.0.0.1:91 check inter 20000
2: 后端我是用nginx进行测试,看下nginx的配置如下。可在/var/www/html/建个index.html进行测试
server { listen 90; listen 91; location /{ root /var/www/html; } }
先用curl 127.0.0.1:9090进行测试,并在机器上开两个窗口看下抓包是否均衡正常,两个窗口运行的命令分别如下:tcpdump -i lo -nn 'port 90' tcpdump -i lo -nn 'port 91'看下负载均衡能否正常工作。
上面抓包的截图证明nginx监听的90和91端口都有在监听。使用抓包来检测比看日志来更细点,所以还是用抓包来分析了。
3: 抓包查看haproxy的健康检测机制
因为我们配置了inter 20000,也就是告诉haproxy20s检测一次,抓包查看也是20s检查一下。注意下,这个检测是在客户端无任务请求的时候进行探测的,也就是处理请求跟探测是分开的。
4: 模拟线上故障,nginx挂掉91端口
把listen 91这个nginx的配置去除,然后reload一下,会发现前端的请求如果分发到91端口的话,就会挂掉,经抓包发现haproxy需要探测三次才会把故障的给切下线。我们配置的是20s探测一次,也是最长可能得探测60s才能把故障的切除掉。如果这60s内有1w请求的话,那就会丢掉5k个。如果用在线上的话,探测机制肯定不会是20s一次,一般最多3s会切换掉。
nginx负载均衡的配置如下:
1: 先看下nginx的反向代理负载均衡配置,如下:
upstream backend { server 127.0.0.1:90 weight=1 max_fails=3 fail_timeout=30; server 127.0.0.1:91 weight=5 max_fails=3 fail_timeout=30; }还是把配置打向后端的90和91端口,然后后面再模拟故障的发生。 server { listen 9090; location / { proxy_pass http://backend; } }前端还是使用9090来监听,把请求转发到90和91端口。
2: 后端我还是是用nginx进行测试,看下nginx的配置如下。可在/var/www/html/建个index.html进行测试
server { listen 90; listen 91; location /{ root /var/www/html; } }抓包同样会发生90和91的包都有过来。
3: 抓包查看nginx反向代理负载均衡的健康检测机制
抓包你会发现nginx在没有请求的时候,90和91端口上没有任务的请求。也就是在没有请求的时候,是不会对后端的代理服务器进行检测的。
4: 模拟线上故障,nginx挂掉91端口
把listen 91这个nginx的配置去除,然后reload一下,发现前端的访问没有任务影响。抓包如下,请求有打包91,但由于91没请求到数据。nginx的均衡还会再次去90上取数据。也就是说,nginx如果后端挂掉91端口的话,对前端的请求没有任务影响,只要并发支撑得住的话。
综合一下:
haproxy对于后端的服务器就算请求没过来也有一直在健康检测,发现有故障的时候在请求没到来的时候会切掉,但如果在检测期间请求到达的话,会有异常。haproxy只会把请求转到后端的一台服务器。
nginx对于后端的服务器没有一直在健康检测,请求过来的时候,分发还是进行分发,只是请求不到数据的时候,会再向好的机器进行请求,直到请求正常为止。nginx请求转到后端一台不成功的话,还会转向另外一台服务器。同时我也测试了下squid,发现squid跟nginx的反向代理负载均衡很相似。
所以如果有用haproxy做为前端负载均衡的话 ,如果后端服务器要维护,在高并发的情况,肯定是会影响用户的。但如果是nginx做为前端负载均衡的话,只要并发撑得住,后端切掉几台不会影响到用户。至于两者的性能,得再继续研究。
本文地址:https://www.linuxprobe.com/haproxy-nginx.html
猜你喜欢
- 2024-10-15 Centos 7 network.service 启动失败
- 2024-10-15 nginx做负载后导致登录失败返回新的cookie原因分析
- 2024-10-05 nginx报错之413 Request Entity Too Large导致文件上传失败的问题
- 2024-10-05 Nginx系列:Nginx自带后端健康检查
- 2024-10-05 Nginx负载均衡健康检测,你了解过吗?
- 2024-10-05 Nginx负载均衡原理及应用实践(nginx负载均衡策略有哪些,它是如何实现的)
- 2024-10-05 SSL证书安装失败怎么办?看这里教你轻松解决
- 2024-10-05 「系统架构」Nginx调优之变量的使用(4)
- 2024-10-05 面试中关于Nginx的十问九答(面试中关于nginx的十问九答有哪些)
- 2024-10-05 Zabbix 5.2由浅入深之监控Nginx(监控nginx访问日志)
你 发表评论:
欢迎- 最近发表
-
- 阿里P8大佬总结的Nacos入门笔记,从安装到进阶小白也能轻松学会
- Linux环境下,Jmeter压力测试的搭建及报错解决方法
- Java 在Word中合并单元格时删除重复值
- 解压缩软件哪个好用?4款大多数人常用的软件~
- Hadoop高可用集群搭建及API调用(hadoop3高可用)
- lombok注解@Data没有toString和getter、setter问题
- Apache Felix介绍(apache fineract)
- Spring Boot官方推荐的Docker镜像编译方式-分层jar包
- Gradle 使用手册(gradle详细教程)
- 字节二面:为什么SpringBoot的 jar可以直接运行?
- 标签列表
-
- 下划线是什么 (87)
- 精美网站 (58)
- qq登录界面 (90)
- nginx 命令 (82)
- nginx .http (73)
- nginx lua (70)
- nginx 重定向 (68)
- Nginx超时 (65)
- nginx 监控 (57)
- odbc (59)
- rar密码破解工具 (62)
- annotation (71)
- 红黑树 (57)
- 智力题 (62)
- php空间申请 (61)
- 按键精灵 注册码 (69)
- 软件测试报告 (59)
- ntcreatefile (64)
- 闪动文字 (56)
- guid (66)
- abap (63)
- mpeg 2 (65)
- column (63)
- dreamweaver教程 (57)
- excel行列转换 (56)
本文暂时没有评论,来添加一个吧(●'◡'●)