Haproxy背景
- Haproxy是用c语言编写的自由开放源代码的软件,提供高可用,负载均衡,和基于tcp和http的应用程序代理
- Haproxy特别适合负载很大的web站点,这些站点通常需要会话保持或者七层处理,Haproxy运行在当前的硬件上,可以支持上万的并发请求,并且使得web服务器不会被暴露在外
常见的web集群调度器
硬件
通常使用较多的是F5,国内使用较多是梭子鱼,绿盟等
软件
通常使用开源的Haproxy,nginx,lvs
Haproxy作为高性能负载均衡器的主要有点
- Haproxy在负载均衡的速度和并发处理上优于nginx
- Haproxy支持虚拟主机,工作在4,7层
- Haproxy有会话保持,cookie引导等工作
- Haproxy支持以url的方式检测后端服务器状态
- Haproxy可以对mysql进行负载均衡
- Haproxy支持很多负载均衡算法:轮询。加权轮询,原地址保持,请求URL,根据cookie
Haproxy算法介绍
- RR(轮询):轮询调度
- LC(最小连接):根据后端节点连接数动态分配前端请求
- SH(基于访问调度算法):用于一些有会话记录在服务器端的场景
三种web集群调度器的差别
Haproxy
- 支持八种负载均衡策略
- 仅做负载均衡软件使用,在高并发情况下性能优于nginx
- 支持URL健康检查,支持会话保持
nginx
- 支持正则表达式
- 对网络稳定性要求不高
- 只支持基于端口检查
- 不支持会话保持
- 反向代理能力强
lvs
- 应用范围广泛
- 在四层做分发作用,负载均衡能力强
- 只能基于四层端口转发
Haproxy集群部署
实验环境: Haproxy服务器: Haproxy:12.0.0.8/8 nginx服务器:nginx01:12.0.0.13/8 nginx服务器:nginx02:12.0.0.10/8
部署Haproxy服务器
[root@ha ~]
[root@ha ~]
[root@ha haproxy-1.5.19]
[root@ha haproxy-1.5.19]
- 先创建一个放haproxy的配置文件的目录,然后修改内容
[root@ha haproxy-1.5.19]
[root@ha haproxy-1.5.19]
[root@ha haproxy-1.5.19]
[root@ha haproxy]
global
log /dev/log local0 info //local0为日志设备,默认存放到系统日志
log /dev/log local0 notice
maxconn 4096 //最大连接数,可以用ulimit -n限制
uid 99 //用户UID
gid 99 //用户GID
daemon //守护进程模式
defaults
log global //定义日志为global配置中的日志定义
mode http //模式是http
option httplog //采用http日志格式记录日志
option dontlognull //不记录健康检查日志信息
retries 3 //检查节点服务器失败次数,连续达到三次失败,则认为节点不可用
redispatch //当服务器负载很高时,自动结束当前队列处理比较久的连接
maxconn 2000 //最大连接数
contimeout 5000 //连接超时时间
clitimeout 50000 //客户端超时时间
srvtimeout 50000 //服务器超时时间
listen webcluster 0.0.0.0:80
option httpchk GET /test.html //检查服务器的test.html文件
balance roundrobin //负载均衡调度算法使用轮询算法
server inst1 12.0.0.10:80 check inter 2000 fall 3 //定义在线节点
server inst2 12.0.0.13:80 check inter 2000 fall 3
//check inter 2000 //表示haproxy服务器和节点之间的一个心跳频率
//fall 3 //表示连续三次检测不到心跳频率则认为该节点失效
[root@ha ~]
[root@ha ~]
[root@ha init.d]
functions haproxy jexec netconsole network README
[root@ha init.d]
[root@ha init.d]
[root@ha init.d]
[root@ha haproxy]
Starting haproxy (via systemctl): [ 确定 ]
部署nginx服务
详情请看nginx服务搭建
- 然后在两台nginx服务器上创建一个主页为test.html的文件,然后启动服务
[root@nginx01 ~]
[root@nginx02 ~]
- 然后在浏览器中测试,以此达到负载均衡效果
|