负载均衡群集---Haproxy

发布于:2025-05-31 ⋅ 阅读:(21) ⋅ 点赞:(0)

目录

一、HAproxy

一、概念

二、核心作用

三、主要功能特性

四、应用场景

五、优势与特点

二、 案例分析

1. 案例概述

2. 案例前置知识点

(1)HTTP 请求

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

(3)常见的 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 等)。
  • 开源免费:社区活跃,文档丰富,支持二次开发。

典型架构 :

客户端 <----> 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

部署 :

#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
#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
#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   (自动生成,重新访问网站会生成)

会显示日志信息


网站公告

今日签到

点亮在社区的每一天
去签到