HAProxy+Nginx 负载均衡
一、什么是HAProxy
HAProxy提供高可用性、负载均衡以及基于TCP和HTTP应用的代理,支持虚拟主机,它是免费、快速并且可靠的一种解决方案。HAProxy特别适用于那些负载特大的web站点,这些站点通常又需要会话保持或七层处理。HAProxy运行在当前的硬件上,完全可以支持数以万计的并发连接。并且它的运行模式使得它可以很简单安全的整合进您当前的架构中, 同时可以保护你的web服务器不被暴露到网络上。
HAProxy实现了一种事件驱动, 单一进程模型,此模型支持非常大的并发连接数。多进程或多线程模型受内存限制 、系统调度器限制以及无处不在的锁限制,很少能处理数千并发连接。事件驱动模型因为在有更好的资源和时间管理的用户空间(User-Space) 实现所有这些任务,所以没有这些问题。此模型的弊端是,在多核系统上,这些程序通常扩展性较差。这就是为什么他们必须进行优化以 使每个CPU时间片(Cycle)做更多的工作。
二、安装HAProxy
wget http://www.haproxy.org/download/1.5/src/haproxy-1.5.14.tar.gz (在墙外)。
tar zxvf haproxy-1.5.14.tar.gz
uname -a # 查看linux内核版本
make TARGET=linux26 PREFIX=/usr/local/haproxy
make install PREFIX=/usr/local/haproxy
启动 haproxy [root@localhost sbin]# haproxy -f /etc/haproxy/haproxy.cfg
- 配置文件
/etc/haproxy.cfg
, haproxy的配置文件内容很多很灵活,以下只配置简单的一些内容。
global
log 127.0.0.1 local0
log 127.0.0.1 local1 notice
#log loghost local0 info
maxconn 4096
chroot /var/haproxy
uid 99
gid 99
daemon
nbproc 1
#debug
#quiet
defaults
log global
mode http
option httplog
option dontlognull
retries 3
option redispatch # 自动重定向到健康机器
maxconn 2000
timeout check 2000ms # 检查超时
timeout connect 5000ms # 连接超时
timeout client 50000ms # 客户端连接超时
timeout server 50000ms # 服务端连接超时
listen webinfo :1080
mode http
balance roundrobin
stats uri /ha_status
option httpclose
option forwardfor
server web1 192.168.163.34:80 check weight 1 minconn 1 maxconn 3 check inter 40000
server web2 192.168.163.35:80 check weight 1 minconn 1 maxconn 3 check inter 40000
#配置控制台
listen stats :6553
mode http
transparent
stats uri / haproxy-stats
stats realm Haproxy \ statistic
stats auth admin:admin
三、测试
这里共有3台机器,IP分别是192.168.163.33,192.168.163.34,192.168.163.35 。
33这台机器装的是haproxy,34和35两台机器装的是nginx。
nginx的安装参考前一篇nginx安装
- 192.168.163.34:80测试
- 192.168.163.35:80测试
- 请求过来被轮询分配到webinfo组的web1和web2,分别是
web1 192.168.163.34:80
web2 192.168.163.35:80
- 环境准备好了,测试192.168.163.33,将会轮训到2台机器如下:
paproxy的控制台,参考haproxy.cfg里面的配置
http://192.168.163.33:6553/haproxy-stats
- 在ip为33这台机器,通过haproxy分配到2台nginx机器上,压力测试
[root@localhost ~]# ab -c 1 -n 10000 http://192.168.163.33:1080/
结果
- 在ip为33这台机器,测试ip为34的nginx机器
[root@localhost ~]# ab -c 1 -n 10000 http://192.168.163.34:80/index.html
结果
- 通过上面的是测试可见通过haproxy分流之后效率降低了。不如单台nginx。参考
现在HAProxy的算法也非常多,并不比专业的F5/LVS算法少,常用的算法有如下8种:
balance roundrobin,表示简单的轮询,建议关注;
balance static-rr,表示根据权重,建议关注;
balance leastconn,表示最少连接者先处理,建议关注;
balance source,表示根据请求源IP,跟Nginx的ip_hash算法相似,建议关注;
balance uri,表示根据请求的URI;
balance url_param,表示根据请求的URl参数;
balance hdr(name),表示根据HTTP请求头来锁定每一次HTTP请求;
balance rdp-cookie(name),表示根据据cookie(name)来锁定并哈希每一次TCP请求。
参考文章
http://blog.haohtml.com/archives/7959
http://www.open-open.com/lib/view/open1388290883344.html
https://tyr.so/haproxy.html
http://www.haproxy.org
HAProxy+Nginx 负载均衡的更多相关文章
- 对比Haproxy和Nginx负载均衡效果
为了对比Hproxy和Nginx负载均衡的效果,分别在测试机上(以下实验都是在单机上测试的,即负载机器和后端机器都在一台机器上)做了这两个负载均衡环境,并各自抓包分析.下面说下这两种负载均衡环境下抓包 ...
- Haproxy和Nginx负载均衡测试效果对比记录
为了对比Hproxy和Nginx负载均衡的效果,分别在测试机上(以下实验都是在单机上测试的,即负载机器和后端机器都在一台机器上)做了这两个负载均衡环境,并各自抓包分析.下面说下这两种负载均衡环境下抓包 ...
- Nginx,Haproxy/lvs负载均衡的优缺点分析
PS:Nginx/LVS/HAProxy是目前使用最广泛的三种负载均衡软件,本人都在多个项目中实施过,参考了一些资料,结合自己的一些使用经验,总结一下. 一般对负载均衡的使用是随着网站规模的提升根据不 ...
- 基于 Haproxy 构建负载均衡集群
1.HAPROXY简介 HAProxy提供高可用性.负载均衡以及基于TCP和HTTP应用的代理,支持虚拟主机,它是免费.快速并且可靠的一种负载均衡解决方案.HAProxy特别适用于那些负载特大的web ...
- 利用Docker快速创建Nginx负载均衡节点
本文版权归博客园和作者吴双本人共同所有 转载和爬虫请注明原文地址 www.cnblogs.com/tdws 一.Self-Host Kestrel 1. 在vs2017中新建dotnet core2. ...
- 实现基于Haproxy+Keepalived负载均衡高可用架构
1.项目介绍: 上上期我们实现了keepalived主从高可用集群网站架构,随着公司业务的发展,公司负载均衡服务已经实现四层负载均衡,但业务的复杂程度提升,公司要求把mobile手机站点作为单独的服务 ...
- 05.haproxy+mysql负载均衡 整合 redis集群+ssm
本篇重点讲解haproxy+mysql负载均衡,搭建完成后与之前搭建的redis+ssm进行整合 (注:这里用到了两台mysql数据库,分别安装两台虚拟机上,已经成功实现主主复制,如果有需要,请查看我 ...
- Haproxy+Keepalived负载均衡
Haproxy介绍 HAProxy是一个特别适用于高可用性环境的TCP/HTTP开源的反向代理和负载均衡软件.在7层负载均衡方面的功能很强大(支持cookie track, header rewrit ...
- Nginx负载均衡的4种方式 :轮询-Round Robin 、Ip地址-ip_hash、最少连接-least_conn、加权-weight=n
这里对负载均衡概念和nginx负载均衡实现方式做一个总结: 先说一下负载均衡的概念: Load Balance负载均衡是用于解决一台机器(一个进程)无法解决所有请求而产生的一种算法. 我们知道单台服务 ...
随机推荐
- textarea自适应高度,div模仿textarea可编辑实现自适应高度,placeholder使用图标
1.textarea自适应高度,placeholder使用图标 自适应高度,有很多种办法: 1)jq: $("textarea").on("input",fun ...
- Varnish的vcl子程序
Varnish的VCL子程序 以下内容参考: http://book.varnish-software.com/4.0/ VCL子进程,在其中定制Varnish的行为.VCL子例程可用于:添加自定义标 ...
- ios 继承关系图
- Java面试经
最近趁有空整理下面试经常会被问到的知识点,参考的资料都是本人通过百度而挑选出来的,具有一定的参考意义. 一 .java基础1.String和StringBuffer.StringBuild的区别:ht ...
- python装饰器实现对异常代码出现进行监控
异常,不应该存在,但是我们有时候会遇到这样的情况,比如我们监控服务器的时候,每一秒去采集一次信息,那么有一秒没有采集到我们想要的信息,但是下一秒采集到了, 而后每次的采集都能采集到,就那么一次采集不到 ...
- char,varchar,nvarchar,text区别与联系
CHAR,NCHAR 定长,速度快,占空间大,需处理VARCHAR,NVARCHAR,TEXT 不定长,空间小,速度慢,无需处理NCHAR.NVARCHAR.NTEXT处理Unicode码
- linu_nginx_location语法
location的作用是什么? 每个server中都需要配置location,通过location匹配域名后内容,再通过location响应同一个域名下不同请求 location语法 location ...
- C语言学习之递归
学习C语言到递归时,还记得那个用来抛砖引玉的例子: "从前呀,有座山,山里有个老和尚给一个小和尚讲故事,讲的什么故事呢?从前呀,有座山,山里有个老和尚给一个小和尚讲故事,讲的什么故事呢?从前 ...
- SSMS 2005 连接 SQL SERVER 2008问题
用本机的 Microsoft SQL Server Management Studio 2005 客户端连接数据库服务器时报错:"This version of Microsoft SQL ...
- 邪恶的PLS
今天碰到一个存储过程编译错误,提示PLS-00103错误,关于这个错误网上能搜到一大把,原因很多,我碰到的错误提示如下: Compilation errors for PROCEDURE ETL.PR ...