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 负载均衡集群,提升服务并发能力、稳定性与可用性。

相关推荐
花间相见2 小时前
【AI私人家庭医生day01】—— 项目介绍
大数据·linux·人工智能·python·flask·conda·ai编程
Cyber4K2 小时前
【Nginx专项】基础入门篇-访问限制及访问控制
linux·运维·服务器·nginx
涛声依旧393162 小时前
创建新的虚拟主机
linux·服务器·网络
高斯的手稿08012 小时前
树莓派上更换镜像源的方法
linux·运维·windows
想拿大厂offer2 小时前
【Linux】常用指令
linux
うちは止水2 小时前
linux yocto bitbake构建系统生成SDK包
linux·sdk·yocto·bitbake
四禾子2 小时前
ubuntu的使用心得体会
linux·运维·ubuntu
学Linux的语莫2 小时前
vscode连接linux服务器,linux环境编程开发。
linux·vscode·ubuntu·编辑器
mounter6253 小时前
【深度解析】Device Memory TCP:开启高性能网络传输的“零拷贝”新时代
linux·服务器·网络·网络协议·tcp/ip·kernel·devmem