负载均衡集群HAproxy

HAProxy 简介

HAProxy 是一款高性能的负载均衡器和代理服务器,支持 TCP 和 HTTP 应用。广泛用于高可用性集群,能够有效分发流量到多个后端服务器,确保服务的稳定性和可扩展性。

HAProxy 核心功能

  • 负载均衡:支持轮询(round-robin)、最少连接(leastconn)、源 IP 哈希(source)等多种调度算法。
  • 健康检查:自动检测后端服务器状态,剔除故障节点。
  • SSL/TLS 终止:支持 HTTPS 流量解密和加密。
  • 高可用性:可结合 Keepalived 实现 VIP 漂移,避免单点故障。

HAProxy 安装与配置

在 Ubuntu/Debian 系统安装 HAProxy:

复制代码
sudo apt update
sudo apt install haproxy

配置文件位于 /etc/haproxy/haproxy.cfg,典型配置示例:

复制代码
global
    log /dev/log local0
    maxconn 4000
    user haproxy
    group haproxy
    daemon

defaults
    mode http
    timeout connect 5000ms
    timeout client 50000ms
    timeout server 50000ms

frontend http-in
    bind *:80
    default_backend servers

backend servers
    balance roundrobin
    server server1 192.168.1.10:80 check
    server server2 192.168.1.11:80 check

健康检查配置

通过 check 参数启用健康检查,支持主动(HTTP 请求)和被动(TCP 连接)模式:

复制代码
backend web_servers
    option httpchk GET /health
    server web1 192.168.1.10:80 check inter 5s rise 2 fall 3

日志与监控

启用日志需在 global 部分配置 log 指令,并配置系统日志服务(如 rsyslog):

复制代码
global
    log 127.0.0.1 local0 info

HAProxy 高可用方案

结合 Keepalived 实现 VIP 漂移:

  1. 安装 Keepalived:

    sudo apt install keepalived

  2. 配置 Keepalived(/etc/keepalived/keepalived.conf):

    vrrp_script chk_haproxy {
    script "pidof haproxy"
    interval 2
    }

    vrrp_instance VI_1 {
    state MASTER
    interface eth0
    virtual_router_id 51
    priority 100
    advert_int 1
    authentication {
    auth_type PASS
    auth_pass 1234
    }
    virtual_ipaddress {
    192.168.1.100/24
    }
    track_script {
    chk_haproxy
    }
    }

HAProxy 基本配置结构

HAProxy 的配置文件通常分为几个主要部分:全局设置(global)、默认设置(defaults)、前端(frontend)和后端(backend)。以下是基本配置的组成部分:

复制代码
global
    log /dev/log    local0
    log /dev/log    local1 notice
    chroot /var/lib/haproxy
    stats socket /run/haproxy/admin.sock mode 660 level admin
    stats timeout 30s
    user haproxy
    group haproxy
    daemon
    maxconn 4000

defaults
    log     global
    mode    http
    option  httplog
    option  dontlognull
    timeout connect 5000
    timeout client  50000
    timeout server  50000
    errorfile 400 /etc/haproxy/errors/400.http
    errorfile 403 /etc/haproxy/errors/403.http
    errorfile 408 /etc/haproxy/errors/408.http
    errorfile 500 /etc/haproxy/errors/500.http
    errorfile 502 /etc/haproxy/errors/502.http
    errorfile 503 /etc/haproxy/errors/503.http
    errorfile 504 /etc/haproxy/errors/504.http

frontend http-in
    bind *:80
    default_backend servers

backend servers
    balance roundrobin
    server server1 192.168.1.10:80 check
    server server2 192.168.1.11:80 check

全局配置(global)

全局配置部分定义了 HAProxy 进程的全局参数,通常包括日志、用户权限和性能调优等。

  • log:定义日志输出位置和级别。
  • chroot:将 HAProxy 进程限制在指定目录,增强安全性。
  • stats socket:启用统计信息套接字,用于管理。
  • usergroup:指定运行 HAProxy 的用户和组。
  • daemon:以守护进程模式运行。
  • maxconn:设置最大连接数。

默认配置(defaults)

默认配置部分定义了适用于所有 frontend 和 backend 的默认参数。

  • mode:设置代理模式(http、tcp)。
  • option httplog:启用 HTTP 日志记录。
  • timeout:定义连接、客户端和服务器的超时时间。
  • errorfile:指定错误响应文件路径。

前端配置(frontend)

前端配置定义了 HAProxy 如何接收客户端请求。

  • bind:指定监听的 IP 和端口。
  • default_backend:设置默认的后端服务器组。
  • 其他常用选项:
    • acl:定义访问控制规则。
    • use_backend:根据条件选择后端服务器组。

后端配置(backend)

后端配置定义了请求如何转发到后端服务器。

  • balance:设置负载均衡算法(如 roundrobinleastconn)。
  • server:定义后端服务器地址和端口,check 表示启用健康检查。
  • 其他常用选项:
    • cookie:启用会话持久性。
    • http-check:自定义健康检查方式。

负载均衡算法

HAProxy 支持多种负载均衡算法,常见的有:

  • roundrobin:轮询(默认)。
  • leastconn:最少连接数优先。
  • source:基于源 IP 哈希。
  • uri:基于 URI 哈希。

健康检查

HAProxy 支持主动健康检查,确保后端服务器的可用性:

复制代码
backend servers
    option httpchk GET /health
    server server1 192.168.1.10:80 check inter 2000 rise 2 fall 3
  • httpchk:指定健康检查的 HTTP 请求路径。
  • inter:检查间隔(毫秒)。
  • rise:成功次数标记服务器为健康。
  • fall:失败次数标记服务器为不健康。

统计页面

启用统计页面以监控 HAProxy 状态:

复制代码
listen stats
    bind *:8404
    stats enable
    stats uri /stats
    stats refresh 10s
    stats admin if TRUE
  • bind:指定统计页面的监听端口。
  • stats uri:设置访问路径。
  • stats admin:允许通过页面管理服务器状态。
相关推荐
星恒讯工业路由器29 分钟前
配网自动化多网融合应用解决方案
运维·自动化
智慧物业老杨34 分钟前
智慧物业收费系统的数智化落地实践:从人工硬扛到自动化闭环
运维·自动化
techdashen1 小时前
Cloudflare 为何抛弃 NGINX,用 Rust 自研了一个代理
运维·nginx·rust
南城猿1 小时前
保姆级 Ubuntu 部署 禅道
linux·运维·ubuntu
珠海西格电力2 小时前
零碳园区产业园管理系统的全场景源网荷储氢协同调度功能是如何实现的
大数据·运维·人工智能·物联网·能源
wj3055853782 小时前
CC-Switch 在 WSL Ubuntu 中安装记录
linux·运维·ubuntu
人生匆匆2 小时前
通过nginx解决跨域问题
运维·nginx
原来是猿3 小时前
【Socket编程预备知识】
linux·运维·服务器·网络
吴爃3 小时前
Spring Boot 项目在 K8S 中的打包、部署与运维发布实践
运维·spring boot·kubernetes
Elastic 中国社区官方博客3 小时前
在 Elastic 中使用 MCP 自动化用户旅程以进行合成监控
大数据·运维·人工智能·elasticsearch·搜索引擎·自动化·可用性测试