Haproxy

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都一样

支持的功能:

  1. tcp和http的反向代理功能
  2. https的代理配置
  3. 可以针对http请求添加COOKie,转发到后端服务器(添加缓存)
  4. 也支持主备切换(keepalived)
  5. 基于端口的实时监控
  6. 压缩响应报文

Haproxy的特点:

  1. 可靠性和稳定非常好,可以和硬件f5 BIG负载均衡的硬件设备相媲美
  2. 同时维护40000-50000个并发连接,单位时间内处理最大请求数20000个
  3. 支持8中负载均衡算法,但是haproxy不带缓存功能,但是可以支持会话保持
  4. 也支持配置虚拟主机

Haproxy的负载均衡算法:

  1. roundrobin  轮询
  2. static-rr   加权轮询
  3. leastconn  最小连接数
  4. source  根据请求的源ip进行调度sh
  5. uri  根据请求地址进行调度
  6. url param  根据URL的参数实现调度
  7. hdr(name)  表示根据http的请求头锁定每一次http的请求
  8. rdp-cookie(name)  表示根据cookie的名称来锁定每一次请求

lvs  nginx  haproxy

  1. lvs基于linux内核实现负载均衡,性能最高,但是对系统硬件要求也比较高

haproy和nginx基于第三方应用实现负载均衡,性能较低

  1. lvs可以实现ip+端口的四层负载均衡,无法实现http请求的转发。haproxy和nginx都可以实现四层和七层的转发
  2. lvs只能实现四层转发,监测的状态只能是单一的功能(监测端口)

haproxy可以实现端口,uri也可以

  1. haproxy虽然功能强大,但是整体性能低于lvs nginx的性能比haproxy低

lvs-----haproxy-----nginx(bug多,稳定也差)

  1. nginx的主要应用还是web服务或者缓存服务器,nginx的stream模块和upstream也可以支持集群,但是对节点的健康检查能力不能。没有lvs和haproxy的监控性能好

Haproxy的缺点:单节点部署,单实例运行,代理服务器出现故障,整个负载集群全部不可用

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

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

Haproxy_第1张图片

实验:

  1. 搭建
  2. 实现七层 实现四层
  3. 如何实现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

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

Haproxy_第2张图片

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

你可能感兴趣的:(运维)