负载均衡之HAProxy超全内容!!!

一、负载均衡

1.1 负载均衡概念

负载均衡(Load Balance,简称 LB)是高并发、高可用系统必不可少的关键组件,目标是尽力将网络流量平均分发到多个服务器上,以提高系统整体的响应速度和可用性。

1.2 软件负载均衡

软件负载均衡,应用最广泛,无论大公司还是小公司都会使用。

软件负载均衡从软件层面实现负载均衡,一般可以在任何标准物理设备上运行。

软件负载均衡的 主流产品 有:Nginx、HAProxy、LVS。

LVS 可以作为四层负载均衡器。其负载均衡的性能要优于 Nginx。

HAProxy 可以作为 HTTP 和 TCP 负载均衡器。

Nginx、HAProxy 可以作为四层或七层负载均衡器。

今天要介绍的就是HAPorxy

1.3 四层和七层负载区别

1.3.1 请求过程

四层负载

1. 通过 ip+port 决定负载均衡的去向。
2. 对流量请求进行 NAT 处理,转发至后台服务器。
3. 记录 tcp udp 流量分别是由哪台服务器处理,后续该请求连接的流量都通过该服务器处

 七层负载

1.. 通过虚拟 ur| 或主机 ip 进行流量识别,根据应用层信息进行解析,决定是否需要进行负载均衡。
2. 代理后台服务器与客户端建立连接,如 nginx 可代理前后端,与前端客户端 tcp 连接,与后端服务器建立tcp连接。

 1.3.2 区别

        所谓的四到七层负载均衡,就是在对后台的服务器进行负载均衡时,依据四层的信息或七层的信息来决 定怎么样转发流量。
四层的负载均衡
就是通过发布三层的 IP 地址( VIP ),然后加四层的端口号,来决定哪些流量需要做负载均衡,对需要处理的流量进行NAT 处理,转发至后台服务器,并记录下这个 TCP 或者 UDP 的流量是由哪台服务器处理的,后续这个连接的所有流量都同样转发到同一台服务器处理。
七层的负载均衡
就是在四层的基础上(没有四层是绝对不可能有七层的),再考虑应用层的特征,比如同一个Web 服务器的负载均衡,除了根据 VIP 80 端口辨别是否需要处理的流量,还可根据七层的 URL、浏览器类别、语言来决定是否要进行负载均衡

二、HAProxy基础

2.1 概念

        HAProxy是一款开源、高性能的负载均衡器和代理服务器,专为TCP和HTTP应用而设计。它可以将客户端的请求分发到多台后端服务器,从而提高应用的可用性和性能。HAProxy支持多种负载均衡算法和健康检查机制,是构建高可用性系统的理想选择。

2.2 基本配置信息

下载haproxy

[root@haproxy ~]# yum install -y haproxy
HAProxy 的配置文件 haproxy.cfg 由两大部分组成,分别是:
global :全局配置段
进程及安全配置相关的参数
性能调整相关参数
Debug 参数
proxies :代理配置段
defaults :为 frontend, backend, listen 提供默认配置
frontend :前端,相当于 nginx 中的 server {}
backend :后端,相当于 nginx 中的 upstream {}
listen :同时拥有前端和后端配置 , 配置简单 , 生产推荐使用

2.2.1 global配置

参数作用
chroot锁定运行目录
deamon

以守护进程运行

user,group,uid,gid运行haproxy的用户身份
stats socket

套接字文件

nbproc N
指定每个 haproxy 进程开启的线程数,默认为每个进程一个线程
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.2.2 server配置

check                 #对指定real 进行健康状态检查,如果不加此设置,默认不开启检查 , 只有check后面没有其它配置也可以启用检查功能
                          #默认对相应的后端服务器IP和端口, 利用 TCP 连接进行周期性健康性检查 , 注意必须指定端口才能实现健康性检查
addr <IP>          #可指定的健康状态监测 IP ,可以是专门的数据网段,减少业务网络的流量
port <num>       #指定的健康状态监测端口
inter <num>      #健康状态检查间隔时间,默认 2000 ms
fall <num>         #后端服务器从线上转为线下的检查的连续失效次数,默认为 3
rise <num>         #后端服务器从下线恢复上线的检查的连续有效次数,默认为 2
weight <weight>         #默认为 1 ,最大值为 256 0( 状态为蓝色 ) 表示不参与负载均衡,但仍接受持久连接
backup                 #将后端服务器标记为备份状态, 只在所有非备份主机down机时提供服务,类似Sorry
disabled           #将后端服务器标记为不可用状态,即维护状态,除了持久模式
                        #将不再接受连接,状态为深黄色 , 优雅下线 , 不再接受新用户的请求
