Haproxy和Nginx负载均衡测试效果对比记录
为了对比Hproxy和Nginx负载均衡的效果,分别在测试机上(以下实验都是在单机上测试的,即负载机器和后端机器都在一台机器上)做了这两个负载均衡环境,并各自抓包分析。 下面说下这两种负载均衡环境下抓包分析后的结果:
1)Haproxy负载均衡环境下的实验记录。后端有一台机器挂掉后,如果还没达到探测的时间点时,请求还会往挂掉的这台机器转发,请求会丢失。 Haproxy负载均衡的实验记录如下: 1--先看下Haproxy的配置。 配置inter 20000为20s检测一次,这个是为了更明显的抓下HAProxy的负载均衡探测机制。 [root@wangshibo ~]# cat /usr/local/haproxy/conf/haproxy.cfg
........
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的配置 [root@wangshibo ~]# cat /usr/local/nginx/conf/vhost/test.conf
server {
listen 90;
listen 91;
location /{
root /var/www/html;
}
}
先在/var/www/html里创建一个首页index.html文件 [root@wangshibo ~]# echo "this is test" > /var/www/html/index.html 然后测试访问,并在机器上开两个窗口看下抓包是否均衡正常,两个窗口运行的命令分别如下: [root@wangshibo ~]# curl 127.0.0.1:9090 [root@wangshibo ~]# tcpdump -i lo -nn 'port 90' [root@wangshibo ~]# tcpdump -i lo -nn 'port 91'
上面抓包的截图证明Nginx监听的90和91端口都有在监听。使用抓包来检测比看日志来更细点,所以还是用抓包来分析了。
3--抓包查看HAProxy的健康检测机制 因为前面haproxy里配置了inter 20000,也就是告诉HAProxy 20s检测一次,抓包查看也是20s检查一下。 注意:这个检测是在客户端无任务请求的时候进行探测的,也就是处理请求跟探测是分开的。
4--模拟线上故障,Nginx挂掉91端口 把listen 91这个Nginx的配置去除,然后reload nginx,会发现前端的请求如果分发到91端口的话,就会挂掉,经抓包发现HAProxy需要探测三次才会把故障的给切下线。我们配置的是20s探测一次,也是最长可能得探测60s才能把故障的切除掉。如果这60s内有1w请求的话,那就会丢掉5k个。如果用在线上的话,探测机制肯定不会是20s一次,一般最多3s会切换掉。
2)Nginx负载均衡环境下的实验记录
1--Nginx的反向代理负载均衡配置,如下: [root@wangshibo ~]# cat /usr/local/nginx/conf/vhost/LB.conf
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;
}
server {
listen 9090;
location / {
proxy_pass http://backend;
}
}
前端还是使用9090来监听,把请求转发到90和91端口。 2--后端Nginx配置如下。可在/var/www/html/建个index.html进行测试 [root@wangshibo ~]# cat /usr/local/nginx/conf/vhost/test.conf
server {
listen 90;
listen 91;
location /{
root /var/www/html;
}
}
在/var/www/html里创建一个首页index.html文件 [root@wangshibo ~]# echo "this is test2" > /var/www/html/index.html
3--抓包查看Nginx反向代理负载均衡的健康检测机制。抓包同样会发生90和91的包都有过来。 抓包会发现Nginx在没有请求的时候,90和91端口上没有任务的请求。也就是在没有请求的时候,是不会对后端的代理服务器进行检测的。
4--模拟线上故障,Nginx挂掉91端口 把listen 91这个Nginx的配置去除,然后reload一下,发现前端的访问没有任务影响。抓包如下,请求有打包91,但由于91没请求到数据。Nginx的均衡还会再次去90上取数据。也就是说,Nginx如果后端挂掉91端口的话,对前端的请求没有任务影响,只要并发支撑得住的话。
由上面的实验可知: 1)HAProxy对于后端服务器一直在做健康检测(就算请求没过来的时候也会做健康检查): 后端机器故障发生在请求还没到来的时候,haproxy会将这台故障机切掉,但如果后端机器故障发生在请求到达期间,那么前端访问会有异常。也就是说HAProxy会把请求转到后端的这台故障机上,并经过多次探测后才会把这台机器切掉,并把请求发给其他正常的后端机,这势必会造成一小段时间内前端访问失败。 2)Nginx对于后端的服务器没有一直在做健康检测: 后端机器发生故障,在请求过来的时候,分发还是会正常进行分发,只是请求不到数据的时候,它会再转向好的后端机器进行请求,直到请求正常为止。也就是说Nginx请求转到后端一台不成功的机器的话,还会再转向另外一台服务器,这对前端访问没有什么影响。 3)因此,如果有用HAProxy做为前端负载均衡的话 ,如果后端服务器要维护,在高并发的情况,肯定是会影响用户的。但如果是Nginx做为前端负载均衡的话,只要并发撑得住,后端切掉几台不会影响到用户。
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- IntelliJ IDEA 2020.2重磅发布!全面支持Github PR。真香版本?
- 腾讯云智能语音小程序插件实现实时语音识别
- 我还在生产玩 JDK7,JDK 15 却要来了!|新特性尝鲜
- 36个助你成为专家需要掌握的JavaScript概念
- Bulehero 蠕虫病毒安全分析报告
- 一句话加速grep近30倍
- 正道的光!这有个用TensorFlow做的小黄图过滤器
- Bytom侧链Vapor源码浅析-节点出块过程
- Logstash: 启动监控及集中管理
- 渗透测试中文件上传技巧
- PHP常见过WAF webshell及最简单检测方法
- 基于PhantomJS的动态爬虫引擎
- XSS Cheat Sheet
- 免费代理池的实现与优化
- 基于Django和clean-blog前端框架的博客系统