Haproxy:他也是常用的负载均衡软件
Nginx:支持四层转发,七层转发
Haproxy:也可以四层和七层转发
LVS的DR和hat是基于四层转发还是七层转发
四层转发
tun:四层加七层转发
基于四层的转发:
Lvs
Nginx
Haproxy
基于七层的转发:
Nginx
Haproxy
Haproxy:法国人威利塔罗开发的,在2000年基于c语言开发的一个开源软件
可以支持一万以上的并发请求
高性能的tcp和http负载均衡器 2.4 1.5.9
Haproxy:主要用于高并发的web站点。工作原理和nginx一样。Lvs都一样
支持的功能:
- tcp和http的反向代理功能
- https的代理配置
- 可以针对http请求添加COOKie,转发到后端服务器(添加缓存)
- 也支持主备切换(keepalived)
- 基于端口的实时监控
- 压缩响应报文
Haproxy的特点:
- 可靠性和稳定非常好,可以和硬件f5 BIG负载均衡的硬件设备相媲美
- 同时维护40000-50000个并发连接,单位时间内处理最大请求数20000个
- 支持8中负载均衡算法,但是haproxy不带缓存功能,但是可以支持会话保持
- 也支持配置虚拟主机
Haproxy的负载均衡算法:
- roundrobin 轮询
- static-rr 加权轮询
- leastconn 最小连接数
- source 根据请求的源ip进行调度sh
- uri 根据请求地址进行调度
- url param 根据URL的参数实现调度
- hdr(name) 表示根据http的请求头锁定每一次http的请求
- rdp-cookie(name) 表示根据cookie的名称来锁定每一次请求
lvs nginx haproxy
- lvs基于linux内核实现负载均衡,性能最高,但是对系统硬件要求也比较高
haproy和nginx基于第三方应用实现负载均衡,性能较低
- lvs可以实现ip+端口的四层负载均衡,无法实现http请求的转发。haproxy和nginx都可以实现四层和七层的转发
- lvs只能实现四层转发,监测的状态只能是单一的功能(监测端口)
haproxy可以实现端口,uri也可以
- haproxy虽然功能强大,但是整体性能低于lvs nginx的性能比haproxy低
lvs-----haproxy-----nginx(bug多,稳定也差)
- nginx的主要应用还是web服务或者缓存服务器,nginx的stream模块和upstream也可以支持集群,但是对节点的健康检查能力不能。没有lvs和haproxy的监控性能好
Haproxy的缺点:单节点部署,单实例运行,代理服务器出现故障,整个负载集群全部不可用
Haproxy是一个无状态的负载均衡器,没缓存,也没有会话保持,靠应用程序实现会话保持。状态不是保存在代理服务器,而是在后端服务器,或者依靠cookie
日志问题:haproxy的日志比较简单,只提供基本的请求日志和错误日志。需要更高级的日志,人工自定义。
实验:
- 搭建
- 实现七层 实现四层
- 如何实现haproxy的日志单独存放
haproxy负载调度器:192.168.120.30
nginx服务器1:192.168.120.40
nginx服务器2:192.168.120.60
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
TARGET=linux2628 ARCH=X86_64
TARGET=linux2628
uname -r 内核版本
2.6.18
ARCH=X86_64
系统位数,64位系统
Haproxy服务器配置:
mkdir /etc/haproxy
cp /opt/haproxy-1.5.19/examples/haproxy.cfg /etc/haproxy/
vim haproxy.cfg
this config needs haproxy-1.1.28 or haproxy-1.2.1
2
3 global #全局配置 定义全局参数
4 log /dev/log local0 info
5 #系统日志
6 log /dev/log local0 notice
7 #修改日志的存放路径
8 #log loghost local0 info
9 maxconn 10240
10 #支持的最大连接数 1024 一定要改limits.conf
11 #chroot /usr/share/haproxy
12 uid 99
13 gid 99
14 daemon
15 nbproc 4
16 #同时并发进程数,要么和cpu相同,要么是cpu的两倍
17 #debug
18 #quiet
19
20 defaults
21 #默认配置,包括监听地址和协议backend(upstream)
22 log global #引入全局配置日志格式
23 mode http #模式为http七层
24 option httplog #日志类别是http格式的日志
25 option dontlognull #不记录健康检查的日志信息
26 retries 3 #检查节点服务器的失败次数 3次失败就认为节点服务器失效
27 redispatch #服务器的负载很高,自动结束当前队列处理比较久的连接
28 maxconn 2000 #最大连接数,不能超过全局配置的定义数量
29 #contimeout 5000
30 #clitimeout 50000
31 #srvtimeout 50000
32 timeout http-request 10s
33 #默认http请求的超时时间
34 timeout queue 1m
35 #默认队列超时时间
36 timeout connect 10s
37 #默认连接超时的时间
38 timeout client 1m
39 #客户端的超时时间
40 timeout server 1m
41 #服务端的超时时间
42 timeout http-keep-alive 10s
43 #默认会话保持的超时时间
44 timeout check 10s
45 #心跳检查的超时时间
timeout connect 10s
timeout client
timeout server 1m
都是向后兼容,和客户端以及服务端相匹配
check inter 2000 fall 3
check inter 开启对后端服务器的健康检查,检查的时间间隔: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
节点服务器部署
nginx1和nginx2
vim /usr/local/nginx/html/index.html
自定义
vim /usr/local/nginx/conf/nginx.conf
修改连接保持时间 注释或修改成0
#keepalive_timeout 65;
最后到客户端访问
curl 192.168.120.30
Haproxy的日志重定义
vim /etc/rsyslog.d/haproxy.conf
if ($programname == 'haproxy' and $syslogseverity-text == 'info')
then -/var/log/haproxy/haproxy-info.log
&~
if ($programname == 'haproxy' and $syslogseverity-text == 'notice')
then -/var/log/haproxy/haproxy-notice.log
&~
systemctl restart rsyslog.service
tail -f /var/log/haproxy/haproxy-info.log
#查看haproxy的访问请求日志信息
到客户端访问
curl 192.168.120.30