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的日志比较简单,只提供基本的请求日志和错误日志。需要更高级的日志,人工自定义。

实验:

  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

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

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

相关推荐
冷曦_sole26 分钟前
linux-19 根文件系统(一)
linux·运维·服务器
AI大模型学徒29 分钟前
Linux(二)_清理空间
linux·运维·服务器
tntlbb1 小时前
Ubuntu20.4 VPN+Docker代理配置
运维·ubuntu·docker·容器
Linux运维技术栈2 小时前
Ansible(自动化运维)环境搭建及ansible-vault加密配置
运维·自动化·ansible
Bessssss3 小时前
centos权限大集合,覆盖多种权限类型,解惑权限后有“. + t s”问题!
linux·运维·centos
苹果醋33 小时前
Golang的文件加密工具
运维·vue.js·spring boot·nginx·课程设计
jwensh4 小时前
【Jenkins】Declarative和Scripted两种脚本模式有什么具体的区别
运维·前端·jenkins
大熊程序猿5 小时前
xxl-job docker 安装
运维·docker·容器
董健正5 小时前
centos制作离线安装包
linux·运维·centos
咏颜6 小时前
Ubuntu离线安装Docker容器
linux·运维·服务器·经验分享·ubuntu·docker