全网最最最具体的haproxy详解!!!

打印 上一主题 下一主题

主题 963|帖子 963|积分 2889

1 什么是负载平衡

负载平衡(Load Balancing)是一种将网络哀求或工作负载分散到多个服务器或计算机资源上的技术,以实现优化资源使用、进步系统吞吐量、加强数据冗余和故障容错本领、以及淘汰响应时间的目的。在分布式系统、云计算环境、Web服务等领域中,负载平衡是一项至关紧张的技术。
负载平衡的根本原理是将进入系统的哀求或数据流量按照肯定的规则分配到后端的多个服务器或资源上进行处置惩罚。这些规则可以是基于哀求的源IP地点、目标IP地点、端标语、协议范例、URL路径、哀求内容等信息的,也可以是基于服务器当前的负载状况、响应时间、健康状况等动态信息的。
负载平衡器(Load Balancer)是实现负载平衡功能的硬件或软件设备。它可以是一个独立的物理设备,也可以是在服务器上运行的软件程序。负载平衡器负责接收来自客户端的哀求,然后根据设置的负载平衡策略将哀求转发给后端服务器集群中的一台或多台服务器进行处置惩罚。同时,负载平衡器还必要监控后端服务器的健康状况,确保只将哀求转发给正常工作的服务器。
负载平衡可以带来以下利益:

  • 进步系统吞吐量:通过并行处置惩罚哀求,可以显着进步系统的处置惩罚本领,淘汰用户等候时间。
  • 优化资源使用:根据服务器的实际负载情况动态分配哀求,避免某些服务器过载而其他服务器空闲的情况。
  • 加强数据冗余和故障容错本领:通过将数据分布在多个服务器上,可以进步数据的可用性和容错性,即使某些服务器出现故障,也不会影响整个系统的正常运行。
  • 淘汰响应时间:通过淘汰单个服务器的负载,可以缩短哀求的处置惩罚时间,进步用户体验。
常见的负载平衡算法包罗轮询(Round Robin)、最少连接(Least Connections)、源地点哈希(Source Hashing)、加权轮询(Weighted Round Robin)等。这些算法各有优缺点,实用于不同的应用场景和需求。
在实际应用中,负载平衡通常与反向署理(Reverse Proxy)、内容分发网络(CDN)、微服务架构等技术结合使用,以提供更高效、可靠、可扩展的系统解决方案。
 2 haproxy简介

HAProxy(High Availability Proxy)是一款由法国人Willy Tarreau开发的高性能、开源的TCP和HTTP负载平衡器。它使用C语言编写,具备高并发处置惩罚本领和丰富的功能特性,广泛应用于各种必要高负载和高可用性的Web站点和应用程序中。以下是对HAProxy的具体介绍:
2.1 根本概述



  • 开发者:Willy Tarreau
  • 范例:高性能的TCP和HTTP负载平衡器
  • 特点:免费、快速、可靠
  • 重要功能:负载平衡、健康检查、会话保持、SSL/TLS支持、HTTP重写、压缩等
2.2 重要特性


  • 高性能:HAProxy采取事件驱动模子,能够处置惩罚大量并发连接,支持数以万计的并发连接,特别适合高负载的Web站点。
  • 灵活性强:支持多种负载平衡算法和调度策略,如轮询、最少连接、源地点哈希等,适应不同的应用场景。
  • 高可用性:通过健康检查和故障转移机制,确保服务的一连性。当后端服务器出现故障时,HAProxy会自动将其从负载平衡池中移除,并在服务器规复后重新添加。
  • 丰富的功能:支持SSL终止、HTTP重写、压缩等多种功能,提升应用的性能和安全性。
  • 易于集成:HAProxy可以简单地集成到现有的架构中,同时掩护Web服务器不被直接暴露在网络上。
2.3 工作原理

HAProxy的工作流程重要包罗以下几个步骤:

  • 客户端哀求:客户端发送哀求到HAProxy的前端。
  • 前端处置惩罚:前端根据设置的规则(如负载平衡算法、ACL规则等)选择合适的后端。
  • 后端转发:前端将哀求转发到选定的后端服务器进行处置惩罚。
  • 服务器响应:后端服务器处置惩罚哀求并返回结果给前端。
  • 返回客户端:前端将处置惩罚结果返回给客户端。
2.4 负载平衡算法

