一、简介
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、负载均衡常用调度算法
算法名称 | 英文缩写 | 算法描述 | 示例说明 | 优缺点 |
---|---|---|---|---|
轮询调度算法 | 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