HAProxy+Nginx高可用集群实战指南

技能目标

  • 理解主流负载均衡调度器的特点与适用场景
  • 掌握 HTTP 请求、状态码与常用调度算法
  • 熟练完成 HAProxy + Nginx 高可用 Web 集群搭建
  • 实现 HAProxy 健康检查、日志独立配置与性能调优

前言

在高并发 Web 服务场景中,单台服务器难以支撑海量访问,负载均衡集群成为标配架构。目前主流调度工具包括 LVS、Nginx 与 HAProxy,三者各有优势:LVS 性能最强但部署复杂;Nginx 轻量易用但健康检查与高并发能力较弱;HAProxy 则兼顾高性能、健康检查与会话保持,是企业 Web 集群的热门选择。

本章从基础理论入手,通过完整实操案例,带你一步步搭建 HAProxy 负载均衡集群,实现流量分发、故障自动剔除与日志规范化管理,最终构建稳定、高效、可扩展的 Web 服务架构。


一、案例基础理论

1.1 负载均衡调度器对比

常见 Web 集群调度工具对比,帮助理解选型依据:

  • LVS:性能最高,四层转发,适合超大流量,但配置复杂、无七层处理能力
  • Nginx:轻量易用,支持七层规则,适合静态资源与 API 网关,但健康检查较弱
  • HAProxy:支持四层 / 七层,健康检查完善、并发强、支持会话保持,适合 Web 集群

1.2 HTTP 请求基础

浏览器访问网站使用 HTTP 协议,包含两种核心请求方式:

  • GET:参数显示在 URL 中,适合查询、获取数据
  • POST:参数隐藏在请求体,适合提交表单、用户名密码等敏感数据

HTTP 状态码分类:

  • 2xx:请求成功(如 200)
  • 3xx:重定向(如 301)
  • 4xx:客户端错误(如 404)
  • 5xx:服务端错误(如 500)

1.3 三大核心调度算法

  1. **RR(轮询)**请求依次分配给后端节点,均匀分发,适合节点配置相同场景。
  2. **LC(最小连接数)**将新请求分配给当前连接数最少的节点,动态均衡负载。
  3. **SH(源地址哈希)**同一客户端 IP 始终分配到同一台后端节点,实现会话保持。

1.4 集群环境规划

本次实验使用 3 台服务器搭建高可用集群:

表格

节点角色 操作系统 IP 地址 运行服务
Web 节点 1 openEuler 24.03 192.168.20.101 Nginx
Web 节点 2 openEuler 24.03 192.168.20.102 Nginx
负载均衡器 openEuler 24.03 192.168.20.100 HAProxy

二、案例实施步骤

2.1 搭建两台 Nginx 后端节点

在 101、102 两台服务器分别执行:

bash

运行

复制代码
dnf install -y gcc make pcre-devel zlib-devel openssl-devel
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
make && make install

创建测试页面

  • 101 节点:

bash

运行

复制代码
echo "Web Backend Server 192.168.20.101" > /usr/local/nginx/html/test.html
/usr/local/nginx/sbin/nginx
  • 102 节点:

bash

运行

复制代码
echo "Web Backend Server 192.168.20.102" > /usr/local/nginx/html/test.html
/usr/local/nginx/sbin/nginx

关闭防火墙:

bash

运行

复制代码
systemctl stop firewalld
systemctl disable firewalld

2.2 安装与配置 HAProxy

在 192.168.20.100 安装:

bash

运行

复制代码
dnf install -y haproxy

编辑主配置文件:

bash

运行

复制代码
vim /etc/haproxy/haproxy.cfg

完整配置示例

ini

复制代码
global
    log 127.0.0.1 local0 info
    maxconn 4096
    user haproxy
    group haproxy
    daemon

defaults
    mode http
    log global
    option httplog
    option dontlognull
    retries 3
    timeout connect 5s
    timeout client 1m
    timeout server 1m

