负载均衡群集---Haproxy

目录

一、HAproxy

一、概念

二、核心作用

三、主要功能特性

四、应用场景

五、优势与特点

[二、 案例分析](#二、 案例分析)

[1. 案例概述](#1. 案例概述)

[2. 案例前置知识点](#2. 案例前置知识点)

[(1)HTTP 请求](#(1)HTTP 请求)

(2)负载均衡常用调度算法

[(3)常见的 web 群集调度器](#(3)常见的 web 群集调度器)

[三、实验案例(HAproxy 搭建Web群集)](#三、实验案例(HAproxy 搭建Web群集))


一、HAproxy

一、概念

HAProxy 是一款 开源、高性能的负载均衡与反向代理工具 ,基于 C 语言 开发,支持 四层(传输层)七层(应用层) 流量处理,广泛用于高并发场景下的服务调度、流量分发和系统高可用性保障。

  • 核心定位:介于客户端和后端服务器之间的中间层,将客户端请求均匀分配到多个后端服务器,同时监控服务器状态,确保请求高效、可靠地处理。
  • 官网www.haproxy.org
二、核心作用
  1. 负载均衡(Load Balancing)
    • 将客户端请求按预设算法(如轮询、最少连接、源 IP 哈希等)分发到多个后端服务器,避免单点压力过大,提升系统吞吐量。
  2. 高可用性(High Availability)
    • 通过 健康检查(如定期发送心跳包)实时监测后端服务器状态,自动隔离故障节点,待节点恢复后重新纳入负载均衡池,保障服务连续性。
  3. 会话保持(Session Persistence)
    • 基于 Cookie、源 IP 或请求头 等信息,将同一用户的请求固定路由到同一后端服务器,确保会话状态一致(如登录用户的请求始终由同一服务器处理)。
  4. 协议处理与转发
    • 四层代理:处理 TCP/UDP 流量,基于 IP + 端口转发(如数据库、Redis 服务)。
    • 七层代理:解析 HTTP/HTTPS 协议,基于 URL、Header、Cookie 等应用层信息精细化路由(如 Web 服务、API 网关)。
  5. 流量优化与安全
    • 支持 HTTP 压缩、SSL 卸载(HTTPS 解密)、请求缓存,减少服务器负载;
    • 提供基本的 ACL(访问控制列表),阻挡恶意流量(如限制特定 IP 访问)。
三、主要功能特性
特性 说明
多模式支持 - TCP 模式(四层):适用于任意基于连接的协议(如 MySQL、MQ); - HTTP 模式(七层):支持 HTTP/HTTPS 协议解析与处理。
负载均衡算法 支持轮询(Round Robin)、最少连接(Least Connections)、源 IP 哈希(Source Hash)、URI 哈希等多种算法。
健康检查机制 支持 HTTP/HTTPS、TCP、ICMP 等协议的健康检查,可自定义检查频率、超时时间。
动态配置与热更新 支持通过配置文件或 API 动态调整后端服务器列表,无需重启服务即可生效。
监控与统计 内置 stats 页面,实时展示请求量、错误率、服务器状态等指标,便于运维监控。
连接管理优化 支持连接复用(Keep-Alive)、连接队列管理,减少 TCP 三次握手开销,提升并发性能。
四、应用场景
  1. Web 服务负载均衡
    • 作为 Web 服务器(如 Nginx、Tomcat)的前端代理,按 URL 路径、用户地域等规则分流请求。
  2. API 网关与微服务架构
    • 在微服务架构中,对 API 请求进行路由、流量控制和熔断处理,保障服务稳定性。
  3. TCP 协议服务代理
    • 为数据库(如 MySQL、PostgreSQL)、消息队列(如 Kafka、RabbitMQ)提供四层负载均衡,提升连接效率。
  4. 混合架构中的中间层
    • 常与 LVS(四层负载均衡) 结合使用:LVS 作为流量入口进行初步分发,HAProxy 作为二级代理进行七层精细化处理。
五、优势与特点
  • 高性能:单台服务器可支持数万并发连接,吞吐量接近硬件负载均衡器(如 F5)。
  • 轻量级与灵活性:配置简单,支持复杂路由逻辑,适合中小规模集群和复杂业务场景。
  • 稳定性:在金融、电商等对可用性要求高的行业中广泛使用(如 GitHub、Spotify 等)。
  • 开源免费:社区活跃,文档丰富,支持二次开发。

典型架构 :

sql 复制代码
客户端 <----> HAProxy(负载均衡与代理) <----> 后端服务器集群(Web/API/数据库)
          ↑
          └── 健康检查 & 动态调度

二、 案例分析

1. 案例概述

HAproxy 是目前比较流行的群集调度工具,同类群集调度有很多,如LVS和Nginx.

LVS性能最好,但部署复杂;Nginx的upstream 模块支持群集功能但对群集节点健康检查功能不强,高并发性能没有HAproxy好。

2. 案例前置知识点

(1)HTTP 请求

通过 URL 访问网站使用协议是HTTP协议,称为HTTP请求。

请求方式常见为GET和POST方式。当访问时,会根据请求URL返回状态码。

关键步骤

  1. 客户端发送 HTTP 请求(方法 + URL + Headers + Body)

  2. 负载均衡器根据调度算法选择后端节点

  3. Web 服务器解析请求,访问缓存/数据库

  4. 生成响应(状态码 + Headers + HTML/JSON)

(2)负载均衡常用调度算法

算法 原理 适用场景 案例选择
轮询 (RR) 按序分配请求 服务器性能均衡 静态资源分发
加权轮询 (WRR) 根据权重分配请求 服务器性能差异大 Web 服务器集群
最小连接 (LC) 优先选择当前连接数最少的节点 长连接服务(如数据库) Redis 访问
IP 哈希 (SH) 相同 IP 固定分配到同一节点 需要会话保持的场景 用户购物车

(3)常见的 web 群集调度器

类型 代表工具 工作层级 案例应用 特点
四层调度器 LVS 传输层 入口流量分发 高性能,支持百万并发
七层调度器 Nginx 应用层 HTTP/HTTPS 请求处理 支持 URL 重写、SSL 卸载
云原生调度 Kubernetes Ingress 应用层 容器化环境 自动扩缩容,服务发现

三、实验案例(HAproxy 搭建Web群集)

境:Web:102 103 代理服务器:101

部署 :

sql 复制代码
#web部署
102 103:
dnf -y install httpd
systemctl stop firewalld
systemctl distable firewalld
setenforce 0

101:
echo "test2">/var/www/html/index.html
102:
echo "test3">/var/www/html/index.html
 
systemctl restart httpd
systemctl enable httpd
sql 复制代码
#HA代理部署
-测试网站 curl 192.168.10.102/103
-安装haproxy
dnf -y install haproxy


#日志文件  /var/log/messages

-配置文件
vim /etc/haproxy/haproxy.cfg
====================================
global
    log         127.0.0.1 local2
    chroot      /var/lib/haproxy   //禁锢目录
    pidfile     /var/run/haproxy.pid    //pid文件,运行时生成
    user        haproxy    //用户
    group       haproxy     //用户组
    daemon       //守护进程
    maxconn     4000   //最大连接数

defaults     //默认模式,决定haproxy工作在哪一层
    mode                    http
    log                     global   //日志记录为全局模式
    option                  httplog   //开启 HTTP 格式的日志记录
    option                  dontlognull   //不记录空值相关的日志
    retries                 3     //默认重试次数
    timeout http-request    5s   // HTTP 请求超时时间
    timeout queue           1m     //等待时间
    timeout connect         5s     //规定连接建立的超时时间
    timeout client          1m		//客户端连接的超时时间
    timeout server          1m		//服务器端连接的超时时间
    timeout http-keep-alive 5s   	//持久连接超时时间
    timeout check           5s    //检查的超时时间
    maxconn                 3000   //最大并发连接数

#删除defaults下面内容
配置新内容------
listen myweb   
	bind 0.0.0.0:80   //监听所有网卡的80端口(haproxy 的端口取决于监听的服务端口是多少它就是多少)
	option httpchk GET /index.html  //通过发送请求到服务器来进行健康检查
	balance roundrobin //负载均衡算法 为 轮询算法
	server inst1 192.168.10.102:80 check inter 2000 fall 3   
	//用于服务器相关配置或监测
	server inst2 192.168.10.103:80 check inter 2000 fall 3 
	
#启动服务
systemctl start haproxy
sql 复制代码
#HA proxy 日志(默认在系统syslog日志中,不方便,单独定义出来)
配置文件
vim /etc/haproxy/haproxy.cfg
global
    log     127.0.0.1 local2
    log   	127.0.0.1 local3
   

配置Rsyslog服务
vim /etc/rsyslog.d/haproxy.conf     //添加一个日志服务的配置文件
$ModLoad imudp
$UDPServerRun 514
local3.*/var/log/haproxy.log
&~      //标注参数的结束

重启
systemctl restart haproxy
systemctl restart rsyslog

测试日志信息
cat  /var/log/haproxy.log
tail -f /var/log/haproxy.log   (自动生成,重新访问网站会生成)

会显示日志信息
相关推荐
zhcong_1 小时前
LVS+Keepalived高可用群集
linux·运维·lvs
Angel Q.2 小时前
系统是win11+两个ubuntu,ubuntu20.04和ubuntu22.04,想删除ubuntu20.04且不用保留数据
linux·运维·ubuntu
JzjSunshine2 小时前
配置远程无密登陆ubuntu服务器时无法连接问题排查
linux·运维·ubuntu
爱奥尼欧2 小时前
【Linux】环境变量完全解析
linux·运维·服务器
愚润求学4 小时前
【Linux】mmap文件内存映射
linux·运维·服务器·开发语言·c++
Ealrang5 小时前
Linux分区总结
运维
江湖有缘6 小时前
【Docker管理工具】部署Docker管理面板DweebUI
运维·docker·容器
linux行者6 小时前
Linux 资源限制(进程级,用户级,系统级)
linux·运维·服务器
唐骁虎6 小时前
Ubuntu 桌面版忘记账户密码的重置方法
linux·运维·服务器·ubuntu
wusam7 小时前
Linux系统管理与编程24:基础条件准备-混搭“本地+阿里云”yum源
linux·运维·阿里云·shell