Haproxy

一、集群概述

HAProxy 是一款高性能、开源的 TCP/HTTP 负载均衡软件,相比 LVS 配置更简单,相比 Nginx 健康检查与高并发能力更强,适合用于 Web 集群入口调度,实现流量分发、故障自愈、高可用。

核心优势

支持 HTTP/TCP 多协议,适配 Web、API、数据库等场景

内置多种负载均衡算法,支持后端节点健康检查

性能接近硬件负载均衡器,资源占用低

支持会话保持、日志审计、热重载

二、前置知识点

1. 常用负载均衡算法

roundrobin(轮询):请求按顺序轮流分配到后端节点,适合配置相同的服务器

leastconn(最小连接):优先分配给连接数最少的节点,适合长连接业务

source(源 IP 哈希):同一客户端 IP 始终分配到同一台后端,实现会话保持

static-rr:加权轮询,按权重比例分配流量

2. 集群架构

HAProxy 节点:负载均衡调度器(192.105.5.89)

Web 节点 1:Nginx 服务器(192.105.5.81)

Web 节点 2:Nginx 服务器(192.105.5.82)

系统:ubuntu

三、环境准备

所有节点关闭防火墙与SELinux

systemctl stop firewalld

systemctl disable firewalld

setenforce 0

sed -i 's/^SELINUX=enforcing/SELINUX=disabled/' /etc/selinux/config

四、后端 Web 节点部署(Nginx)

1. 安装依赖与编译 Nginx

安装编译依赖

apt install -y gcc make pcre-devel zlib-devel openssl-devel perl-ExtUtils-MakeMaker git wget tar

创建Nginx运行用户

useradd -M -s /sbin/nologin nginx

解压并编译安装

tar zxf nginx-1.26.3.tar.gz

cd nginx-1.26.3

./configure --prefix=/usr/local/nginx \\

\--user=nginx --group=nginx \\

\--with-http\_ssl\_module \\

\--with-http\_v2\_module \\

\--with-pcre

make && make install

2. 创建测试页面

Web 节点 1(192.105.5.81)

echo "Web Server 192.105.5.81" > /var/www/html/index.nginx-debian.html

Web 节点 2(192.105.5.82)
echo "Web Server 192.105.5.82" > /var/www/html/index.nginx-debian.html

3. 启动 Nginx

/usr/local/nginx/sbin/nginx
验证端口监听
netstat -anpt | grep nginx

五、HAProxy 负载均衡器部署

1. 安装 HAProxy

apt install haproxy -y

2. HAProxy 配置文件详解

配置文件路径:/etc/haproxy/haproxy.cfg,分为global、defaults、listen三段。

完整配置(直接覆盖写入)

[root@dr ~]# /etc/haproxy/haproxy.cfg
# -------------------------- 1. 全局配置(global)--------------------------
# 进程级配置,与操作系统相关
global
    log 127.0.0.1 local0 info  # 日志输出:本地 0 设备,级别 info
    maxconn 20480              # 全局最大并发连接数
    pidfile /var/run/haproxy.pid  # PID 文件路径
    user haproxy               # 运行用户
    group haproxy              # 运行用户组
    daemon                     # 后台运行模式
# -------------------------- 2. 默认配置(defaults)--------------------------
# 所有 frontend/backend/listen 会继承此配置,可被局部覆盖
defaults
    mode http                  # 默认运行模式:七层 HTTP(四层需改为 tcp)
    log global                 # 继承 global 段的日志配置
    option dontlognull         # 不记录空请求日志
    option httpclose           # 关闭 HTTP 长连接(每次请求后断开)
    option httplog             # 记录 HTTP 详细日志(含 URL、状态码等)
    option redispatch          # 服务下线后,重新分配请求到其他节点
    balance roundrobin         # 负载均衡算法:轮询(四层/七层通用)
    # 超时配置(单位:s=秒,ms=毫秒)
    timeout connect 10s        # 与后端服务器连接超时
    timeout client 10s         # 客户端请求超时
    timeout server 10s         # 后端服务器响应超时
    timeout check 10s          # 健康检查超时
    maxconn 60000              # 每个前端/后端的最大并发连接
    retries 3                  # 连接失败重试次数(3次失败则标记节点下线)
# -------------------------- 3. 监控页面配置(listen)--------------------------
# listen 是 frontend + backend 的组合,适合简单场景(如监控)
listen admin_stats
    bind 0.0.0.0:8189          # 监控页面端口(可自定义)
    stats enable               # 开启监控功能
    mode http                  # 监控页面用 HTTP 模式
    log global                 # 继承日志配置
    stats uri /haproxy_stats   # 监控页面 URL(访问路径)
    stats realm Haproxy\ Statistics  # 监控页面提示语
    stats auth admin:admin     # 监控页面登录账号密码(admin:admin)
    stats admin if TRUE        # 允许手动启用/禁用后端节点
    stats refresh 30s          # 监控页面自动刷新间隔(30秒)
# -------------------------- 4. Web 负载均衡配置(listen)--------------------------
# 前端监听 80 端口,后端转发到两台 Web 服务器(rs1、rs2)
listen webcluster
    bind 0.0.0.0:80            # 前端监听端口(Web 服务默认 80)
    mode http                  # 七层 HTTP 模式
    log global                 # 继承日志配置
    maxconn 3000               # 此负载均衡实例的最大并发
    balance roundrobin         # 负载均衡算法:轮询
    cookie SESSION_COOKIE insert indirect nocache  # 会话保持(基于 Cookie)
    # 后端真实服务器(check 表示开启健康检查)
    server rs1 192.105.5.81:80 check  # 第一台 Web 服务器
    server rs2 192.105.5.82:80 check  # 第二台 Web 服务器