redirect prefix http://www.baidu.com/                 #将请求临时(302) 重定向至其它 URL ,只适用于 http 模式
maxconn <maxconn>         #当前后端 server 的最大并发连接数

2.2.3 基础配置

一共四台主机,一台client,一台haproxy,两台后端服务器

client

IP随意,只要与其他三台在同一个网段

webserver1

webserver2

haproxy

 

[root@haproxy ~]# vim /etc/haproxy/haproxy.cfg 

第一种写法:

第二种写法

[root@haproxy ~]# systemctl restart rsyslog.service 

2.3 日志设置

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

将upd模块的注释打开 

重启服务 

 

 2.4 socat工具

        对服务器动态权重和其它状态可以利用 socat 工具进行调整, Socat Linux 下的一个多功能的网络工具,名字来由是Socket CAT ,相当于 netCAT 的增强版 .Socat 的主要特点就是在两个数据流之间建立双向通道,且支持众多协议和链接方式。如 IP TCP UDP IPv6 Socket 文件等调度算法。
socat也叫热处理。
下载socat
修改权重
禁用webcluster1
多线程

修改过配置文件,都需要重启服务

[root@haproxy ~]# systemctl restart rsyslog.service 

stats失效

 

 

三、HAProxy调度算法

HAProxy 通过固定参数 balance 指明对后端服务器的调度算法
balance 参数可以配置在 listen backend 选项中

HAProxy分为静态和动态算法,其他算法

其他算法:可以根据参数在静态和动态算法中相互转换。

3.1 静态算法

3.1.1 static-rr(基于权重的轮询)

不支持运行时利用 socat 进行权重的动态调整 (热处理, 只支持 0 1, 不支持其它值 )
不支持端服务器慢启动
其后端主机数量没有限制,相当于 LVS 中的 wrr 

注:

慢启动是指在服务器刚刚启动上不会把他所应该承担的访问压力全部给它,而是先给一部分,当没
问题后在给一部分

无法热处理

 

3.1.2 first

根据服务器在列表中的位置,自上而下进行调度
其只会当第一台服务器的连接数达到上限,新请求才会分配给下一台服务
其会忽略服务器的权重设置
不支持用 socat 进行动态修改权重 , 可以设置 0 1, 可以设置其它值但无效
如果有maxconn,则匹配maxconn的最大值

无法热处理

 

3.2 动态算法

3.2.1 roundrobin

基于权重的轮询动态调度算法,可以使用socat动态调整权重(热处理)。

优先选取,负载小,再选取权重高的
HAProxy的roundrobin轮询模式不完全等于LVS的RR轮训模式,区别在于
①HAProxy中的roundrobin⽀持慢启动,新加的服务器会逐渐增加转发数;
②HAProxy每个后端backend中最多⽀持4095个real server;
③HAProxy⽀持对real server权重动态调整(socat);

[root@haproxy ~]# vim /etc/haproxy/haproxy.cfg 

[root@haproxy ~]# systemctl restart haproxy.service 

支持热处理 

 

3.2.2 leastconn

当前后端服务器连接最少的优先调度。
①支持加权的最少连接
②支持动态调整权重(热处理,socat)
③支持慢启动

[root@haproxy ~]# vim /etc/haproxy/haproxy.cfg 

[root@haproxy ~]# systemctl restart haproxy.service 

 

3.3 其他算法

其他算法既可作为静态算法,又可通过选项成为动态算法

3.3.1 source

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

源地址hash,基于⽤户源地址hash并将请求转发到后端服务器。
第一种,默认为静态即取模⽅式;
第二种,可以通过hash-type⽀持的选项更改,动态即hash一致方式。

缺点:如果访问客户端时一个家庭,那么所有的家庭的访问流量都会被定向到一台服务器,这时 source 算法的缺陷

动态需要添加: 

3.3.1.1 source之map-base取模法

取模法,基于服务器总权重的hash数组取模。
不⽀持在线调整权重;
不⽀持慢启动;
缺点:当服务器的总权重发⽣变化时,即有服务器上线或下线,都会因权重发⽣变化⽽导致调度结果整体改变。