listen web_cluster
    bind 0.0.0.0:80
    balance roundrobin
    option httpchk GET /test.html
    server web1 192.168.20.101:80 check inter 2000 fall 3
    server web2 192.168.20.102:80 check inter 2000 fall 3

启动服务:

bash

运行

复制代码
systemctl start haproxy
systemctl enable haproxy

三、集群功能验证

3.1 负载均衡测试

浏览器访问:

plaintext

复制代码
http://192.168.20.100/test.html

多次刷新页面,可交替看到:

plaintext

复制代码
Web Backend Server 192.168.20.101
Web Backend Server 192.168.20.102

说明 RR 轮询调度正常生效。

3.2 高可用故障测试

  1. 停止 101 的 Nginx:

bash

运行

复制代码
/usr/local/nginx/sbin/nginx -s stop
  1. 再次访问 VIP,页面只显示 102 节点内容
  2. 重启 101 Nginx,节点自动恢复加入集群

证明 HAProxy 可自动剔除故障节点,保障业务不中断。


四、HAProxy 独立日志配置

HAProxy 默认日志混杂在系统日志,生产环境需单独配置:

  1. 修改 haproxy.cfg 日志配置

ini

复制代码
global
    log /dev/log local0 info
  1. 创建 Rsyslog 规则

bash

运行

复制代码
vim /etc/rsyslog.d/haproxy.conf

写入:

plaintext

复制代码
local0.*    /var/log/haproxy.log
  1. 创建日志文件并授权

bash

运行

复制代码
touch /var/log/haproxy.log
chmod 640 /var/log/haproxy.log
chown root:adm /var/log/haproxy.log
  1. 重启服务

bash

运行

复制代码
systemctl restart rsyslog
systemctl restart haproxy
  1. 实时查看日志

bash

运行

复制代码
tail -f /var/log/haproxy.log

五、HAProxy 性能调优

生产环境常用优化参数:

  • maxconn:增大最大连接数(如 10240)
  • nbproc:启动多进程,提升并发能力
  • retries:节点检查重试次数(建议 3~6)
  • timeout check:健康检查超时合理设置
  • mode:四层代理用 tcp,七层用 http

总结

本章完整实现了 HAProxy + Nginx 高性能 Web 负载均衡集群,核心内容包括:

  1. 理解负载均衡原理、调度算法与调度器选型
  2. 完成 Nginx 后端节点部署与测试页面配置
  3. 实现 HAProxy 负载均衡、健康检查、自动故障剔除
  4. 配置独立日志系统,便于运维排查
  5. 掌握生产环境性能调优思路

通过本章学习,你可以独立搭建企业级 Web 负载均衡集群,提升服务并发能力、稳定性与可用性。

相关推荐
followless24 分钟前
linux server中搭建questasim 10.6c & ise14.7
linux·fpga开发
The Chosen One98543 分钟前
【Linux】深入理解Linux进程(二):进程的状态
linux·运维·服务器·开发语言·git
草莓熊Lotso1 小时前
Linux Socket 编程筑基:从底层本质到核心 API,一文吃透 Socket 预备知识
linux·运维·服务器·数据库·c++
say_fall1 小时前
装软件慢到崩溃?用户创建总出错?Linux 工具避坑指南
linux·运维·服务器·c++·学习
小则又沐风a1 小时前
基础的开发工具(2)---Linux
java·linux·前端
一个学Java小白1 小时前
LV.12 Linux应用开发综合实战-在线词典
linux·运维·服务器
代码中介商2 小时前
Linux TCP 协议深度解析:从状态机到拥塞控制
linux·网络·tcp/ip
林熙蕾LXL2 小时前
系统调用&文件描述
linux·运维·服务器
落羽的落羽2 小时前
【网络】TCP与UDP协议使用指南,Socket编程实现Echo服务
linux·服务器·网络·c++·网络协议·tcp/ip·机器学习
草莓熊Lotso2 小时前
LangChain从入门到精通:环境搭建→核心能力→LCEL链式编程全实战
android·java·linux·服务器·langchain