自带监控页面

  1. 监控页面访问
    在浏览器中访问 http://192.105.5.89:8189/haproxy_stats ,输入账号密码(admin:admin)

alt text

其他备注:

注意易忽略
- index.html 文件在web服务器中必须存在。

  • check inter 2000是检测心跳频率(每2000ms检测一次),fall 3是3次失败认为服务器不可用

  • 在新版本中,超时的设置做了调整,具体如下

  • contimeout 被 timeout connect取代:定义haproxy将客户端请求转发至后端服务器所等待的超时时长

  • clitimeout 被timeout client取代:客户端非活动状态的超时时长,是 app 连接 haproxy的时间

  • srvtimeout 被timeout server取代:客户端与服务器端建立连接后,等待服务器端的超时时长,是haproxy 连接后端web服务器的时间.

注释:

haproxy共有八种调度算法

1. balance leastconn 最少连接数

2. balance roundrobin 轮询

3. balance source 根据客户端IP进行哈希的方式

4. static-rr 根据权重

5. uri 根据请求的URI

6. url_param 根据请求的URl参数

7. hdr(name) 根据HTTP请求头来锁定每一次HTTP请求

8. rdp-cookie(name) 根据cookie(name)来锁定并哈希每一次TCP请求

chroot /usr/share/haproxy \\也就是改变程序执行时所参考的根目录位置,如果有此代码,需要创建此目录

关于日志级别

static Level DEBUG


DEBUG Level指出细粒度信息事件对调试应用程序是非常有帮助的。


static Level INFO


INFO level表明 消息在粗粒度级别上突出强调应用程序的运行过程。

static Level WARN


WARN level表明会出现潜在错误的情形。


static Level ERROR


ERROR level指出虽然发生错误事件,但仍然不影响系统的继续运行。


static Level FATAL


FATAL level指出每个严重的错误事件将会导致应用程序的退出。

另外,还有两个可用的特别的日志记录级别:
 
static Level ALL

ALL Level是最低等级的,用于打开所有日志记录。

static Level OFF

OFF Level是最高等级的,用于关闭所有日志记录。

3. 关键参数说明

  • check:开启健康检查

  • inter 2000:检查间隔 2 秒

  • fall 3:连续 3 次失败标记节点下线

  • rise 2:连续 2 次成功标记节点上线

  • balance roundrobin:使用轮询算法

4. 启动 HAProxy

systemctl start haproxy

systemctl enable haproxy

systemctl status haproxy

六、集群功能测试

1. 负载均衡测试

客户端执行,循环访问10次

for i in {1..10}; do curl http://192.105.5.89; done



预期结果:页面交替显示101与102,轮询生效。

alt text

2. 高可用测试

停止web01

/usr/local/nginx/sbin/nginx -s stop

再次访问

curl http://192.105.5.89/test.html

预期结果:流量全部切换到 web02,服务不中断 。

七、HAProxy 独立日志配置

1. 修改 HAProxy 日志配置

vim /etc/haproxy/haproxy.cfg

\# global段修改为

log /dev/log local0 info

\# 注释chroot

\# chroot /var/lib/haproxy

2. 配置 rsyslog

创建日志规则文件

vim /etc/rsyslog.d/haproxy.conf

$ModLoad imudp

$UDPServerRun 514

local3.\* /var/log/haproxy.log

&~

\# 创建日志文件并授权

touch /var/log/haproxy.log

chmod 640 /var/log/haproxy.log

chown root:adm /var/log/haproxy.log

\# 重启服务

systemctl restart rsyslog haproxy

注释:

$ModLoad imudp 采集日志的协议UDP
$UDPServerRun 514 指定日志采集使用的端口号
local3.\* /var/log/haproxy.log 指定日志存放位置

3. 实时查看日志

tail -f /var/log/haproxy.log

八、生产环境参数优化

# global段优化
global
    maxconn 10240
    nbproc 2
    ulimit-n 65536
 
# defaults段优化
defaults
    retries 5
    option http-keep-alive
maxconn:全局最大连接数,建议 10240 以上

nbproc:并发进程数,建议等于 CPU 核心数

ulimit-n:最大文件打开数,提升并发能力

九、补充知识点

切换调度算法

# 最小连接数
balance leastconn
# 源IP哈希
balance source

加权轮询配置

server web01 192.105.5.81:80 weight 3 check
server web02 192.105.5.82:80 weight 1 check

权重越高,分配流量越多。

配置热重载

haproxy -f /etc/haproxy/haproxy.cfg -p /var/run/haproxy.pid -sf $(cat /var/run/haproxy.pid)

不中断业务更新配置。

健康检查自定义

检查PHP页面

option httpchk GET /index.php

十、总结

本方案通过HAProxy + 双 Nginx实现了高可用 Web 集群,具备负载均衡故障自动切换独立日志性能优化能力,可直接用于中小型生产环境。核心价值在于提升服务可用性与并发承载能力,单点故障不影响整体业务。

posted @ 2026-06-02 18:08  陪你去流浪  阅读(14)  评论(0)    收藏  举报