砍材农夫砍材农夫
  • 微信记账小程序
  • java
  • redis
  • mysql
  • 场景类
  • 框架类
  • vuepress搭建
  • hexo搭建
  • 云图
  • llm wiki

    • 基于karpathy
    • gradle
  • 常用工具

    • git
    • gradle
    • Zadig
    • it-tools
    • 开源推荐
    • curl
  • 大前端

    • 环境配置
    • 微信生态
    • 正则
    • 全栈技能
  • java圈

    • java基础
    • jdk体系
    • jvm
    • spring框架
    • 分库分表
    • zookeeper
  • python技能

    • python编程
    • python数据
  • 算法

    • 算法
  • 网关

    • spring_cloud_gateway
    • openresty
  • 高可用

    • 秒杀
    • 分布式
    • 缓存一致
  • MQ

    • MQ
    • rabbitMQ
    • rocketMQ
    • kafka
  • 其它

    • 设计模式
    • 领域驱动(ddd)
  • 关系型数据库

    • mysql5.0
    • mysql8.0
  • 非关系型数据库

    • redis
    • mongoDB
  • 分布式/其他

    • ShardingSphere
    • 区块链
  • 向量数据库

    • M3E
    • OPEN AI
  • Jmeter
  • fiddler
  • wireshark
  • AI入门
  • AI大模型
  • AI插件
  • AI集成框架
  • 相关算法
  • AI训练师
  • 量化交易
  • AIoT
  • gitee
  • github
  • infoq
  • osc
  • 砍材工具
  • 关于
  • 相关运营
  • devops
  • 元宇宙
  • 区块链
  • 物联网
  • webrtc
  • web3.0
  • gitee
  • github
  • infoq
  • osc
  • 砍材工具
  • 关于
  • 中考
  • 投资
  • 保险
  • 思
  • 微信记账小程序
  • java
  • redis
  • mysql
  • 场景类
  • 框架类
  • vuepress搭建
  • hexo搭建
  • 云图
  • llm wiki

    • 基于karpathy
    • gradle
  • 常用工具

    • git
    • gradle
    • Zadig
    • it-tools
    • 开源推荐
    • curl
  • 大前端

    • 环境配置
    • 微信生态
    • 正则
    • 全栈技能
  • java圈

    • java基础
    • jdk体系
    • jvm
    • spring框架
    • 分库分表
    • zookeeper
  • python技能

    • python编程
    • python数据
  • 算法

    • 算法
  • 网关

    • spring_cloud_gateway
    • openresty
  • 高可用

    • 秒杀
    • 分布式
    • 缓存一致
  • MQ

    • MQ
    • rabbitMQ
    • rocketMQ
    • kafka
  • 其它

    • 设计模式
    • 领域驱动(ddd)
  • 关系型数据库

    • mysql5.0
    • mysql8.0
  • 非关系型数据库

    • redis
    • mongoDB
  • 分布式/其他

    • ShardingSphere
    • 区块链
  • 向量数据库

    • M3E
    • OPEN AI
  • Jmeter
  • fiddler
  • wireshark
  • AI入门
  • AI大模型
  • AI插件
  • AI集成框架
  • 相关算法
  • AI训练师
  • 量化交易
  • AIoT
  • gitee
  • github
  • infoq
  • osc
  • 砍材工具
  • 关于
  • 相关运营
  • devops
  • 元宇宙
  • 区块链
  • 物联网
  • webrtc
  • web3.0
  • gitee
  • github
  • infoq
  • osc
  • 砍材工具
  • 关于
  • 中考
  • 投资
  • 保险
  • 思
  • 首页
    • 开发板介绍
    • micropython环境搭建
    • esp32开发板
    • 面包板
    • 万能表使用
  • 面包板
    • 点灯
  • esp32
    • 点亮开发板led灯
    • 点亮外接led
    • 点亮外接oled文字
    • 红外传感器
    • 红外传感器+olde
    • esp32+面包板
  • MQTT编程

    • MQTT入门

      • 物联网 MQTT
      • 物联网 MQTT和Socket
      • 物联网 MQTT订阅性能优势
      • 物联网 MQTT简易版Broker
    • HiveMQ

      • hivemq实战入门
    • Protobuf

      • Protobuf入门
      • Protobuf入门+梳理
      • Protobuf实战第一篇
    • emqx

      • emqx入门
    • mica

      • mica入门
    • netty

      • 入门

        • 基于netty构建入门
        • 理解粘包/拆包
        • 编解码器机制与自定义协议
        • 心跳和ack机制
        • mqtt服务demo演示
        • mqtt服务协议支持
        • mqtt服务udp支持
      • 协议规范

        • mqtt协议规范(发布/订阅模式)
        • mqtt协议规范(轻量级二进制协议)
        • mqtt协议规范(三种 QoS 等级)
        • mqtt协议规范(主题通配符订阅)
        • mqtt协议规范(遗嘱与保留消息)
      • 报文结构

        • 控制报文结构(报文分类)
        • 控制报文结构(连接与握手)
        • 控制报文结构(发布与接收)
      • 核心实战

        • 核心实战(握手与认证)
        • 核心实战(心跳保活机制)
        • 核心实战(会话管理)
        • 核心实战(安全)
    • mqtt-模拟器|客户端

      • 集成Paho

        • 设备模拟器设计
        • 设备模拟器演示
        • Paho拆解入门
        • Paho拆解核心
        • Paho拆解高性能
        • 其他客户端框架比较
      • NetAssist

        • 设备模拟器设计
      • hiveMq

        • hiveMq客户端
    • netty-mqtt-boot

      • 模块化设计
      • 统一接入层
      • 消息路由与流转层
      • 核心服务层
      • 业务应用层
      • 整体项目管理
      • 测试脚手架
      • 兼容支持
    • mqtt-压测

      • mqtt-jmeter

        • 模块化设计
      • ‌emqtt-bench

        • 模块化设计
    • mqtt-规则引擎

      • MQTT规则引擎
      • sql

        • 基于sql规则
      • ice

        • 模块化设计
      • Aviator

        • 模块化设计
      • Drools

        • 模块化设计
    • mqtt-实战问题

      • MQTT分布式集群

        • 分布式集群

          • 分布式集群意义
          • 如何构建分布式集群
          • 分布式集群简易版
          • mqtt入口HAProxy模拟负载
        • ignite

          • ignite入门
          • 模块化设计
      • 实战汇总

        • 分布式集群意义
  • mqtt-netty源码拆解

    • mqtt-netty源码拆解

      • Pipeline双向链表
      • MqttEncoder.INSTANCE
      • 分布式集群简易版
      • mqtt入口HAProxy模拟负载
  • 物联网实战|mqtt入口网关|HAProxy模拟负载
    • HAProxy
    • 相比nginx
      • Nginx
      • HAProxy
      • 总结
    • HAProxy安装和部署(YUM快速安装)
    • HAProxy核心配置文件详解
      • 七层HTTP负载均衡
      • 四层TCP代理示例
      • 针对四层
      • 验证访问
    • HAProxy配置mqtt端口
    • HAProxy负载规则
    • 测试案例,绑定ip后端挂了重启,可以自动切换

