haproxy七层代理负载均衡---高级功能及配置

负载均衡


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

为什么用负载均衡

       
Web服务器的动态水平扩展----->对用户无感知
增加业务并发访问及处理能力-->解决单服务器瓶颈问题
节约公网IP地址-------------------->降低IT支出成本
隐藏内部服务器IP----------------->提高内部服务器安全性
配置简单----------------------------->固定格式的配置文件
功能丰富----------------------------->支持四层和七层,支持动态下线主机
性能较强----------------------------->并发数万甚至数十万

四层负载均衡


通过ip+port决定负载均衡的去向。
对流量请求进行NAT处理,转发至后台服务器。
记录tcp、udp流量分别是由哪台服务器处理,后续该请求连接的流量都通过该服务器处理
支持四层的软件
Ivs:重量级四层负载均衡器
Nginx:轻量级四层负载均衡器,可缓存。(nginx四层是通过upstream模块)
Haproxy:模拟四层转发。

七层负载均衡


通过虚拟ur|或主机ip进行流量识别,根据应用层信息进行解析,决定是否需要进行负载均衡
代理后台服务器与客户端建立连接,如nginx可代理前后端,与前端客户端tcp连接,与后端服务器建立tcp连接,
支持7层代理的软件:
Nginx:基于http协议(nginx七层是通过proxy_pass)
Haproxy:七层代理,会话保持、标记、路径转移等。

Haproxy


        HAProxy是法国开发者 威利塔罗(Willy Tarreau) 在2000年使用C语言开发的一个开源软件是一款具备高并发(万级以上)、高性能的TCP和HTTP负载均衡器。

支持基于cookie的持久性,自动故障切换,支持正则表达式及web状态统计

Haproxy的基本配置信息

Haproxy配置路径

vim /etc/haproxy/haproxy.cfg

实验
准备三台主机

一台:haproxy服务机          ip 172.25.119.100

两台:server机

​           webserver1     ip     172.25.119.10

​           webserver2     ip     172.25.119.20

实验前配置

关闭防火墙和selinux

systemctl stop firewalld

setenforce  0

haproxy主机
下载haproxy服务
yum install haproxy  -y

更改haproxy的配置
[root@haproxy ~]# vim /etc/haproxy/haproxy.cfg

global配置

进程绑定cpu
#进程和cpu核心绑定防止cpu抖动从而减少系统资源消耗

cpu-map 1 0    全局    绑定haproxy worker 进程至指定CPU,将第1个work进程绑定至0号CPU
cpu-map 2 1    全局    绑定haproxy worker 进程至指定CPU,将第2个work进程绑定至1号CPU

 

多线程
nbthread 1 (和nbproc互斥)全局指定每个haproxy进程开启的线程数,默认为每个进程一个线程

 进程最大并发连接数

日志重定向

haproxy算法


‌HAProxy支持多种调度算法,包括静态和动态调度算法。 这些算法可以根据服务器的状态和负载情况进行动态调整,以提高系统的整体性能和稳定性。

以下是HAProxy中常见的几种调度算法及其特点:

 
‌Round Robin(轮询):这是最简单常用的一种算法,基于权重进行轮询调度。在服务器的处理时间保持均匀分布时,这是一种最平衡、最公平的算法。此算法是动态的,表示其权重可以在运行时进行调整。‌

 
‌Least Connections(最少连接数):新的连接请求被派发至具有最少连接数目的后端服务器。在有着较长时间会话的场景中推荐使用此算法,如LDAP、‌SQL等,其并不太适用于较短会话的应用层协议,如‌HTTP。‌

 
‌Source IP Hash:基于来源访问调度算法,用于一些有Session会话记录在服务器端的场景,可以基于来源的IP、Cookie等做集群调度。这种方式可以使同一个客户端IP的请求始终被转发到某特定的后端服务器。‌

 
‌URI Hash:基于请求的URI将请求转发至同一个后端节点上。这种模式在缓存代理实现中,对于增加缓存命中率非常理想。‌

 
‌URL Parameter:基于请求的URL参数进行调度。

这些调度算法可以根据具体的应用场景和需求进行选择,以达到最佳的负载均衡效果。

 静态算法


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

基于权重的轮询调度


不支持运行时利用socat进行权重的动态调整(只支持0和1,不支持其它值)

不支持端服务器慢启动

first


根据服务器在列表中的位置,自上而下进行调度

其只会当第一台服务器的连接数达到上限,新请求才会分配给下一台服务

其会忽略服务器的权重设置

不支持用socat进行动态修改权重,可以设置0和1,可以设置其它值但无效

动态算法


        基于后端服务器状态进行调度适当调整, 新请求将优先调度至当前负载较低的服务器 权重可以在haproxy运行时动态调整无需重启

roundrobin

1. 基于权重的轮询动态调度算法,

2. 支持权重的运行时调整,不同于lvs中的rr轮训模式,