注:

所谓取模运算,就是计算两个数相除之后的余数, 10%7=3, 7%4=3
map-based 算法:基于权重取模, hash(source_ip)% 所有后端服务器相加的总权重

 

3.3.1.2 source之一致hash法

⼀致性哈希,该hash是动态的。
⽀持在线调整权重;
⽀持慢启动;
优点:当服务器的总权重发⽣变化时,对调度结果影响是局部的,不会引起⼤的变动。
使用场景:在没有做session共享的情况下,想做会话保持。

         

 

3.3.2 uri

基于对用户请求的URI的左半部分或整个uri做hash,再将hash结果对总权重进行取模后
根据最终结果将请求转发到后端指定服务器
适用于后端是缓存服务器场景
默认是静态算法,也可以通过hash-type指定map-based和consistent,来定义使用取模法还是一致性
hash

基于对⽤户请求的uri做hash并将请求转发到后端指定服务器。

3.2.2.1 url_param
  • url_param对用户请求的url中的 params 部分中的一个参数key对应的value值作hash计算,并由服务器总权重相除以后派发至某挑出的服务器,后端搜索同一个数据会被调度到同一个服务器,多用于电商
  • 通常用于追踪用户,以确保来自同一个用户的请求始终发往同一个real server
  • 如果无没key,将按roundrobin算法

3.3.3 hdr

  • 针对用户每个http头部(header)请求中的指定信息做hash
  • 此处由 name 指定的http首部将会被取出并做hash计算,
  • 然后由服务器总权重取模以后派发至某挑出的服务器,如果无有效值,则会使用默认的轮询调度。

四、状态页

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

五、cookie

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

六、IP透传

概念

web 服务器中需要记录客户端的真实 IP 地址,用于做访问统计、安全防护、行为分析、区域排行等场景
七层和四层配置差不多,只有一点区别
配置

七层透传

四层透传

四层http不能透传

七、ACL

  • 访问控制列表ACLAccess Control Lists
  • 是一种基于包过滤的访问控制技术
  • 它可以根据设定的条件对经过服务器传输的数据包进行过滤(条件匹配)即对接收到的报文进行匹配和过 滤,基于请求报文头部中的源地址、源端口、目标地址、目标端口、请求方法、URL、文件后缀等信息内 容进行匹配并执行进一步操作,比如允许其通过或丢弃。
hdr string ,提取在一个 HTTP 请求报文的首部
hdr [<name> [ <occ>]] ):完全匹配字符串 ,header 的指定信息, <occ> 表示在多值中使用的值的出
现次数
hdr_beg [<name> [ <occ>]] ):前缀匹配, header 中指定匹配内容的 begin
hdr_end [<name> [ <occ>]] ):后缀匹配, header 中指定匹配内容 end
hdr_dom [<name> [ <occ>]] ):域匹配, header 中的 dom host
hdr_dir [<name> [ <occ>]] ):路径匹配, header uri 路径
hdr_len [<name> [ <occ>]] ):长度匹配, header 的长度匹配
hdr_reg [<name> [ <occ>]] ):正则表达式匹配,自定义表达式 (regex) 模糊匹配
hdr_sub [<name> [ <occ>]] ):子串匹配, header 中的 uri 模糊匹配 模糊匹配 c 报文中 a/b/c 也会匹 配
base : string
# 返回第一个主机头和请求的路径部分的连接,该请求从主机名开始,并在问号之前结束 , 对虚拟主机有用
<scheme>://<user>:<password>@#<host>:<port>/<path>;<params>#?<query>#<frag>
base : exact string match
base_beg : prefix match
base_dir : subdir match
base_dom : domain match
base_end : suffix match
base_len : length match
base_reg : regex match
base_sub : substring match

 

path : string
# 提取请求的 URL 路径,该路径从第一个斜杠开始,并在问号之前结束(无主机部分)
<scheme>://<user>:<password>@<host>:<port>#/<path>;<params>#?<query>#<frag>
path : exact string match
path_beg : prefix match # 请求的 URL 开头,如 /static /images /img /css
path_end : suffix match # 请求的 URL 中资源的结尾,如 .gif .png .css .js .jpg .jpeg
path_dom : domain match
path_dir : subdir match
path_len : length match
path_reg : regex match
path_sub : substring match
url : string
# 提取请求中的整个 URL
url exact string match
url_beg : prefix match
url_dir : subdir match
url_dom : domain match
url_end : suffix match
url_len : length match
url_reg : regex match
url_sub : substring match