物联网实战|mqtt入口网关|HAProxy模拟负载

HAProxy

HAProxy 是一款高性能、开源、TCP/HTTP 四层 & 七层反向代理负载均衡软件,由 Willy Tarreau 开发,主打高并发、低延迟、高稳定性,广泛用于 Web、MySQL、Redis、API 集群负载均衡,是中小型集群、云原生最常用负载均衡方案

相比nginx

Nginx

七层为主、四层为辅,Web 服务器 + 反向代理 + 负载均衡,侧重静态资源、Web 服务、动静分离

  • 原生强项:HTTP/HTTPS、静态文件缓存、压缩、Rewrite、防盗链、虚拟主机
  • 四层 TCP 代理是附加功能,性能、并发、健康检查弱于 HAProxy

HAProxy

专业四层 + 七层负载均衡器,只做流量转发,不处理静态文件

  • 原生强项:海量并发 TCP 连接、复杂健康检查、高性能四层转发、集群负载调度
  • 七层 HTTP 功能够用,但页面处理、缓存、重写生态不如 Nginx

总结

  • 做负载均衡、四层 TCP、海量长连接、多节点集群监控 → HAProxy 更强
  • 做网站、静态缓存、HTTPS、复杂路由、业务网关二次开发 → Nginx 更强

HAProxy安装和部署(YUM快速安装)

  • CentOS/RHEL

yum install haproxy -y

  • Ubuntu/Debian

apt install haproxy -y

  • 查看版本

