当前位置: 首页 > article >正文

使用Haproxy搭建Web群集

一、基础环境准备

  1. 服务器规划 67

    • HAProxy调度器:1台 (2核4G+,CentOS 7/8)

    • Web服务器:至少2台(如Nginx/Apache,建议192.168.1.101-102)

    • 客户端测试机:1台(Windows/Linux)

    • 网络:所有服务器需在同一局域网,关闭防火墙/SELinux

  2. Web服务器配置

    # 在每台Web服务器安装Nginx并创建测试页
    yum install -y nginx
    echo "Server 1" > /usr/share/nginx/html/index.html  # 服务器1标识
    echo "Server 2" > /usr/share/nginx/html/index.html  # 服务器2标识
    systemctl start nginx

二、HAProxy安装与核心配置

  1. 安装依赖与源码编译 78

    yum install -y gcc pcre-devel bzip2-devel
    wget http://www.haproxy.org/download/2.8/src/haproxy-2.8.3.tar.gz
    tar -zxvf haproxy-2.8.3.tar.gz
    cd haproxy-2.8.3
    make TARGET=linux-glibc USE_PCRE=1 USE_OPENSSL=1
    make install
  2. 配置文件详解 (/etc/haproxy/haproxy.cfg)

    globallog /dev/log local0 info     # 分离日志级别maxconn 10000                # 最大连接数 :cite[3]user haproxygroup haproxydaemon                       # 守护进程模式defaultsmode httptimeout connect 5s           # 连接超时timeout client  50s          # 客户端超时timeout server  50s          # 后端超时 :cite[2]option httplog               # 记录HTTP日志option dontlognull           # 忽略空请求retries 3                    # 节点失败重试次数frontend http-inbind *:80                    # 监听所有IP的80端口acl static path_beg -i /static # ACL规则示例use_backend static_servers if staticdefault_backend web_servers  # 默认后端组backend web_serversbalance leastconn            # 最小连接调度算法 :cite[5]:cite[8]server web1 192.168.1.101:80 check inter 2000 rise 2 fall 3server web2 192.168.1.102:80 check inter 2000 rise 2 fall 3# check: 健康检查,inter 2000ms检测一次,rise 2次成功标记存活,fall 3次失败标记宕机 :cite[7]backend static_serversserver static1 192.168.1.103:80 check
  3. 创建系统服务

    cp examples/haproxy.init /etc/init.d/haproxy
    chmod +x /etc/init.d/haproxy
    systemctl daemon-reload

三、关键优化配置

  1. 日志分离 37

    • 修改/etc/rsyslog.d/haproxy.conf

      if $programname == 'haproxy' then {if $syslogseverity-text == 'info' then /var/log/haproxy-info.logif $syslogseverity-text == 'notice' then /var/log/haproxy-notice.logstop
      }
    • 重启服务:systemctl restart rsyslog haproxy

  2. 性能调优参数 3

    参数推荐值作用
    maxconn10000+最大并发连接数
    nbprocCPU核数进程数(需绑定CPU)
    timeout http-request5s-10s防止HTTP慢连接攻击
    option httpclose-主动关闭HTTP连接释放资源

四、高级功能实现

  1. 健康检查强化

    backend web_serversoption httpchk GET /healthcheck  # 自定义检查路径http-check expect status 200     # 要求返回200状态码 :cite[7]server web1 192.168.1.101:80 check port 8080  # 指定检查端口
  2. SSL终端卸载

    frontend https-inbind *:443 ssl crt /etc/haproxy/certs/example.com.pemredirect scheme https if !{ ssl_fc }  # HTTP强制跳转HTTPSdefault_backend web_servers
  3. 高可用方案 36

    • 部署双HAProxy节点 + Keepalived

      • 虚拟IP(VIP)如192.168.1.100

      • 配置Keepalived组播地址:224.0.0.18

    vrrp_instance VI_1 {state MASTERinterface eth0virtual_router_id 51priority 100advert_int 1virtual_ipaddress { 192.168.1.100 }
    }

五、验证与维护

  1. 功能测试

    # 连续访问测试负载均衡
    for i in {1..10}; do curl http://haproxy-ip; done
    # 模拟节点故障(观察日志)
    systemctl stop nginx@web1
    tail -f /var/log/haproxy-info.log  # 查看健康检查日志
  2. 监控命令

    echo "show stat" | socat stdio /var/run/haproxy/admin.sock  # 实时状态:cite[2]
    watch -n 1 "echo 'show info' | socat stdio /var/run/haproxy/admin.sock"

六、故障排查要点

  1. 常见问题 3

    • 503错误:检查后端服务是否存活,nbproc是否超限

    • 日志不记录:确认rsyslog配置权限,检查/dev/log设备存在

    • 性能瓶颈:调整maxconn,启用option http-server-close

生产环境建议

  • 重要配置变更前执行语法检查:haproxy -c -f /etc/haproxy/haproxy.cfg

  • 启用多进程时绑定CPU核心:nbproc 4 cpu-map 1 0 cpu-map 2 1 ...

  • 对于会话保持场景使用balance sourcecookie SERVERID insert8

http://www.lryc.cn/news/2397779.html

相关文章:

  • 【Unity】相机 Cameras
  • 如何在 Solana 上发币,并创建初始流动性让项目真正“动”起来?
  • C++.凸包算法
  • C++ 游戏开发详细流程
  • 核心机制:滑动窗口
  • 苹果电脑深度清理,让老旧Mac重焕新生
  • Hadoop复习(一)
  • 微服务面试(分布式事务、注册中心、远程调用、服务保护)
  • 高性能MYSQL(三):性能剖析
  • Go 语言中的 panic 详解
  • mysql(十四)
  • 工业物联网中的事件驱动采样架构及优化
  • 基于 HT for Web 的轻量化 3D 数字孪生数据中心解决方案
  • JavaScript 性能优化:从入门到实战
  • 启动metastore时报错MetaException(message:Version information not found in metastore
  • Spring 中 @Value 注解多实例配置方案详解
  • MyBatisPlus(1):快速入门
  • 京东热点缓存探测系统JDhotkey架构剖析
  • 多国金融市场数据对接指南(印度、印尼、韩国)
  • 【Elasticsearch】ILM(Index Lifecycle Management)策略详解
  • linux 后记
  • 【笔记】在 MSYS2 MINGW64 环境中安装构建工具链(CMake、GCC、Make)
  • PyTorch -TensorBoard的使用 (一)
  • Redis最佳实践——性能优化技巧之数据结构选择
  • 网络安全方向在校生有哪些证书适合考取?
  • 从0开始学习R语言--Day14--贝叶斯统计与结构方程模型
  • 02-BTC-密码学原理 对hash算法如果出现漏洞的思考
  • [Python] 如何使用 Python 调用 Dify 工作流服务实现自动化翻译
  • 分布式微服务系统架构第142集:全栈开发
  • PTA-根据已有类Worker,使用LinkedList编写一个WorkerList类,实现计算所有工人总工资的功能。