使用Haproxy搭建Web群集

发布于:2025-06-20 ⋅ 阅读:(16) ⋅ 点赞:(0)

一、简介

1、HTTP 请求

        通过 URL 访问网站使用的协议是 HTTP 协议,此类请求一般称为 HTTP 请求。HTTP 请求的方式分为 GET 方式和 POST 方式。当使用浏览器访问某一个 URL,会根据请求 URL 返回状态码,通常正常的状态码为 2××、3××(如 200、301),如果出现异常会返回 4××、5××(如 400、500)。

        例如,访问 http://www.test.com/a.php?Id=123,就是一个 GET 请求,如果访问正常,会从服务器的日志中获取 200 状态码。假如此请求使用 POST 方式,那么传递给 a.php 的 Id 参数依旧是 123,但是浏览器的 URL 将不会显示后面的 Id=123 字样,因此表单类或者有用用户名、密码等内容提交时建议使用 POST 方式。不管使用哪种方式,最终 a.php 获取的值是一样的。

2、负载均衡常用调度算法
 

LVS、Haproxy、Nginx 最常用的调度算法
算法名称 英文缩写 算法描述 示例说明 优缺点
轮询调度算法 RR(Round Robin) 最简单常用,轮询分配访问请求实现负载均衡,有加权轮询,依节点权重分配 三个节点 A、B、C,用户访问按 A、B、C、A…… 轮询指派 优点:简单易用,实现负载均衡;缺点:未考虑节点实际性能差异(基础轮询 )
最小连接数算法 LC(Least Connections) 根据后端节点连接数大小动态分配前端请求,将新请求给连接数最小的节点 三个节点 A、B、C 连接数为 4、5、6,新请求先给 A,再给 A,后给 B…… 优点:相比 RR 算法有改进,考虑节点连接负载情况,常用;缺点:实际中连接数动态变化,需精准维护连接数统计
基于来源访问调度算法 SH(Source Hashing) 用于服务器端有 Session 会话记录场景,基于来源 IP、Cookie 等做群集调度,实现会话保持 三个节点 A、B、C,基于 IP,用户第一次访问 A,后续访问仍到 A;用户第一次到 B,后续仍到 B 优点:实现会话保持;缺点:某些 IP 访问量大时,易致负载不均衡,部分节点压力过大

二、实验案例:

1、实验拓扑

主机 操作系统 IP 地址 应用
haproxy openEuler 24.03 192.168.10.101 haproxy
web1 openEuler 24.03 192.168.10.102 apache
web2 openEuler 24.03 192.168.10.103 apache
客户端 openEuler 24.03 192.168.10.104 ————

2、102、103web网站主机

2.1、部署网站

dnf -y install httpd

2.2、编辑测试网页

echo "111">/var/www/html/index.html

echo "222">/var/www/html/index.html

2.3、启动服务

systemctl start httpd

3、101:haproxy主机

3.1、安装服务

dnf -y install haproxy

3.2、编辑配置文件

vim /etc/haproxy/haproxy.cfg

##编辑内容##
global
    log         127.0.0.1 local2  # 定义日志记录,将日志发送到本机 127.0.0.1 的 local2 日志设备
    chroot     /var/lib/haproxy  # 改变进程根目录,增强安全性,限制 HAProxy 可访问的文件系统范围
    pidfile     /var/run/haproxy.pid  # 指定 PID 文件路径,用于记录 HAProxy 进程 ID
    user        haproxy  # 运行 HAProxy 进程的用户
    group       haproxy  # 运行 HAProxy 进程的用户组
    daemon      # 以守护进程(后台)模式运行
    maxconn     4000  # 全局最大并发连接数限制

defaults
    mode        http  # 工作模式为 HTTP,适用于 HTTP 协议的代理、负载均衡等场景
    log         global  # 继承 global 段的日志配置
    option      httplog  # 记录 HTTP 协议详细日志(包含请求方法、URL 等信息 )
    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  # HTTP 长连接(Keep-Alive)的超时时间,超过则关闭连接
    timeout check        5s  # 健康检查(如检查后端服务器是否存活)的超时时间
    maxconn     3000  # 每个后端服务或前端监听的默认最大并发连接数(可被监听段覆盖 )

listen aaaa  # 定义一个名为 aaaa 的监听,用于接收客户端请求并转发到后端服务器
    bind 0.0.0.0:80  # 绑定到本机所有 IP(0.0.0.0)的 80 端口,接收客户端 HTTP 请求
    option httpchk GET /index.html  # 健康检查方式:发送 GET 请求到 /index.html 来检测后端服务器是否正常
    balance roundrobin  # 负载均衡算法为轮询(roundrobin),依次将请求分发到后端服务器
    # 定义后端服务器,check inter 设置健康检查间隔(2000 毫秒 ),fall 设置连续失败多少次判定服务器不可用(3 次 )
    server aaa 192.168.10.102:80 check inter 2000 fall 3  
    server bbb 192.168.10.103:80 check inter 2000 fall 3  

3.3、编辑系统日志副本

vim /etc/rsyslog.d/haproxy.conf

##编辑内容##
# 加载 IMUDP 模块,启用 UDP 协议支持,让日志守护进程能通过 UDP 接收日志
$ModLoad imudp  

# 配置 UDP 日志服务器在 514 端口运行,允许通过 UDP 514 端口采集日志(常见 syslog  UDP 端口)
$UDPServerRun 514  

# 日志转发/记录规则:
# 匹配 “local2” 设施(facility)的所有日志(“*” 代表所有级别),
# 将其写入 /var/log/haproxy.log 文件,一般用于集中记录 HAProxy 的日志
local2.* /var/log/haproxy.log  

3.4、重启服务:

systemctl restart rsyslog

systemctl restart haproxy

3.5、访问测试:

3.6、查看日志

cat /var/log/haproxy.log


网站公告

今日签到

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