Haprxy七层代理

发布于:2025-07-26 ⋅ 阅读:(19) ⋅ 点赞:(0)

一、负载均衡

负载均衡:LoadBalance ,简称LB,是一种服务或基于硬件设备等实现的高可用反向代理技术,负载均衡将特定的业务(web服务、网络流量等)分担给指定的一个或多个后端特定的服务器或设备,从而提高了公司业务的并发处理能力、保证了业务的高可用性、方便了业务后期的水平动态扩展

1.2为什么用负载均衡

web服务器的动态水平扩展-->对用户无感知

增加业务并发访问及处理能力-->解决单服务器瓶颈问题

节约公网IP地址-->降低IT支出成本

隐藏内部服务器IP-->提高内部服务器安全性

配置简单-->固定格式的配置文件

功能丰富-->支持四层和七层,支持动态下线主机

性能较强-->并发数万甚至数十万

1.3负载均衡类型

1.3.1 四层负载均衡

1.通过ip+port决定负载均衡的去向

2.对流量请求进行NAT处理,转发至后台服务器

3.记录tcp、udp流量分别是由哪台服务器处理,后续该请求连接的流量都通过该服务器处理

4.支持四层的软件

lvs:重量级四层负载均衡器

nginx:轻量级四层负载均衡器

Haproxy:模拟四层转发

1.3.2 七层负载均衡

通过虚拟ur|或主机ip进行流量识别,根据应用层信息进行解析,决定是否需要进行负载均衡。

代理后台服务器与客户端建立连接,如nginx可代理前后端,与前端客户端tcp连接,与后端服务器建立tcp连接,

支持7层代理的软件:

nginx:基于http协议

Haproxy:七层代理,会话保持、标记、路径转移等

二、Haproxy的安装和服务信息

软件包:haproxy

版本查看:haproxy -v

2.1Haproxy的基本配置信息

global:全局配置段

进程及安全配置相关参数

性能调整相关参数

debug参数

proxies:代理配置段

defaults:为frontend,backend,listen提供默认配置

frontend:前端,相当于nginx中的server{}

backend:后端,相当于nginx中的upstream{}

listen:同时拥有前端后端配置,配置简单

2.1.2 global配置参数说明

global
log 127.0.0.1 local2                                #定义全局的syslog服务器;日志服务器需要开启UDP协议,最多可以定义两个
chroot /var/lib/haproxy                            #锁定运行目录
pidfile /var/run/haproxy.pid                     #指定pid文件
maxconn 100000                                   #指定最大连接数
user haproxy                                          #指定haproxy的运行用户
group haproxy                                        #指定haproxy的运行组
daemon                                                  #指定haproxy以守护进程方式运行
# turn on stats unix socket
stats socket /var/lib/haproxy/stats          #指定haproxy的套接字文件
nbproc 2                                                 #指定haproxy的work进程数量,默认是1
cpu-map 1 0                                         #指定第一个work绑定第一个cpu核心
cpu-map 2 1                                         #指定第二个work绑定第二个cpu核心
nbthread 2                                              #指定haproxy的线程数量,默认每个进程一个线程,此参数与nbproc互斥
maxsslconn 100000                                 #每个haproxy进程ssl最大连接数,用于haproxy 配置了证书的场景下
maxconnrate 100                                         #指定每个客户端每秒建立连接的最大数量
2.1.3 proxies配置参数说明
defaults 默认配置项,针对以下的frontenf、backend和listen生效,可以多个name也可以没有name
frontend 前端servername,类似于nginx的一个虚拟主机server和LVS服务集群
backend 后端服务器组,等于nginx和upstream的LVS中的RS服务器
listen 将frontend和backend合并在一起配置,相对于frontend和backend配置更简洁,生产常用
defaults
mode http #HAProxy实例使用的连接协议
log global #指定日志地址和记录日志条目的
syslog/rsyslog日志设备
#此处的 global表示使用 global配置段中
设定的log值。
option httplog #日志记录选项,httplog表示记录与 HTTP
会话相关的各种属性值
#包括 HTTP请求、会话状态、连接数、源地
址以及连接时间等
option dontlognull #dontlognull表示不记录空会话连接日志
option http-server-close #等待客户端完整HTTP请求的时间,此处为等
10s
option forwardfor except 127.0.0.0/8 #透传客户端真实IP至后端web服务器
#apache配置文件中加入:<br>%{X
Forwarded-For}i
#后在webserver中看日志即可看到地址透传
信息
option redispatch #server Id对应的服务器挂掉后,强制定
向到其他健康的服务器,重新派发
option http-keep-alive #开启与客户端的会话保持
retries 3 #连接后端服务器失败次数
timeout http-request 10s #等待客户端请求完全被接收和处理的最长时
timeout queue 1m #设置删除连接和客户端收到503或服务不可
用等提示信息前的等待时间
timeout connect 120s #设置等待服务器连接成功的时间
timeout client 600s #设置允许客户端处于非活动状态,即既不发
送数据也不接收数据的时间
timeout server 600s #设置服务器超时时间,即允许服务器处于既
不接收也不发送数据的非活动时间
timeout http-keep-alive 60s #session 会话保持超时时间,此时间段内
会转发到相同的后端服务器
timeout check 10s #指定后端服务器健康检查的超时时间
maxconn 3000
default-server inter 1000 weight 3

 2.2 socat工具

