七层负载均衡集群HAProxy使用及原理

一、为什么使用haproxy

后端检测将挂了的主机访问打到正常的主机上,就是我们所说的负载均衡,保证业务的高可用性,方便业务后期的水平动态扩展

二、七层负载和四层负载及正反向代理的含义

1、四层负载

(1)通过IP+PORT决定负载均衡的去向

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

(3)记录tcp、udp流量分别是由哪台服务器处理

(4)支持四层代理的软件

LVS:重量级四层负载均衡器。

Nginx:轻量级四层负载均衡器,可缓存,通过upstream模块

Haproxy:模拟四层妆发

2、七层负载

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

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

(3)支持七层代理的软件

Nginx:基于http协议,通过proxy_pass

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

3、四层和七层的区别

        四层的负载均衡是通过发布三层的IP地址+端口号来识别流量需不需要做负载均衡,并且需要对处理的流量进行NAT处理,转发至后台服务器并记录下这个TCP或者UDP的流量由哪台服务器处理的,后续这个连接的所有流量都同样转发到同一台服务器处理。

        七层的负载均衡是在四层的基础上,例如一个Web服务器的负载均衡,除了根据VIP+端口辨别还可以可以根据URL、浏览器类别、语言来识别流量是否需要负载均衡

(1)分层位置:四层负载均衡实在传输层及以下,七层负载均衡在应用层及以下

(2)性能:四层负载均衡不能解析报文消息内容,在网络吞吐量和处理能力上较高,七层能解析应用层报文消息,识别URL、Cookie、HTTPheader等信息。

(3)功能类别:四层负载均衡类似于路由器;七层类似于代理服务器

(4)原理:四层负载均衡是基于ip+prot;七层是基于url或主机ip

(5)安全性:四层负载均衡无法识别DDos攻击;七层可防御SYN Cookie/Flood攻击

4、正反向代理

(1)正向代理:是一个位于客户端和目标服务器之间的服务器(代理服务器),为了从目标服务器取得内容,客户端向代理服务器发送一个请求并指定目标,然后代理服务器向目标服务器转交请求并将获得的内容返回给客户端。例如你想要租房子,可以通过中介来寻求一些房源,这个中介就是所谓的正向代理。

0e07cbc6a24a41b38967455b813f4a70.png

(2)反向代理:指服务器来接受internet上的连接请求,然后将请求转发给内部网络上的服务器,并将从服务器上得到的结果返回给internet上请求连接的客户端,此时代理服务器对外就表现为一个反向代理服务器。例如你作为客户想去租房找一个房东,结果对面是一个二房东,就是真实房东找的代理房东,这个代理房东就是反向代理。

fc316ac3c2f544849fedf1de419fc2c9.png

三、HAProxy简介

HAProxy是法国开发者Willy Tarreau在2000年使用C语言开发的一个开源软件

是一款具备高并发(万级以上)、高性能的TCP和HTTP负载均衡器

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

四、实验环境准备

1、三台rhel9.1的虚拟机

2、IP

Haproxy:172.25.254.100

Webserver1:172.25.254.10

Webserver2:172.25.254.20

3、提前关闭防火墙和selinux

4、为了后续体现不同web的配置不同,我们在两台Webserver上分别安装nginx和apache

(1)webserver1:

[root@Webserver ~]# dnf install nginx -y

[root@Webserver ~]# echo webserver1 - 172.25.254.10 > /usr/share/nginx/html/index.html

[root@Webserver ~]# systemctl enable --now nginx
Created symlink /etc/systemd/system/multi-user.target.wants/nginx.service → /usr/lib/systemd/system/nginx.service.

(2)webserver2:

[root@Webserver ~]# dnf install nginx -y
[root@Webserver ~]# echo webserver2 - 172.25.254.20 > /usr/share/nginx/html/index.html
[root@Webserver ~]# systemctl enable --now nginx
Created symlink /etc/systemd/system/multi-user.target.wants/nginx.service → /usr/lib/systemd/system/nginx.service.

五、HAProxy的基本部署方法及负载均衡的实现

1、软件的安装

HAProxy:

[root@HAProxy ~]# dnf install haproxy -y

[root@HAProxy ~]# systemctl enable --now haproxy
Created symlink /etc/systemd/system/multi-user.target.wants/haproxy.service → /usr/lib/systemd/system/haproxy.service.