动静分离

八、错误页面

自定义错误页面

重定向错误页面

在default中添加

九、四层负载 

webserver1

webserver2

haproxy

十、HAProxy的HTTPS实现

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/397531.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

做报表用什么工具?不想再用Excel了!!!

一、什么是中国式报表&#xff1f; 不知道大家现在还是使用Excel来制作报表&#xff0c;然后跟领导汇报工作吗&#xff1f;虽然Excel功能很强大&#xff0c;但是用Excel做过中国式报表的小伙伴一定知道它的制作过程有多复杂。 中国式报表可以用一句话简单概括&#xff1a;格式…

Mozilla Firefox侧边栏和垂直标签在131 Nightly版本中开始试用

垂直选项卡和全新的侧边栏体验现已在Mozilla Firefox Nightly 131 中提供。这一更新备受社区期待和要求&#xff0c;我们期待看到它如何提高您的浏览效率和工作效率。如果您想体验一下这项正在进行中的工作&#xff0c;请这样操作&#xff1a; 更新到最新的Nightly版 转到设置…

uniapp本地打包app安装说明

uniapp本地打包app安装说明 目录 uniapp本地打包app安装说明一、打包说明1.HBuilder X 生成本地打包资源2.Android Studio和App离线SDK环境准备2.1 下载Android Studio和 App离线SDK2.2 资源替换2.3 id属性值修改。2.4 添加provider信息到AndroidManifest.xml中的<applicati…

使用Hugging Face构建大型语言模型应用

在本文中&#xff0c;我们将介绍如何使用Hugging Face的大型语言模型&#xff08;LLM&#xff09;构建一些常见的应用&#xff0c;包括摘要&#xff08;Summarization&#xff09;、情感分析&#xff08;Sentiment analysis&#xff09;、翻译&#xff08;Translation&#xff…

Leetcode JAVA刷刷站(14)最长公共前缀

一、题目概述 二、思路方向 在Java中&#xff0c;要编写一个函数来查找字符串数组中的最长公共前缀&#xff0c;我们可以遵循以下步骤&#xff1a; 处理边界条件&#xff1a;如果数组为空或长度为0&#xff0c;直接返回空字符串。初始化最长公共前缀&#xff1a;将数组的第一个…

HarmonyOS 3.1/4.0应用升级到HarmonyOS NEXT改动点

在 “2024鸿蒙零基础快速实战-仿抖音App开发&#xff08;ArkTS版&#xff09;”&#xff08;https://coding.imooc.com/class/843.html&#xff09;视频课程中&#xff0c;因为讲师在该课程授课时是使用的HarmonyOS 3.1/4.0应用&#xff08;API 9&#xff09;&#xff0c;如果部…

在亚马逊云科技上搭建云原生生成式AI教育学习平台

项目简介&#xff1a; 小李哥将继续每天介绍一个基于亚马逊云科技AWS云计算平台的全球前沿AI技术解决方案&#xff0c;帮助大家快速了解国际上最热门的云计算平台亚马逊云科技AWS AI最佳实践&#xff0c;并应用到自己的日常工作里。 本次介绍的是如何利用亚马逊云科技大模型托…

1.2 C 语言环境:MinGW 与 CLion 的安装与配置

目录 1 C 语言的由来 2 安装 MinGW 编译器 3 Windows 中安装 CLion 开发环境 3.1 安装 CLion 开发环境 3.2 运行试用 30 天 3.3 新建项目​ 3.4 汉化 4 Mac 中安装 Clion 开发环境 4.1 安装 CLion 开发环境 4.2 运行试用 30 天 4.3 新建项目 ​4.4 汉化 5 向日葵的…

突破百度网盘的下载限速,两种方法教会你【超详细】

一、前言 Hello&#xff0c;大家后&#xff0c;我是博主英杰&#xff0c;前几天&#xff0c;我在使用百度网盘过程中&#xff0c;下载速度极慢&#xff0c;自己作为一个白嫖党&#xff0c;开会员也是心疼那点钱&#xff0c;所以在网上找了几个有效解决百度网盘限速问题的教程&a…

arcgis-坡度坡向分析