HAProxy支持多种负载平衡算法,以满足不同的需求:


  • 轮询(Round Robin):将哀求依次分配给每个后端服务器。
  • 最少连接(Least Connections):将哀求分配给当前连接数最少的服务器。
  • 源地点哈希(Source Hashing):根据客户端的IP地点分配哀求,确保同一客户端的哀求总是分配到同一台服务器。
  • 加权轮询(Weighted Round Robin):根据服务器的权重分配哀求,权重高的服务器分配更多的哀求。
2.5 健康检查机制

为了确保哀求只被分配到正常工作的服务器,HAProxy提供了健康检查机制。健康检查可以定期检测后端服务器的状态,并根据检测结果动态调整服务器的可用性。常见的健康检查范例包罗TCP连接检查、HTTP哀求检查等。
2.6 应用场景

HAProxy特别实用于那些负载特大的Web站点,这些站点通常又必要会话保持或七层处置惩罚。此外,HAProxy还可以用于数据库负载平衡、API网关、微服务架构中的服务发现与负载平衡等场景。
3 设置haproxy实验环境

搭建三个红帽9镜像的虚拟机并关闭防火墙
3.1 haproxy


设置IP 

3.2 webserver1


设置IP

安装nginx


3.3 webserver2


设置IP

安装nginx


4 haproxy的根本部署方法及负载平衡的实现

haproxy
安装haproxy

haproxy设置文件

4.1 设置文件结构

HAProxy的设置文件通常包含五个重要部分:

  • global:参数是进程级的,通常是和操作系统相关。这些参数一样平常只设置一次,如果设置无误,就不必要再次进行修改。
  • defaults:设置默认参数,这些参数可以被用到frontend、backend、listen组件。
  • frontend:接收哀求的前端虚拟节点,Frontend可以基于规则直接指定具体使用的后端backend。
  • backend:后端服务集群的设置,是真实服务器,一个Backend对应一个或者多个实体服务器。
  • listen:Frontend和backend的组合体。
4.2 关键设置项

1. global部分



  • 日志纪录:定义日志纪录的地点和级别,如log 127.0.0.1 local0 info。
  • chroot:将进程的根目录更改为指定目录,进步安全性。
  • 用户和用户组:指定运行HAProxy的用户和用户组。
  • 最大连接数:设置HAProxy可以处置惩罚的最大连接数。
  • 其他系统级设置:如daemon使HAProxy在后台运行,stats socket定义统计信息的Unix套接字位置等。
2. defaults部分



  • 日志范例:如option httplog启用HTTP日志。
  • 连接设置:设置最大连接数、连接超时时间等。
  • 负载平衡算法:如balance roundrobin设置默认负载平衡方式为轮询。
  • 健康检查:设置健康检查的相关参数,如重试次数、检查间隔等。
3. frontend部分



  • 绑定地点和端口:定义HAProxy监听的地点和端口,如bind 0.0.0.0:80。
  • 协议:设置处置惩罚哀求的协议,如HTTP或TCP。
  • ACL和过滤器:设置访问控制列表(ACL)和过滤器,以决定怎样处置惩罚哀求。
4. backend部分



  • 服务器列表:定义后端服务器列表,包罗服务器的IP地点、端标语、权重等。
  • 健康检查:设置对后端服务器的健康检查,确保只有健康的服务器才气接收哀求。
5. listen部分



  • 组合设置:将frontend和backend的设置组合在一起,形成一个完整的监听器设置。
4.3 示例设置

以下是一个简单的haproxy设置示例:
[code][/code]

4.4 留意事项



  • 在设置HAProxy时,必要根据实际的应用场景和需求来选择合适的设置参数。
  • 设置完成后,必要仔细检查设置文件是否有误,并测试HAProxy是否能够正常工作。
  • 在生产环境中,建议对HAProxy进行监控和日志纪录,以便及时发现和解决问题。
5  haproxy的设置参数及日志分离

5.1 haproxy的设置参数

