Haproxy:他也是常用的负载均衡软件
nginx 支持四层转发和七层转发
haproxy 也只可以四层转发和七层转发
可以支持一万以上的并发请求。是高性能的tcp和http的负载均衡器
haproxy主要用于高并发的web站点。工作原理和nginx一样。lvs都一样。
1、 tcp和http的反向代理
2、 https的代理配置
3、 针对http请求添加cookie,转发到后端服务器(添加缓存)
4、 也支持主备切换(keepalived)
5、 也可也实现基于端口的实时监控
6、 可以压缩响应报文
1、 可靠性和稳定性非常好,可以和硬件f5 big负载均衡的硬件设备相媲美
2、 可以同时维护四万到五万个并发连接,单位时间内处理最大请求数两万个
3、 支持8种负载均衡算法。但是haproxy不带缓存功能,但是可以支持会话保持
4、 也支持配置虚拟主机
1、 roundrobin 轮询 rr
2、 static-rr 加权轮询 wrr
3、 leastconn 最小连接数
4、 source 根据请求的源ip进行调度 sh
5、 uri 根据请求地址进行调度 url hash
6、 url param 根据url参数实现调度
7、 hdr(name) 表示根据http的请求头锁定每一次http的请求
8、 rdp-cookie(name) 表示根据cookie的名称来锁定每一次请求
1、 lvs基于linux内核来实现负载均衡,性能最高,但是对系统硬件设备要求也比较高。
haproxy和nginx基于第三方应用实现负载均衡,性能较低。
2、 lvs可以实现ip+端口的四层负载均衡,无法实现http请求的转发(无法实现七层)。haproxy和nginx都可以实现四层和七层的转发。
3、 lvs只能实现四层转发,监测的状态只能是单一的功能(检测端口)
haproxy可以实现端口,uri也可以
4、 hapeoxy虽然功能强大,但是整体性能低于lvs nginx的性能比haproxy低
lvs--->---haproxy--->---nginx(bug多,稳定性也差)
5、 nginx主要应用还是web服务或者缓存服务器,nginx的stream模块和upstream也可也支持集群,但是对节点的健康检查能力不行,没有lvs和haproxy的监控性能好
haproxy的缺点:单点部署,单实例运行。代理服务器出现故障,整个负载集群全部不可用。
haproxy是一个无状态的负载均衡器,没缓存, 也没有会话保持,靠应用程序实现会话保持。也就是访问状态不是保存在代理服务器。而在后端服务器,或者依靠cookie
日志问题:haproxy的日志比较简单,只提供基本的请求日志和错误日志。需要更高级的日志。人工自定义。
1、 搭建
2、 实现七层和实现四层
3、 实现haproxy的日志单独存放
请求:请求----代理服务器-----后端
响应:后端---代理服务器-----客户端
haproxy使用本机地址做代理地址
haproxy主代理服务器:20.0.0.20 #配置算法和本机地址做代理地址
后端节点服务器1 20.0.0.25
后端节点服务器2 20.0.0.26
客户端 20.0.0.30
到主代理服务器
添加安装包
关闭四台机器防火墙和安全机制
安装依赖环境
yum install -y pcre-devel bzip2-devel gcc gcc-c++ make
到nginx主机25和26
启动nginx功能
配置index.html
curl测试一下两台nginx
回到主代理
开始编译安装haproxy
uname -r 查看内核版本
make TARGET=linux2628 AGCH=x86_64
make install
开始服务配置
mkdir /etc/haproxy
cd /examples
cp haproxy.cfg /etc/haproxy
vim haproxy.cfg
打开行数
3 global
#全局配置 定义全局参数
4 log /dev/log local0 info
#系统日志
5 log /dev/log local0 notice
#修改日志存放路径
7 maxconn 10240
#支持的最大连接数 1024 一定要改limits.conf
8 #chroot /usr/share/haproxy
9 uid 99
10 gid 99
11 daemon
nbproc 6
#同时并发进程数,要么和cpu相同,要么是cpu的两倍
defaults
#默认配置,包括监听地址和协议以及backend(和upstream一个概念)
16 log global
#引入全局配置日志格式
17 mode http
#模式为http 七层
18 option httplog
#日志类别是http格式的日志
19 option dontlognull
#不记录健康检查的日志信息
20 retries 3
#检查节点服务器的失败次数3次失败就认为节点服务器失效
21 redispatch
#服务器的负载很高,自动结束当前队列处理比较久的连接
22 maxconn 2000
注释掉后自行添加
timeout http-request 10s
#默认http请求的超时随时间10秒
timeout queue 1m
#默认队列超时时间1分钟
timeout connect 10s
#默认的连接超时的时间10秒
timeout client 1m
#客户端超时时间1分钟
timeout server 1m
#服务端的超时时间
timeout http-keep-alive 10s
#默认会话保持的超时时间
timeout check 10s
#心跳检查的超时时间
timeout connect 10s
#默认的连接超时的时间10秒
timeout client 1m
#客户端超时时间1分钟
timeout server 1m
#服务端的超时时间
都是向后兼容,和客户端以及服务端相匹配。
删除多余的配置
listen test 0.0.0.0:80
option httpchk GET /index.html
#指定真实服务器
inst1 20.0.0.25:80 check inter 2000 fall 3
inst2 20.0.0.26:80 check inter 2000 fall 3
#check inter 开启后端服务器的健康检查,检查的时间间隔:2000毫秒
#fall 3 表示连续3次检测不到后端服务区的心跳线,则认为该节点失效
cd /opt/haproxy
haproxy.init
#启动文件
cp haproxy.init /etc/init.d/haproxy
chmod 777 /etc/init.d haproxy
chkconfig --add /etc/init.d/haproxy
cd /usr/local/sbin
ln -s /usr/local/sbin/haproxy /usr/sbin/
vim haproxy.cof
weight 3
weight 4
注释两个后端的nginx.conf内的keepalive
七层
回到调度器20
注释掉之后创建新的
frontend test
bind *:80
mode tcp
default_backend test
backend test
mode tcp
balance static-rr
server server1 20.0.0.25:80 check inter 2000 fall 3 weight 3
server server2 20.0.0.26:80 check inter 2000 fall 3 weight 4
重启服务
回到客户端测试
模拟节点故障关闭25的nginx测试
curl 20.0.0.20测试又回到集群当中了
指定日志存放位置
vim /etc/rsyslog.d/haproxy.conf
if ($programname == 'haproxy' and $syslogseverity-text == 'info' )
then -/var/log/haproxy/haproxy-info.log
&~
#&~ 表示rsyslog服务处理完指定的信息,把日志写入到日志文件之后,rsyslog不再处理其他信息。
if ($programname == 'haproxy' and $syslogseverity-text == 'notice' )
then -/var/log/haproxy/haproxy-notice.log
&~
到客户机测试一下 curl 20.0.0.20
回到代理服务器查看日志
LVS的DR和nat是基于四层还是七层转发?
DR和nat模式是基于四层转发
tun:四层+七层
四层转发:lvs、nginx(stream)、haproxy
基于七层:nginx(upstream)、haproxy