使用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)

    复制代码
    global
        log /dev/log local0 info     # 分离日志级别
        maxconn 10000                # 最大连接数 :cite[3]
        user haproxy
        group haproxy
        daemon                       # 守护进程模式
    
    defaults
        mode http
        timeout connect 5s           # 连接超时
        timeout client  50s          # 客户端超时
        timeout server  50s          # 后端超时 :cite[2]
        option httplog               # 记录HTTP日志
        option dontlognull           # 忽略空请求
        retries 3                    # 节点失败重试次数
    
    frontend http-in
        bind *:80                    # 监听所有IP的80端口
        acl static path_beg -i /static # ACL规则示例
        use_backend static_servers if static
        default_backend web_servers  # 默认后端组
    
    backend web_servers
        balance leastconn            # 最小连接调度算法 :cite[5]:cite[8]
        server web1 192.168.1.101:80 check inter 2000 rise 2 fall 3
        server web2 192.168.1.102:80 check inter 2000 rise 2 fall 3
        # check: 健康检查,inter 2000ms检测一次,rise 2次成功标记存活,fall 3次失败标记宕机 :cite[7]
    
    backend static_servers
        server 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.log
          if $syslogseverity-text == 'notice' then /var/log/haproxy-notice.log
          stop
      }
    • 重启服务:systemctl restart rsyslog haproxy

  2. 性能调优参数 3

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

四、高级功能实现

  1. 健康检查强化

    复制代码
    backend web_servers
        option 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-in
        bind *:443 ssl crt /etc/haproxy/certs/example.com.pem
        redirect scheme https if !{ ssl_fc }  # HTTP强制跳转HTTPS
        default_backend web_servers
  3. 高可用方案 36

    • 部署双HAProxy节点 + Keepalived

      • 虚拟IP(VIP)如192.168.1.100

      • 配置Keepalived组播地址:224.0.0.18

    复制代码
    vrrp_instance VI_1 {
        state MASTER
        interface eth0
        virtual_router_id 51
        priority 100
        advert_int 1
        virtual_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

相关推荐
Elastic 中国社区官方博客11 小时前
ES95:面向 Elasticsearch 时间序列指标的自适应压缩
大数据·运维·elasticsearch·搜索引擎·架构·全文检索
mqiqe12 小时前
AgentScope Java 2.0 Agent 状态存储(AgentStateStore)深度解析:构建可恢复、可扩展的智能体运行时
java·运维·网络
mennekes12 小时前
数据中心安全配电设备如何选择?
运维·人工智能·科技·安全·制造
CSDN1211012 小时前
麒麟 V10 安装 Node-RED、IEC 104 协议插件及界面汉化
linux·编辑器·vim
开始学AI13 小时前
Codex2API Docker 使用宿主机代理:OAuth Token 兑换 403 问题排查与解决方案
运维·docker·容器
晨枫阳14 小时前
@changesets/cli是什么?哪些情况下需要使用?怎么使用
linux·运维·ubuntu
天远Date Lab14 小时前
零信任架构实战:基于天远行驶证核查构建自动化车队准入网关
运维·人工智能·架构·自动化
不会就选b15 小时前
Linux之网络基础(二)
linux·运维·网络
莫浅子16 小时前
Day 4:USB 2.0 时序与带宽预算
linux·运维·网络
ly768916 小时前
Linux 从入门到实践:系统架构、常用命令、服务管理与故障排查详解
linux·运维·系统架构