HAProxy的全局设置(global section)是其设置文件中的紧张部分,它包含了影响HAProxy进程及其操作的全局性设置。这些参数通常是进程级别的,并且与操作系统相关。以下是对HAProxy全局设置的一些具体说明:
1. 进程管理及安全相关参数



  • chroot:将HAProxy的工作目录更改到指定的目录,并在放弃权限之前实行chroot()操作。这可以提升HAProxy的安全级别,但必要留意的是,指定的目录必须为空且任何用户都不能有写权限。
  • daemon:使HAProxy以守护进程的方式在后台运行。这等同于命令行中的"-D"选项。
  • gid 和 group:分别以指定的GID(组ID)或组名运行HAProxy。建议使用专为运行HAProxy创建的GID或组名,以淘汰权限风险。
  • log:定义全局的日志服务器和日志级别。可以指定最多两个日志服务器,并设置日志的级别(如info、warning、error等)。
  • nbproc:指定启动的HAProxy进程数。默认情况下,只启动一个进程。但在某些情况下,可能必要启动多个进程以进步性能或进行调试。
  • pidfile:指定HAProxy进程的PID文件位置,该文件包含HAProxy主进程的进程ID。
  • uid 和 user:分别以指定的UID(用户ID)或用户名运行HAProxy。
2. 性能调整相关参数



  • maxconn:设置每个HAProxy进程所能继承的最大并发连接数。这是一个紧张的性能参数,必要根据服务器的实际负载进行调整。
  • ulimit-n:设置每个HAProxy进程可以打开的最大文件描述符数。默认情况下,HAProxy会自动计算这个值,但在某些情况下,可能必要手动调整以优化性能。
3. 超时时长相关参数



  • timeout connect:定义HAProxy将客户端哀求转发到后端服务器所等候的超时时长。
  • timeout client:客户端非活动状态的超时时长。
  • timeout server:客户端与服务器端建立连接后,等候服务器响应的超时时长。
  • timeout http-keep-alive:定义HTTP恒久连接的超时时长。
  • timeout check:健康检查时的超时时长。
4. 调试相关参数



  • debug:启用调试模式,提供更具体的日志信息。这通常只在调试过程中使用,不建议在生产环境中启用。
  • quiet:淘汰日志信息的输出量,使日志更加简便。
5. 其他参数



  • stats socket:定义一个UNIX域套接字,用于通过命令行工具(如socat)与HAProxy进行交互,获取实时统计信息。
  • node:定义节点的名称,这在HA场景中特别有用,当多个HAProxy进程共享同一个IP地点时。
5.2 haproxy的日志分离

打开设置日志文件

在设置文件里打开UDP协议

设置haproxy日志位置

6 proxies中的常用设置参数

6.1 前端设置(frontend)



  • bind:定义前端监听的地点和端口,例如bind 0.0.0.0:80。
  • mode:设置前端运行的协议(tcp或http)。
  • option httplog:启用http日志(如果前端处置惩罚的是HTTP哀求)。
  • acl:定义访问控制列表(ACL),用于根据特定条件路由哀求,例如acl php_web path_end .php。
  • use_backend:根据ACL的匹配结果,将哀求转发到指定的后端服务器组,例如use_backend php_server if php_web。
6.2 后端设置(backend)



  • mode:设置后端运行的协议(tcp或http)。
  • balance:定义后端服务器的负载平衡算法,如轮询(roundrobin)、最少连接(leastconn)等。
  • server:定义后端服务器的地点、端口和其他参数,例如server web1 192.168.1.1:80 check。
  • option httpchk:开启对后端服务器的健康检查,通常通过HTTP哀求完成,例如option httpchk GET /index.html。
6.3 监听设置(listen)



  • bind:定义监听的地点和端口,与frontend中的bind类似。
  • mode:设置监听的协议(tcp或http)。
  • stats:设置监控页面的相关参数,如启用监控、设置监控页面的URL和刷新间隔等。
6.4 server设置

6.4.1 根本参数



  • name:为此服务器指定一个标识名称,这个名称将出现在日志文件中,用于区分不同的后端服务器。
  • address:填写后端服务器的IP地点,也支持使用可分析的主机名称。
  • port:指定将连接发今后端服务器的目标端口,如果未设定,则通常使用客户端哀求的端口。
6.4.2 健康检查参数



  • check:启用对此服务器的TCP健康状态检查。默认情况下,HAProxy会实验连接到后端服务器的指定端口来检查其可用性。
  • inter:设置健康状态检查的时间间隔(单元为毫秒),默认为2000毫秒。
  • rise:设置后端服务器从离线状态转换为正常状态必要乐成检查的次数。
  • fall:设置后端服务器从正常状态转换为不可用状态必要检查的失败次数。
