一、haproxy概念:
Haproxy:他也是常用的负载均衡转发
nginx支持四层转发,七层转发
haproxy也可以四层和七层转发
LVS的DR和NAT是基于四层转发
TUN是四层+七层
基于四层的转发:
- LVS
- nginx
- haproxy
基于七层的转发:
- nginx
- haproxy
1、haproxy:
主要用于高并发的web站点。工作原理和nginx一样。lvs也一样
可以支持一万以上的并发请求。
高性能的tcp和http负载均衡器
2、haproxy支持的功能:
- tcp和http的反向代理
- 支持https的代理配置
- 可以针对http请求添加cookie,转发到后端服务器(添加缓存)
- 也支持主备服务器切换(keepalived)
- 可以实现基于端口的实时监控
- 压缩响应报文
3、haproxy缺点:
1、haproxy是单节点部署,单实例运行,代理服务器出现故障,整个负载集群全部不可用(要结合keepalived)
要用haproxy+keepalived实现代理地址的高可用
2、haproxy是一个无状态的负载均衡,没缓存,也灭有会话保持,靠应用程序实现会话保持。状态不是保存在代理服务器,而是在后端服务器,或者依靠Cookie
3、haproxy日志问题:haproxy的日志比较简单,只提供基本的请求日志和错误日志。需要更高级的日志。要人工自定义
4、haproxy的特点:
- 可靠性和稳定性非常好,基本上可以和f5 BIG负载均衡的硬件设备相媲美
- 可以同时维护4万-5万个并发连接,单位时间内处理最大请求数2万个
- 支持8种负载均衡算法。但是haproxy不自带缓存功能,但是可以支持会话保持
- 也支持配置虚拟主机功能(可以结合keepalived)
5、haproxy的负载均衡算法:(要写全)
- roundrobin 轮询
- static-rr 加权轮询
- leastconn 最小连接数
- source 根据请求的源ip进行调度
- uri 根据请求地址进行调度
- url param 根据URL参数实现调度
- hdr(name)根据http的请求头锁定每一次http的请求
- rdp-cookie(name)表示根据Cookie的名称来锁定每一次请求
6、lvs nginx haproxy总结:
1、LVS基于linux内核实现负载均衡,性能最高,但是对系统硬件要求也比较高
haproxy和nginx基于第三方应用实现负载均衡,性能相对较低。(nginx三者最低)
2、LVS可以实现ip+端口的四层负载均衡,无法实现基于http请求的转发。haproxy和nginx都可以实现四层和七层的转发
3、LVS只能实现四层转发,监测的状态只能是单一的功能(检测端口)
haproxy可以实现监测端口、uri也可以
4、haproxy虽然功能强大,但是整体性能低于LVA。nginx的性能低于haproxy
性能排序:LVS——haproxy——nginx(bug多,稳定差,但处理小集群足够)
5、nginx主要应用还是web服务或者缓存服务器,nginx的stream模块(四层)和upstream
(七层)也可以支持集群,但是对节点的健康检查能力较弱,没有LVS和haproxy的监控性能强
二、haproxy实验:
- 搭建
- 实现四层和七层
- 如何实现haproxy的日志单独存放
关闭防火墙
安装haproxy和环境
yum install -y pcre-devel bzip2-devel gcc gcc-c++ make
tar zxvf haproxy-1.5.19.tar.gz
cd haproxy-1.5.19/
make TARGET=linux2628 ARCH=x86_64
make install
TARGET=linux2628 #内核版本
Haproxy服务器配置:
mkdir /etc/haproxy
cp /opt/haproxy-1.5.19/examples/haproxy.cfg /etc/haproxy/
timeout http-request 10s
timeout queue 1m
timeout connect 10s
timeout client 1m
timeout server 1m
timeout http-keep-alive 10s
timeout check 10s
下面的全部删除
在下面再插入:
check inter 2000 fall 3
check intet 开启对后端服务器的健康检查,检查的时间间隔: 2000毫秒fall 3 表示连续3次检测不都后端服务器的心跳线,则认为该节点失效
haproxy系统服务的添加 :
cp /opt/haproxy-1.5.19/examples/haproxy.init /etc/init.d/haproxy
chmod 777 /etc/init.d/haproxy
chkconfig --add /etc/init.d/haproxy
cd /etc/init.d
ln -s /usr/local/sbin/haproxy /usr/sbin
软连接一定要是绝对路径
systemctl restart haproxy
后端RS配置:
后端RS启动nginx 改静态页面index.html
关闭nginx的keepalive_timeout
访问代理服务器:
四层转发实验:
注释掉之后创建新的
重启haproxy
访问代理服务器:
Haproxy的日志重定义:
重启服务:
tail -f /var/log/haproxy/haproxy-info.log #查看haproxy的访问请求日志信息