负载均衡集群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:允许通过页面管理服务器状态。
相关推荐
hello 早上好30 分钟前
负载均衡、算法/策略
运维·算法·负载均衡
一匹电信狗1 小时前
【Linux我做主】进程优先级
linux·运维·服务器·c++·ubuntu·小程序·unix
IT成长日记9 小时前
【自动化运维神器Ansible】Ansible常用模块之hostname模块详解
运维·自动化·ansible·hostname·常用模块
lixzest9 小时前
Linux 中,命令查看系统版本和内核信息
linux·运维·服务器
朱小弟cs610 小时前
Orange的运维学习日记--16.Linux时间管理
linux·运维·学习
chen_note10 小时前
LAMP及其环境的部署搭建
linux·运维·mysql·php·apache·lamp·phpmyadmin
夕泠爱吃糖10 小时前
Linux 操作系统
linux·运维·服务器
数据要素X11 小时前
【数据架构10】数字政府架构篇
大数据·运维·数据库·人工智能·架构
G_H_S_3_11 小时前
【网络运维】 Linux:使用 Cockpit 管理服务器
运维·服务器·网络
Linux技术支持工程师11 小时前
二十八、【Linux系统域名解析】DNS安装、子域授权、缓存DNS、分离解析、多域名解析
linux·运维·服务器·缓存·centos