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

相关推荐
chairon3 分钟前
Ansible:playbook的高级用法
linux·运维·服务器·ansible·apache
上海云盾商务经理杨杨19 分钟前
网络游戏服务器如何构建全方位防御体系?DDoS与CC攻击实战防护指南
运维·服务器·ddos
活跃家族36 分钟前
UI自动化基础(1)
运维·自动化
字节源流39 分钟前
【Spring Cloud Netflix】GateWay服务网关
java·运维·gateway
秦jh_42 分钟前
【Linux网络】网络套接字socket
linux·运维·服务器·网络
蚂蚁在飞-1 小时前
浏览器自动化操作AI工具-browser-use
运维·人工智能·自动化
斯普信专业组2 小时前
Linux命令之jq命令处理JSON数据
linux·运维·json
爱莉希雅&&&3 小时前
DNS服务(Linux)
linux·运维·服务器
程序猿John3 小时前
Linux下创建svn库 和 svn安装与操作
linux·运维·svn
txinyu的博客3 小时前
仿modou库one thread one loop式并发服务器
运维·服务器