6.4.3 其他参数



  • backup:将此服务器设置为备用服务器。在负载平衡场景中,当所有正常服务器均不可用时,此备用服务器将顶替提供服务。
  • maxconn:指定此服务器继承的最大并发连接数。这有助于防止单个服务器过载,影响整体服务的稳固性。
7 haproxy热更新方法

7.1 安装socat


7.2 查看haproxy资助


7.3 查看haproxy状态


7.4 更改权重


7.5 查看servers状态


7.6 关闭一台主机



7.7 打开一台主机



7.8 haproxy多进程热处置惩罚

在设置文件里

 

8 haproxy中的算法

8.1 静态算法

8.1.1 static-rr

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

8.1.2 first

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

8.2 动态算法

8.2.1 roundrobin

1.基于权重的轮询动态调度算法
2.支持权重的运行时调整,不同于Ivs中的rr轮训模式
3.HAProxy中的roundrobin支持慢启动(新加的服务器会逐渐增加转发数
4.其每个后端backend中最多支持4095个real server
5.支持对real server权重动态调整
6.roundrobin为默认调度算法,此算法使用广泛

8.2.2 leastconn

leastconn加权的最少连接的动态
支持权重的运行时调整和慢启动,即:根据当前连接最少的后端服务器而非权重进行优先调度(新客户端连接)
比力适合长连接的场景使用,比如:MySQL等场景。

8.3 其他算法

8.3.1 source


8.3.1.1 一致性hash

一致性哈希,当服务器的总权重发生变化时,对调度结果影响是局部的,不会引起大的变动hash(o)mod n
该hash算法是动态的,支持使用 socat等工具进行在线权重调整,支持慢启动

8.3.2 uri

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

8.3.3 url_param 

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

8.3.4 hdr

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

9 haproxy的状态页面监控

9.1 在设置文件中编辑状态页


9.2 测试


10 基于cookie的会话保持

10.1 设置


10.2 测试



11 ip透传技术

11.1 七层穿透 

11.1.1 关闭nginx并下载httpd


11.1.2 测试页面


11.1.3 打开httpd


11.1.4 在设置文件中编辑



11.1.5 测试




11.2 四层穿透


11.2.1 在设置文件中编辑


11.2.2 在webserver2的nginx设置文件编辑



12 haproxy的访问控制列表

分析
 
12.1 ACL-name名称

12.1.1  在设置文件中编辑


12.1.2 测试 


12.2 ACL-criterion匹配规范

12.2.1 hdr_end()

12.2.1.1  在设置文件中编辑


12.2.1.2 测试


12.2.2 hdr_beg()

12.2.2.1  在设置文件中编辑


12.2.2.2 测试


12.2.3 base_sub()

12.2.3.1 在设置文件中编辑


12.2.3.2 测试



12.2.4 base_reg()

12.2.4.1 在设置文件中编辑


12.2.4.2 测试


12.2.5 path_sub()

12.2.5.1 在设置文件中编辑


12.2.5.2 测试


13 利用acl做动静分离等访问控制

13.1 基于域名

13.1.1 在设置文件中编辑


13.1.2 测试


13.2 基于网段

13.2.1 在设置文件中编辑


 13.2.2 测试



13.2.2 在设置文件中编辑


13.2.4 测试




13.3 基于欣赏器 

13.3.1 在设置文件中编辑


13.3.2 测试



13.4 动静分离


13.4.1 静态分离

13.4.1.1 打开设置文件



13.4.1.2 在设置文件中编辑


13.4.1.3 测试


13.4.2 动态分离

13.4.2.1 在设置文件中编辑


13.4.2.2 测试



14 自动义错误页面内容

14.1 创建文件


14.2 在文件里编辑 


14.2 在设置文件中编辑


14.3 测试


14.4 定向到百度

14.4.1 在设置文件中编辑


14.4.2 测试


15 hapoxy的四层负载示例

15.1 webserver1

安装数据库




15.2 webserver2

与webserver1一样


15.3 haproxy安装数据库


15.4 webserver1和webserver2都做用户暗码


15.5 在设置文件里编辑


15.6 测试




16 https的加密访问

16.1 可视

16.1.1 创建目录并设置证书



16.1.2 在设置文件里编辑


16.1.3 测试


16.2 全站加密

16.2.1 在设置文件里编辑


16.2.2 创建webcluster.cfg文件并设置



16.2.3 测试










免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

大连密封材料

金牌会员
这个人很懒什么都没写!
快速回复 返回顶部 返回列表