Haproxy

       

Haproxy

Haproxy:他也是常用的负载均衡软件

nginx 支持四层转发和七层转发

haproxy 也只可以四层转发和七层转发

可以支持一万以上的并发请求。是高性能的tcp和http的负载均衡器

haproxy主要用于高并发的web站点。工作原理和nginx一样。lvs都一样。

haproxy支持的功能

1、 tcp和http的反向代理

2、 https的代理配置

3、 针对http请求添加cookie,转发到后端服务器(添加缓存)

4、 也支持主备切换(keepalived)

5、 也可也实现基于端口的实时监控

6、 可以压缩响应报文

haproxy的特点

1、 可靠性和稳定性非常好,可以和硬件f5 big负载均衡的硬件设备相媲美

2、 可以同时维护四万到五万个并发连接,单位时间内处理最大请求数两万个

3、 支持8种负载均衡算法。但是haproxy不带缓存功能,但是可以支持会话保持

4、 也支持配置虚拟主机

haproxy的负载均衡算法

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的名称来锁定每一次请求

lvs 、nginx 、haproxy的区别

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的缺点:单点部署,单实例运行。代理服务器出现故障,整个负载集群全部不可用。

haproxy是一个无状态的负载均衡器,没缓存, 也没有会话保持,靠应用程序实现会话保持。也就是访问状态不是保存在代理服务器。而在后端服务器,或者依靠cookie

日志问题:haproxy的日志比较简单,只提供基本的请求日志和错误日志。需要更高级的日志。人工自定义。

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

1、 搭建haproxy

到主代理服务器

添加安装包

关闭四台机器防火墙和安全机制

安装依赖环境

yum install -y pcre-devel bzip2-devel gcc gcc-c++ make

到nginx主机25和26

启动nginx功能

配置index.html

curl测试一下两台nginx

Haproxy_第1张图片

回到主代理

开始编译安装haproxy

uname -r 查看内核版本

make TARGET=linux2628 AGCH=x86_64

Haproxy_第2张图片

make install

开始服务配置

mkdir /etc/haproxy

cd /examples

cp haproxy.cfg /etc/haproxy

Haproxy_第3张图片

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
#心跳检查的超时时间

Haproxy_第4张图片

Haproxy_第5张图片

timeout connect 10s
#默认的连接超时的时间10秒

timeout client 1m
#客户端超时时间1分钟

timeout server 1m
#服务端的超时时间

都是向后兼容,和客户端以及服务端相匹配。

删除多余的配置

Haproxy_第6张图片

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

Haproxy_第7张图片

chmod 777 /etc/init.d haproxy

chkconfig --add /etc/init.d/haproxy

cd /usr/local/sbin

ln -s /usr/local/sbin/haproxy /usr/sbin/

Haproxy_第8张图片到客户端测试curl 20.0.0.20

Haproxy_第9张图片

配置权重的方法

vim haproxy.cof

weight 3

weight 4

注释两个后端的nginx.conf内的keepalive

Haproxy_第10张图片

七层

Haproxy_第11张图片

四层

回到调度器20

Haproxy_第12张图片

注释掉之后创建新的

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

Haproxy_第13张图片

重启服务

回到客户端测试

模拟节点故障关闭25的nginx测试

curl 20.0.0.20测试又回到集群当中了

Haproxy_第14张图片

haproxy日志管理

指定日志存放位置

Haproxy_第15张图片

vim /etc/rsyslog.d/haproxy.conf

Haproxy_第16张图片

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
&~

Haproxy_第17张图片

到客户机测试一下 curl 20.0.0.20

Haproxy_第18张图片

回到代理服务器查看日志

Haproxy_第19张图片

思考题

LVS的DR和nat是基于四层还是七层转发?

DR和nat模式是基于四层转发

tun:四层+七层

四层转发:lvs、nginx(stream)、haproxy

基于七层:nginx(upstream)、haproxy

你可能感兴趣的:(nginx,负载均衡)