对服务器动态权重和其他状态可以利用socat工具进行调整,socat是Linux下的一个多功能的网络工具,名字来由是socket cat,相当于netcat的增强版。其主要特点就是在两个数据流之间建立双向通道,且支持众多协议和连接方式,如IP、TCP、UDP、IPV6、Socket文件等

三、Haproxy的算法

Haproxy通过固定参数balance指明对后端服务器的调度算法

balance参数可以配置在listen或backend选项中

Haproxy的调度算法分为静态和动态调度算法

有些算法可以根据参数在静态和动态算法中相互转换

3.1静态算法

按照事先定义好的规则轮询公平调度,不关心后端服务器当前负载、连接数和响应速度等,且无法实时修改权重(且只能为0和1,不支持其他值),只能靠重启Haproxy生效

3.1.1 static-rr:基于权重的轮询调度

不支持运行时利用socat进行权重的动态调整(只支持0和1,不支持其他值)
不支持端服务器慢启动
其后端主机数量没有限制,相当于LVS中的wrr
[慢启动是指服务器在刚刚启动时,不会把他应该承担的访问压力全部给它,而应该是先给一部分,当没问题后再给一部分]

3.1.2 first

不支持运行时利用socat进行权重的动态调整(只支持0和1,不支持其他值)
不支持端服务器慢启动
其后端主机数量没有限制,相当于LVS中的wrr
[慢启动是指服务器在刚刚启动时,不会把他应该承担的访问压力全部给它,而应该是先给一部分,当没问题后再给一部分]

3.2 动态算法

基于后端服务器状态进行调度适当调整

新请求将优先调度至当前负载较低的服务器

权重可以在haproxy运行时动态调整无需重启

3.2.1 roundrobin

不支持运行时利用socat进行权重的动态调整(只支持0和1,不支持其他值)
不支持端服务器慢启动
其后端主机数量没有限制,相当于LVS中的wrr
[慢启动是指服务器在刚刚启动时,不会把他应该承担的访问压力全部给它,而应该是先给一部分,当没问题后再给一部分]

3.2.2 leastconn

不支持运行时利用socat进行权重的动态调整(只支持0和1,不支持其他值)
不支持端服务器慢启动
其后端主机数量没有限制,相当于LVS中的wrr
[慢启动是指服务器在刚刚启动时,不会把他应该承担的访问压力全部给它,而应该是先给一部分,当没问题后再给一部分]

3.3 其他算法

3.3.1 source

源地址hash,基于用户源地址hash并将请求转发到后端服务器,后续同一个源地址请求将被转发至同一个后端web服务器。此方式当后端服务器数据量发生变化时,会导致很多用户的请求转发至新的后端服 务器,默认为静态方式,但是可以通过hash-type支持的选项更改这个算法一般是在不插入CookieTCP 模式下使用,也可给拒绝会话cookie的客户提供最好的会话粘性,适用于session会话保持但不支持 cookie和缓存的场景源地址有两种转发客户端请求到后端服务器的服务器选取计算方式,分别是取模法
和一致性hash

3.3.1.1 map-base 取模法

3.3.1.2 一致性hash

当服务器的总权重发生变化时,对调度结果影响是局部的,不会引起大的变动hash(o)mod n

该hash算法是动态的,支持使用socat等工具进行在线权重调整,支持慢启动

3.3.2 uri

3.3.3 url_param

3.3.4 hdr

3.3.5总结

四、Haproxy的高级功能配置

4.1基于cookie的会话保持

cookie value:为当前server指定cookie值,实现基于cookie的会话黏性,相对于基于 source 地址hash
调度算法对客户端的粒度更精准,但同时也加大了haproxy负载,目前此模式使用较少, 已经被session
共享服务器代替
不支持tcp mode,使用http mode

4.1.1配置示例

4.1.2验证

4.2Haproxy状态页

通过web界面,显示当前Haproxy的运行状态

启用状态页

登录状态页:

4.3IP传透

4.3.2四层IP穿透

未开启穿透的四层代理

在访问haproxy后在server1查看nginx日志

此时无法看到真实访问源地址

开启四层透传

在server1上对nginx进行配置

修改proxy

此时在server1上查看日志内容

4.4 ACL

是一种基于包过滤的访问控制技术

它可以根据设定的条件对经过服务器传输的数据包进行过滤(条件匹配)即对接收到的报文进行匹配和过滤,基于请求报文头部中的源地址、源端口、目标地址、目标端口、请求方法、URL、文件后缀等信息内容进行匹配并执行进一步操作,比如允许其通过或丢弃

4.5 自定义Haproxy


网站公告

今日签到

点亮在社区的每一天
去签到