52.haproxy负载均衡

haproxy负载均衡

HAProxy 简介

HAProxy 是一个使用 C 语言编写的开源软件,提供高可用性负载均衡 以及基于 TCPHTTP 的应用程序代理功能。

核心特点:

  • 高性能:适用于负载巨大的 Web 站点,支持会话保持和七层处理。
  • 高并发:采用事件驱动、单一进程模型,能高效支持数万并发连接。
  • 安全集成:可简单安全地整合进现有架构,保护后端 Web 服务器不直接暴露于网络。

知名用户:GitHub, Bitbucket, Stack Overflow, Reddit, Tumblr, Twitter, 亚马逊 AWS 等。

负载均衡类型

根据 OSI 模型,负载均衡可分为不同层次:

层次 名称 工作原理 代表产品
二层 数据链路层负载均衡 基于虚拟 MAC 地址,分配至实际 MAC 地址响应。 -
三层 网络层负载均衡 基于虚拟 IP 地址,分配至实际 IP 地址响应。 -
四层 传输层负载均衡 基于 IP + Port 进行请求转发。 F5, LVS, HAProxy, Nginx
七层 应用层负载均衡 基于 URL、HTTP 头、主机名等应用层信息进行转发。 HAProxy, Nginx, Apache

说明 :HAProxy 同时支持高效的四层(TCP)七层(HTTP) 负载均衡。

HAProxy 安装

可以使用yum直接进行安装

复制代码
yum -y install haproxy

但是我们通常会使用源码安装,这样更灵活

首先安装依赖环境

复制代码
[root@ha ~]# yum -y install make gcc pcre-devel bzip2-devel openssl-devel systemd-devel gcc-c++ zlib-devel lua

跟mysql一样,我们要创建一个haproxy的用户

复制代码
[root@ha ~]# useradd -r -M -s /sbin/nologin haproxy

使用源码安装需要源码包,解压源码包

复制代码
[root@ha ~]# tar -xzf haproxy-2.1.3.tar.gz

安装

复制代码
[root@ha ~]# cd haproxy-2.1.3/
[root@ha haproxy-2.1.3]# make clean
[root@ha haproxy-2.1.3]# make -j $(grep 'processor' /proc/cpuinfo |wc -l) \
> TARGET=linux-glibc  \
> USE_OPENSSL=1  \
> USE_ZLIB=1  \
> USE_PCRE=1  \
> USE_SYSTEMD=1
[root@ha haproxy-2.1.3]# make install PREFIX=/usr/local/haproxy
[root@ha haproxy-2.1.3]# cp haproxy  /usr/sbin/

设置内核参数

复制代码
[root@ha haproxy-2.1.3]# vim /etc/sysctl.conf 
[root@ha haproxy-2.1.3]# sysctl -p
net.ipv4.ip_forward = 1
net.ipv4.ip_nonlocal_bind = 1

配置haproxy服务

复制代码
[root@ha ~]# mkdir /etc/haproxy
[root@ha ~]# vim /etc/haproxy/haproxy.cfg

global			#全局配置
    log 127.0.0.1 local0  info
    #log loghost local0 info
    maxconn 20480
#chroot /usr/local/haproxy
    pidfile /var/run/haproxy.pid
    #maxconn 4000
    user haproxy
    group haproxy
    daemon
#---------------------------------------------------------------------
#common defaults that all the 'listen' and 'backend' sections will
#use if not designated in their block
#---------------------------------------------------------------------
defaults		#默认参数,可以被用到frontend,backend,Listen组件,本次使用listen组件
    mode http
    log global
    option dontlognull
    option httpclose
    option httplog
    #option forwardfor
    option redispatch
    balance roundrobin
    timeout connect 10s
    timeout client 10s
    timeout server 10s
    timeout check 10s
    maxconn 60000
    retries 3
#--------------统计页面配置------------------
listen admin_stats	fronted和backend的组合体
    bind 0.0.0.0:8189
    stats enable
    mode http
    log global
    stats uri /haproxy_stats
    stats realm Haproxy\ Statistics
    stats auth admin:admin
    #stats hide-version
    stats admin if TRUE
    stats refresh 30s
#---------------web设置-----------------------
listen webcluster
    bind 0.0.0.0:80
    mode http
    #option httpchk GET /index.html
    log global
    maxconn 3000
    balance roundrobin
    cookie SESSION_COOKIE insert indirect nocache
server rs1 192.168.100.10:80 check
server rs2 192.168.100.20:80 check

