为了对比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做为前端负载均衡的话,只要并发撑得住,后端切掉几台不会影响到用户。

Haproxy和Nginx负载均衡测试效果对比记录的更多相关文章

  1. 对比Haproxy和Nginx负载均衡效果

    为了对比Hproxy和Nginx负载均衡的效果,分别在测试机上(以下实验都是在单机上测试的,即负载机器和后端机器都在一台机器上)做了这两个负载均衡环境,并各自抓包分析.下面说下这两种负载均衡环境下抓包 ...

  2. lvs、haproxy、nginx 负载均衡的比较分析

    lvs和nginx都可以用作多机负载的方案,它们各有优缺,在生产环境中需要好好分析实际情况并加以利用. 首先提醒,做技术切不可人云亦云,我云即你云:同时也不可太趋向保守,过于相信旧有方式而等别人来帮你 ...

  3. lvs、haproxy、nginx 负载均衡的比较分析(转)

    原文:http://blog.csdn.net/gzh0222/article/details/8540604 对软件实现负载均衡的几个软件,小D详细看了一下,从性能和稳定上还是LVS最牛,基本达到了 ...

  4. haproxy和nginx负载均衡分析

    https://my.oschina.net/zhuangweihong/blog/813231

  5. day10 nfs服务,nginx负载均衡,定时任务

    ==================nginx 负载均衡==================== 实现nginx负载均衡的效果,并运用nfs服务共享目录,使所有nginx服务拥有共同的http目录 n ...

  6. octavia的实现与分析(一)·openstack负载均衡的现状与发展以及lvs,Nginx,Haproxy三种负载均衡机制的基本架构和对比

    [负载均衡] 大量用户发起请求的情况下,服务器负载过高,导致部分请求无法被响应或者及时响应. 负载均衡根据一定的算法将请求分发到不同的后端,保证所有的请求都可以被正常的下发并返回. [主流实现-LVS ...

  7. openstack octavia的实现与分析(一)openstack负载均衡的现状与发展以及lvs,Nginx,Haproxy三种负载均衡机制的基本架构和对比

    [负载均衡] 大量用户发起请求的情况下,服务器负载过高,导致部分请求无法被响应或者及时响应. 负载均衡根据一定的算法将请求分发到不同的后端,保证所有的请求都可以被正常的下发并返回. [主流实现-LVS ...

  8. [例子] nginx负载均衡搭建及测试

    一.Nginx + Tomcat 负载均衡测试(负载均衡+部分静态图片处理) 环境说明:  nginx+tomcat @ubuntu ok 首先你得有一个Ubuntu或者什么其他的linux. 安装j ...

  9. nginx负载均衡 理解与测试

    Nginx负载均衡概述 Web服务器,直接面向用户,往往要承载大量并发请求,单台服务器难以负荷,我使用多台WEB服务器组成集群,前端使用Nginx负载均衡,将请求分散的打到我们的后端服务器集群中,实现 ...

随机推荐

  1. windows 自动贴边

    设置windows 自动贴边(窗口拖到显示器边框就自动适应屏幕): https://jingyan.baidu.com/article/d2b1d1029d17b95c7e37d4f0.html 资源 ...

  2. Python & 机器学习之项目实践

    机器学习是一项经验技能,经验越多越好.在项目建立的过程中,实践是掌握机器学习的最佳手段.在实践过程中,通过实际操作加深对分类和回归问题的每一个步骤的理解,达到学习机器学习的目的. 预测模型项目模板不能 ...

  3. Windows批处理 -- 打造MySQLCleaner

    批处理打造MySQLCleaner 1. 简介       在我们卸载MySQL数据库的时候,往往除了需要卸载软件,还需要删除各种注册表信息,隐藏文件,卸载服务,否则当我们再次安装MySQL时就会出现 ...

  4. win10系统如何关掉系统自动更新

    越来越多的电脑使用者都在使用Windows10系统,尽管系统是一代代更新的,但难免有槽点,Windows10系统也不例外,最大的槽点就是“自动更新”的功能.当然,“自动更新”的功能也是相当有用处的.  ...

  5. 使用sstream来进行类型转换

    在某种情况下,我们不得不进行整型等数据类型与字符串类型的转换,比如,将“1234”转换为整数,常规的我们可以使用atoi函数来进行转换,或者是写一个循环来做转换,我们在这里也可以使用sstream类来 ...

  6. January 22nd, 2018 Week 04th Monday

    It is only when you are pursued that you become swift. 唯有在被追赶的时候,你才能真正地奔跑. It is so bad a feeling wh ...

  7. 三叔学FPGA系列之二:Cyclone V中的POR、配置、初始化,以及复位

    对于FPGA内部的复位,之前一直比较迷,这两天仔细研究官方数据手册,解开了心中的诸多疑惑,感觉自己又进步了呢..... 原创不易,转载请转原文,注明出处,谢谢.   一.关于POR(Power-On ...

  8. OPENSTACK在RHEL7安装;admin创建虚拟机模板供demo使用

    版权声明:本文为博主原创文章,未经博主同意不得转载. https://blog.csdn.net/u010026901/article/details/30965601 首先RHEL7安装.导入镜像, ...

  9. darknet优化经验-AlexeyAB大神经验

    目录 darknet优化经验 1. AlexeyAB改进项 2. Linux下编译选项 3. 训练经验 4. 提升检测效果 5. 总结 6. AlexeyAB大神改进 darknet优化经验 主要来自 ...

  10. 转载 SpringMVC详解(一)------入门实例

    目录 1.什么是 SpringMVC ? 2.创建 web 工程,并导入相应的 jar 包. 3.新建 SpringMVC 全局配置文件 4.在 web.xml 文件中配置前端过滤器 5.编写处理器  ...