haproxy -v

  • 配置开机启动
# 开机自启
systemctl enable haproxy
# 启动
systemctl start haproxy
# 停止
systemctl stop haproxy
# 重启(修改配置后必执行)
systemctl restart haproxy
# 查看状态
systemctl status haproxy
# 配置语法校验(修改配置前必检测,避免服务起不来)
haproxy -c -f /etc/haproxy/haproxy.cfg

HAProxy核心配置文件详解

配置分四大块:global → defaults → frontend → backend

  • /etc/haproxy/haproxy.cfg

七层HTTP负载均衡

# ====================== 1. 全局配置 global ======================
global
    log         /dev/log    local0 info
    log         /dev/log    local0 notice
    chroot      /var/lib/haproxy
    pidfile     /var/run/haproxy.pid
    maxconn     40000        # 全局最大并发连接
    user        haproxy
    group       haproxy
    daemon                   # 后台守护进程运行
    stats socket /var/lib/haproxy/stats level admin  # 本地管理sock

# ====================== 2. 默认模板 defaults ======================
defaults
    mode                    http       # 七层http,四层改为 tcp
    log                     global
    option                  httplog    # 打印完整http日志
    option                  dontlognull
    option                  http-server-close
    option                  forwardfor # 传递真实客户端IP X-Forwarded-For
    option                  redispatch
    retries                 3          # 失败重试3次
    timeout connect         10s
    timeout client          30s
    timeout server          30s

# ====================== 3. 前端 frontend 接收用户请求 ======================
frontend http_front
    bind *:80                     # 监听本机80端口
    default_backend http_back     # 默认转发到后端集群
    # 监控页面配置 访问 http://服务器IP/haproxy-stats
    stats enable
    stats uri /haproxy-stats
    stats auth admin:123456       # 监控账号密码
    stats refresh 5s

# ====================== 4. 后端 backend 真实业务节点 ======================
backend http_back
    balance roundrobin            # 负载算法:轮询
    # 健康检查:每隔2秒探测,连续3次down标记故障,2次恢复上线
    server web01 192.168.1.10:80 check inter 2000 fall 3 rise 2 weight 1
    server web02 192.168.1.11:80 check inter 2000 fall 3 rise 2 weight 1

四层TCP代理示例

global
    maxconn 50000
    user haproxy
    group haproxy
    daemon

defaults
    mode tcp
    timeout connect 10s
    timeout client 60s
    timeout server 60s

# MySQL四层TCP代理
listen mysql_tcp_proxy
    bind *:3307
    balance leastconn
    server db-node1 192.168.0.20:3306 check inter 3000 fall 2 rise 2
    server db-node2 192.168.0.20:3306 check inter 3000 fall 2 rise 2

# 监控面板单独配置完整http参数,解决503
listen haproxy_stats
    bind *:8081
    mode http
    timeout connect 5s
    timeout client 30s
    timeout server 30s
    stats enable
    stats uri /stats
    stats auth admin:123456
    stats refresh 5s

针对四层

  • 将上面四层tcp配置直接复制
  • haproxy -c -f /etc/haproxy/haproxy.cfg
  • systemctl restart haproxy

img

验证访问

  • http://192.168.0.20:8081/stats (默认admin/123456) img

HAProxy配置mqtt端口

# mqtt 四层TCP代理
listen maqtt_tcp_proxy
    bind *:1889
    balance leastconn
    server node1-26 192.168.0.26:1889 check inter 3000 fall 2 rise 2
    server node2-3 192.168.0.3:1889 check inter 3000 fall 2 rise 2

img

img

HAProxy负载规则

  • balance leastconn 最少连接
  • roundrobin 轮询系统默认
  • source 源IP哈希 同一个客户端IP永远固定分到同一台后端
  • uri/url_param 按请求 URL 哈希,TCP 模式不生效

测试案例,绑定ip后端挂了重启,可以自动切换

listen mqtt_tcp_proxy
    bind *:1889
    balance source
    hash-type consistent
    stick-table type ip size 200k expire 300s  # 5分钟过期
    stick on src
    server node1-26 192.168.0.26:1889 check inter 5000 fall 3 rise 2
    server node2-3 192.168.0.3:1889 check inter 5000 fall 3 rise 2
最近更新: 2026/6/18 15:12
Contributors: kcnf
Prev
分布式集群简易版