配置文件由五部分组成,逻辑关系如下:

  1. global:全局配置,与操作系统和进程相关的参数。
  2. defaults :为后续组件(frontend, backend, listen)提供默认参数。
  3. frontend:定义前端虚拟服务,用于接收客户端请求。
  4. backend:定义后端真实服务器集群。
  5. listenfrontendbackend 的组合体,常用于监控

全局配置详细解析
复制代码
global
    log 127.0.0.1 local0 info    # 定义日志输出和级别
    maxconn 20480                # 全局最大连接数
    user haproxy                 # 运行用户
    group haproxy                # 运行用户组
    daemon                       # 以后台守护进程方式运行
    pidfile /var/run/haproxy.pid # PID 文件位置

defaults
    mode http                    # 默认模式(http/tcp)
    log global                   # 继承全局日志设置
    option dontlognull          # 不记录健康检查空日志
    option httpclose            # 关闭 HTTP 连接(不支持 keep-alive)
    option httplog              # 启用 HTTP 请求日志
    option redispatch           # 连接失败时重定向到其他服务器
    balance roundrobin          # 默认负载均衡算法:轮询
    timeout connect 10s         # 连接后端服务器超时时间
    timeout client 10s          # 客户端响应超时时间
    timeout server 10s          # 服务器端响应超时时间
    maxconn 60000               # 默认最大连接数
    retries 3                   # 3次失败判定服务器不可用

frontend http_80_in		#前端配置
    bind 0.0.0.0:80             # 监听所有 IP 的 80 端口
    mode http
    option forwardfor           # 向后端传递客户端真实 IP(X-Forwarded-For)
    default_backend wwwpool     # 指定默认后端服务器组

backend wwwpool		后端配置
    mode http
    balance source              # 负载均衡算法:源 IP 哈希
    option httpchk GET /index.html # 定义健康检查方法
    server web1 192.168.100.10:80 cookie 2 weight 3 check inter 2000 rise 2 fall 3
    server web2 192.168.100.20:80 cookie 2 weight 3 check inter 2000 rise 2 fall 3

listen admin_stats		监听配置
    bind 0.0.0.0:8189           # 监控页面访问端口
    stats enable                # 启用统计报告
    stats uri /haproxy_stats    # 统计页面的 URL 路径
    stats realm "Haproxy Statistics" # 认证提示信息
    stats auth admin:admin      # 登录用户名和密码
    stats refresh 30s           # 页面自动刷新间隔

配置haproxy的服务单元,然后启动

复制代码
[root@ha ~]# vim /usr/lib/systemd/system/haproxy.service

[Unit]
Description=HAProxy Load Balancer
After=syslog.target network.target

[Service]
ExecStartPre=/usr/local/haproxy/sbin/haproxy -f /etc/haproxy/haproxy.cfg   -c -q
ExecStart=/usr/local/haproxy/sbin/haproxy -Ws -f /etc/haproxy/haproxy.cfg  -p /var/run/haproxy.pid
ExecReload=/bin/kill -USR2 $MAINPID

[Install]
WantedBy=multi-user.target

[root@ha ~]# systemctl daemon-reload
[root@ha ~]# systemctl restart haproxy

查看


相关推荐
大树881 天前
金刚石散热越强,管路越先见顶
大数据·运维·服务器·人工智能·ai
摇滚侠1 天前
Linux CentOS7 rpm 安装 MySQL 5.7
linux·运维·mysql
霸道流氓气质1 天前
领域驱动设计(DDD)在 Spring Boot 微服务中的实践指南
运维·spring boot·微服务
Inhand陈工1 天前
基于台达PLC与映翰通IG502的智慧水产养殖精准投喂与远程运维解决方案
运维·人工智能·物联网·阿里云·信息与通信
酣大智1 天前
ARP代理--工作原理
运维·网络·arp·arp代理
shushangyun_1 天前
2026年快消品B2B系统推荐:支持终端门店订货、促销政策自动化的工具?
java·运维·网络·数据库·人工智能·spring·自动化
施努卡机器视觉1 天前
SNK施努卡侧滑门锁上滑轮总成自动化装配线,从零件到组件,全流程精密制造方案
运维·自动化·制造
AC赳赳老秦1 天前
用 OpenClaw 搭建服务器故障应急响应系统,自动处理 80% 常见运维故障
android·运维·服务器·python·rxjava·deepseek·openclaw
java_cj1 天前
深入kube-apiserver认证机制:从Bearer Token到mTLS的完整认证链解析
linux·运维·服务器·云原生·容器·kubernetes
lsyeei1 天前
linux 系统目录详解
linux·运维·服务器