———将vim格式设置成haproxy配置文件需要的格式

[root@HAProxy ~]# cat ~/.vimrc
set ts=4 ai sw=4

2、基本配置信息

2.1全局配置段global

进程及安全配置相关的参数

性能调整相关参数

Debug参数

2.2代理配置段proxies

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

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

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

listen:同时拥有前端和后端配置,配置简单,生产推荐使用

2.3global配置

2.3.1配置参数

参数 作用
chroot 锁定运行目录
deamon 以守护进程运行
user, group, uid, gid 运行haproxy的用户身份
stats socket 套接字文件
nbproc N 开启的haproxy worker 进程数,默认进程数是一个
nbthread 1 (和nbproc 互斥) 指定每个haproxy进程开启的线程数,默认为每个进程一个 线程
cpu-map 1 0 绑定haproxy worker 进程至指定CPU,将第1个work进程绑 定至0号CPU
cpu-map 2 1 绑定haproxy worker 进程至指定CPU,将第2个work进程绑 定至1号CPU
maxconn N 每个haproxy进程的最大并发连接数
maxsslconn N 每个haproxy进程ssl最大连接数,用于haproxy配置了证书的 场景下
maxconnrate N 每个进程每秒创建的最大连接数量
spread-checks N 后端server状态check随机提前或延迟百分比时间,建议2 5(20%-50%)之间,默认值0
pidfile 指定pid文件路径
log 127.0.0.1 local2 info 定义全局的syslog服务器;日志服务器需要开启UDP协议, 最多可以定义两个

2.3.2配置文件global的介绍

35dd9def61a1470b97b35cb76b25db05.png

2.3.3示例

2.3.3.1nbproc参数开启多进程

开启前

2f5292124c064a9aa1e2284415d3d39b.png

编辑配置文件

d2e1a3665360462abca66addf4c6b27e.png

开启后的进程

76f46a21e37543bfa4896d43f24b2d8b.png

注意:开启进程不是越多越好,看你的cpu核心数量,你的cpu有几核才能开几个

固定进程的cpu内核使用,避免cpu使用的飘逸

15d9fd19383146f2a2c5acbc9029c7b8.png

2.3.3.2nbthread参数开启多线程

开启前

5b790d5d8aac43c792e9ca6c4dd47959.png

编辑配置文件

d35d068a6c5140fa9a2d32a41752fe17.png

开启后

40e52617b2c54401b59fc25e62b18d8b.png

2.3.3.3自定义日志

编辑rsyslog配置文件

[root@HAProxy ~]# vim /etc/rsyslog.conf

f5d53e82e6d44f7e853da0718d7cd655.png

69982c2f72394c079b58a4c09eaf88e0.png

重启服务

先启动rsyslog再启动haproxy,就可以看到自定义的日志文件已经生成了

c8abdd09347d47d1b06a7768b3f4a4bf.png

注意:global中的参数在defaults中也能写,但是匹配下来后两个配置段中都有的参数defaults会覆盖掉global中的参数

2.4proxies配置

2.4.1proxies-defaults

mode        http        #HAProxy实例使用的连接协议

log        global        #指定日志地址和记录日志条目的

syslog/rsyslog日志设备

                                #此处global表示使用global配置段中设定的log值

option        httplog        #日志记录选项,httplog表示记录与http会话相关的各种数学

                                  #包括http请求、会话状态、连接数、源地址及连接时间等

option        dontlognull        #表示不吉利空会话连接日志

option        http-server-close        #等待客户端完整HTTP请求的时间

option        forwardfor        except 127.0.0.0/8        #透传客户端真实IP至后端web服务器

option        redispatch        #当server id 对应的服务器挂掉后,强制定向到其他健康的服务器,重新派发

option        http-keep-alive        #开启与客户端的会话保持

retries        3        #连接后端服务器失败次数

timeout        http-request        1000s        #等待客户端请求完全被接收和处理的最 长时间

timeout        queue        60s        #设置删除连接和客户端收到503或服务不可 用等提示信息前的等待时间

timeout        connect        120s         #设置等待服务器连接成功的时间

timeout        client        600s         #设置允许客户端处于非活动状态,即既不发 送数据也不接收数据的时间

timeout        server        600s         #设置服务器超时时间,即允许服务器处于既 不接收也不发送数据的非活动时间

timeout        http-keep-alive        60s 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值