坡向的描述有定性和定量两种方式&#xff0c;定量是以东为0&#xff0c;顺时针递增&#xff0c;南为90&#xff0c;西为180&#xff0c;北为270等&#xff0c;范围在0&#xff5e;35959′59″之间。 定性描述有8方向法和4方向法. 8 方向为东、东南、南、西南、西、西北、北、东…

JavaWeb-01(Java进阶内容详解,Html、CSS、JS)

一、前端技术结构分析 网页的结构&#xff08;HTML&#xff09;、表现(CSS)、行为(JS) 1.HTML定义界面整体结构 2.CSS定义页面样式 3.JS实现动态效果 二、HTML 2.1安装VS Code及前端开发插件 Chinese (Simplified) (简体中文) Language Pack for Visual Studio Code Code Spe…

golang并发控制

常见的并发控制 常见的并发控制 channel:通过无缓冲的channel进行同步调用&#xff0c;有缓冲的channel进行异步调用&#xff0c;也可限制并发数量 waitgroup:可以通过add来动态调整&#xff0c;释放的时间需要使用defer 进行wg.done操作 context&#xff1a;通过在协程之间…

笔记本CPU天梯图(2024年8月),含AMD/骁龙等新CPU

原文地址&#xff08;高清无水印原图/持续更新/含榜单出处链接&#xff09;&#xff1a; 2024年8月笔记本CPU天梯图 2024年8月笔记本CPU天梯图 2024年8月5日更新日志&#xff1a;常规更新Cinebench R23、PassMark笔记本CPU天梯图&#xff0c;新增Geekbench 6.2单核多核天梯图&…

inner join, left join, right join, full join 的区别

1. 初始化表结构 SET NAMES utf8mb4; SET FOREIGN_KEY_CHECKS 0;-- ---------------------------- -- Table structure for t_city -- ---------------------------- DROP TABLE IF EXISTS t_city; CREATE TABLE t_city (id varchar(255) CHARACTER SET utf8mb4 COLLATE utf…

Windows Server修改远程桌面端口

新建入站规则 填写端口 允许连接 修改远程桌面端口 winR打开注册表 计算机\HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Terminal Server\Wds\rdpwd\Tds\tcp修改PortNumber为新端口 计算机\HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Terminal Server\Wi…

根据 IP 地址配置子网示例(下挂 hub 接不同 vlan 终端)

我们一般根据端口配置子网比较简单&#xff0c;但是如果换接口&#xff0c;就又要到交换机上重新配置端口所属 vlan 了&#xff0c;紧急情况下&#xff0c;还是比较耽误时间的。但如果根据IP地址配置 vlan&#xff0c;则可以插在交换机上任意端口&#xff0c;排障时比较节省时间…

深入理解Linux线程:从基础到进阶的全面指南

目录 一.线程概念1.理解Linux下的线程2.线程优缺点与异常3.线程VS进程4.再谈进程地址空间 二.线程控制1.线程的创建使用2.线程在进程地址空间的结构3.初窥多线程4.多线程抢票 三.线程互斥1.进程线程间的互斥相关背景概念2.互斥锁 四.线程安全1.线程安全和可重入函数2.死锁3.线程…

人工智能时代:程序员的核心竞争力重塑之旅

人工智能时代&#xff1a;程序员的核心竞争力重塑之旅 在人工智能&#xff08;AI&#xff09;技术日新月异的今天&#xff0c;程序员的角色与职责正经历着前所未有的变革。随着自动化、智能化工具的普及&#xff0c;许多传统编程任务被高效替代&#xff0c;这不禁让人思考&…

【基础算法总结】BFS 解决 FloodFill 算法

BFS 解决 FloodFill 算法 1.图像渲染2.岛屿数量3.岛屿的最大面积4.被围绕的区域 点赞&#x1f44d;&#x1f44d;收藏&#x1f31f;&#x1f31f;关注&#x1f496;&#x1f496; 你的支持是对我最大的鼓励&#xff0c;我们一起努力吧!&#x1f603;&#x1f603; FloodFill 算…

【基础算法总结】BFS 解决最短路径问题

BFS 解决最短路径问题 1.最短路径问题简介2.迷宫中离入口最近的出口3.最小基因变化4.单词接龙4.为高尔夫比赛砍树 点赞&#x1f44d;&#x1f44d;收藏&#x1f31f;&#x1f31f;关注&#x1f496;&#x1f496; 你的支持是对我最大的鼓励&#xff0c;我们一起努力吧!&#x1…