3. HAProxy中的roundrobin支持慢启动(新加的服务器会逐渐增加转发数),

4. 其每个后端backend中最多支持4095个real server,

5. 支持对real server权重动态调整,

6. roundrobin为默认调度算法,此算法使用广泛

leastconn


eastconn加权的最少连接的动态

支持权重的运行时调整和慢启动,即:根据当前连接最少的后端服务器而非权重进行优先调度(新客户 端连接)

比较适合长连接的场景使用,比如:MySQL等场景

基于cookie的会话保持

在一个浏览器访问后,会记住选择,之后刷新一直是该后端主机,另一个浏览器访问则是另一个后端主机

[root@haproxy ~]# vim /etc/haproxy/haproxy.cfg 
    balance roundrobin
    cookie WEBCOOKIE insert nocache indirect
    server web1 172.25.250.10:80 cookie aaa1 check inter 2 fall 3 rise 5 weight 2
    server web2 172.25.250.20:80 cookie aaa2 check inter 2 fall 3 rise 5 weight 1
[root@haproxy ~]# systemctl restart haproxy.service 
[root@haproxy ~]# curl -b WEBCOOKIE=aaa1 172.25.250.100
webserver1 - 172.25.250.10
[root@haproxy ~]# curl -b WEBCOOKIE=aaa2 172.25.250.100
webserver2 - 172.25.250.20

backend server信息

session rate(每秒的连接会话信息): Errors(错误统计信息):

cur:每秒的当前会话数量 : Req:错误请求量

max:每秒新的最大会话数量 conn:错误链接量

limit:每秒新的会话限制量 Resp:错误响应量

sessions(会话信息): Warnings(警告统计信息):

cur:当前会话量 Retr:重新尝试次数

max:最大会话量 Redis:再次发送次数

limit: 限制会话量

Total:总共会话量 Server(real server信息):

LBTot:选中一台服务器所用的总时间 Status:后端机的状态,包括UP和DOWN Last:和服务器的持续连接时间 LastChk:持续检查后端服务器的时间

Wght:权重

Bytes(流量统计): Act:活动链接数量

In:网络的字节输入总量 Bck:备份的服务器数量

Out:网络的字节输出总量 Chk:心跳检测时间

Dwn:后端服务器连接后都是DOWN的数量

Denied(拒绝统计信息): Dwntme:总的downtime时间

Req:拒绝请求量 Thrtle:server 状态

Resp:拒绝回复量

ip透

七层代理


七层代理 mode--->http
#webserver1
[root@webserver1 ~]# systemctl disable nginx
[root@webserver1 ~]# systemctl stop nginx
[root@webserver1 ~]# dnf install httpd -y
[root@webserver1 ~]# echo webserver1 - 172.25.250.10 > /var/www/html/index.html
[root@webserver1 ~]# vim /etc/httpd/conf/httpd.conf 
如下图标注
%{X-Forwarded-For}i
[root@webserver1 ~]# systemctl enable --now httpd

​#测试
[root@webserver1 ~]# tail -n 3 /etc/httpd/logs/access_log
[root@webserver2 ~]# tail -3 /var/log/nginx/access.log

自定义HAProxy错误界面

#webserver1\2主机上
system stop httpd

#haproxy主机上
[root@haproxy ~]# mkdir /etc/haproxy/errorpage -p
[root@haproxy ~]# vim /etc/haproxy/errorpage/503.http
HTTP/1.0 503 Service Unavailable
Cache-Control: no-cache
Connection: close
Content-Type: text/html;charset=UTF-8

<html><body><h1>aaa</h1>
bbb
</body></html>

haproxy配置七层负载均衡的步骤如下: 1. 安装haproxy:使用命令"yum -y install haproxy"可以安装haproxy软件包。 2. 配置haproxyhaproxy配置文件分为五个部分,分别是全局配置、默认配置、frontend配置、backend配置和listen配置。对于七层负载均衡,主要关注的是frontend和backend配置。 3. 配置frontend:在frontend配置中,需要指定监听的IP和端口,并设置使用的协议和负载均衡算法。此外,还需要定义ACL规则来根据用户请求的内容将请求转发到不同的后端服务器。 4. 配置backend:在backend配置中,需要定义后端服务器的列表和属性。可以指定服务器的IP地址和端口,并设置权重和最大连接数等属性。 5. 启动haproxy:在完成配置后,可以使用命令"systemctl start haproxy"启动haproxy服务。 需要注意的是,配置七层负载均衡还需要根据具体的需求进行调整和优化,例如设置健康检查、会话保持等功能。此外,还需要确保后端服务器已经配置好并正常工作。 总结:配置haproxy七层负载均衡主要包括安装haproxy配置haproxy文件、设置frontend和backend配置、启动haproxy服务。配置过程中还需要根据需求进行调整和优化。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* *3* [haproxy七层负载均衡](https://blog.csdn.net/weixin_46018506/article/details/122257643)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 100%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值