当前位置: 首页 > news >正文

10 分钟搞定 RabbitMQ 高可用:HAProxy 负载均衡实战指南

在分布式系统中,RabbitMQ作为常用消息中间件,集群部署是保障高可用的关键。但很多开发者会遇到一个棘手问题:Java程序直接绑定RabbitMQ节点的IP和端口后,一旦该节点宕机,程序就会连接失败,只能手动修改配置恢复。

HAProxy负载均衡技术,能完美解决这个痛点——既实现请求分流,又能自动故障转移,为RabbitMQ集群搭建可靠的统一访问入口。今天就带大家一步步完成从安装到实战验证的全流程。

一、为什么一定要用HAProxy?

RabbitMQ集群即便配置了仲裁队列保证队列高可用,仍有两个核心问题:

  1. 单点依赖风险:程序绑定固定节点端口(默认5672),节点宕机直接抛出java.net.ConnectException,无法自动切换

  2. 资源浪费严重:所有请求集中在一个节点,导致该节点过载,其他节点却闲置

HAProxy的核心价值就是:作为集群“大门”,分散请求到各个节点,同时实时监控节点状态,故障时自动切换,无需手动改代码。

二、HAProxy快速安装(Ubuntu环境)

1. 更新软件源
apt-get update
2. 安装HAProxy

先查看可用版本:

apt list | grep haproxy

执行安装命令:

apt-get install haproxy
3. 验证安装

查看服务状态(显示active则成功):

systemctl status haproxy

设置开机自启:

systemctl enable haproxy

查看版本信息:

haproxy -v

三、关键配置:HAProxy核心参数设置

HAProxy配置文件路径:/etc/haproxy/haproxy.cfg,用vim编辑即可。

1. 完整配置代码(直接复制)
# 编辑配置文件 vim /etc/haproxy/haproxy.cfg

在文件末尾追加以下内容:

# HAProxy Web管理界面(方便监控) listen stats bind *:8100 # 管理界面端口 mode http # 工作模式 stats enable # 启用统计功能 stats realm Haproxy Statistics stats uri / # 访问路径 stats auth admin:admin # 登录账号密码(可自定义) # RabbitMQ负载均衡核心配置 listen rabbitmq bind *:5670 # 集群统一访问端口(避开5672默认端口) mode tcp # AMQP基于TCP协议,必须设为TCP模式 balance roundrobin # 负载均衡算法:轮询(最常用) # 集群节点配置(替换为你的实际节点IP和端口) server rabbitmq1 127.0.0.1:5672 check inter 5000 rise 2 fall 3 server rabbitmq2 127.0.0.1:5673 check inter 5000 rise 2 fall 3 server rabbitmq3 127.0.0.1:5674 check inter 5000 rise 2 fall 3
2. 关键参数说明(新手必看)
  • 负载均衡算法

    • 轮询(roundrobin):按顺序分发请求,适合节点性能一致的场景

    • 加权轮询:给高性能节点分配更高权重,处理更多请求

    • 最少连接:优先转发到连接数少的节点,提升利用率

  • 健康检查参数

    • check inter 5000:每5秒检查一次节点是否可用

    • rise 2:节点故障后,连续2次检查通过恢复可用

    • fall 3:连续3次检查失败,自动移除该节点

3. 配置生效

修改后重启HAProxy:

systemctl restart haproxy

四、实战验证:负载均衡+故障转移

1. 程序连接配置修改(Java示例)

无需关注集群具体节点,只需连接HAProxy的IP和端口(5670):

spring: rabbitmq: addresses: amqp://admin:password@haproxy-ip:5670/test # 替换实际IP和密码 publisher-confirm-type: correlated listener: simple: acknowledge-mode: auto

2. 测试步骤

(1)正常场景测试

启动RabbitMQ集群和Java程序,调用接口发送消息:

@RestController @RequestMapping("/producer") public class ProducerController { @Autowired private RabbitTemplate rabbitTemplate; @RequestMapping("/test") public String test() { rabbitTemplate.convertAndSend("", "quorum.queue", "RabbitMQ+HAPorxy测试"); return "消息发送成功"; } }

访问http://127.0.0.1:8080/producer/test,消息能正常投递即成功。

(2)故障转移测试

手动停止一个RabbitMQ节点:

rabbitmqctl -n rabbit stop_app

再次调用接口,程序仍能正常发送消息,HAProxy会自动将请求转发到健康节点。

五、总结

HAProxyRabbitMQ集群带来三大核心优势:

  1. 高可用:故障自动转移,无需人工干预

  2. 高并发:请求分流,避免单点过载

  3. 易维护:集群扩容/替换节点,无需修改程序配置

这套方案适用于微服务、分布式系统等各类需要高可用消息通信的场景,新手也能快速上手。如果在配置过程中遇到问题,欢迎在评论区留言交流~

http://www.jsqmd.com/news/226811/

相关文章:

  • SARSA 强化学习
  • 告别“算完就忘”:3行代码为Windows打造可审计计算器
  • MDK编译优化选项对C代码的影响:一文说清原理
  • 超详细版:CubeMX搭建FreeRTOS与CAN通信驱动流程
  • 智慧物流如何重塑云南高原农产品供应链?
  • 计算机毕设 java 基于 Java 的武夷智能公交系统的设计与实现 智能公交信息管理平台 城市公交路线查询系统
  • Multisim参数扫描分析:深度剖析其配置技巧
  • HardFault_Handler异常响应流程:图解说明与调试
  • 计算机毕设 java 基于 Java 的物业管理系统 智能小区物业管控平台 业主服务管理系统
  • 计算机毕设 java 基于 Java 的蛋糕甜品商城的设计与实现 甜品线上商城管理系统 烘焙甜品销售平台
  • 强化学习算法
  • Keil生成Bin文件与底层驱动兼容性问题深度剖析
  • Day 08:【99天精通Python】列表推导式与元组 - 进阶技巧与不可变序列
  • CCS使用小白指南:常见安装问题解决方案
  • Proteus8.9下载安装教程:新手快速理解安装要点
  • STM32上手ModbusTCP:新手教程从零开始
  • 基于Java+SpringBoot+SSM物流管理系统(源码+LW+调试文档+讲解等)/物流管理软件/物流信息管理系统/供应链物流管理系统/企业物流管理系统/物流仓储管理系统/智能物流管理系统
  • Redis集群:原理与实战经验分享(面试必看!)
  • 工业传感器采集系统Keil5环境搭建手把手教程
  • 计算机毕设 java 基于 JAVA 的网上订餐系统的设计与实现 智能餐饮订餐平台 线上菜品订购管理系统
  • Keil4下载及安装系统学习:支持多芯片平台搭建
  • Keil5汉化注意事项:常见错误及解决方案
  • Java21虚拟线程池模型在电商秒杀系统中的应用与性能比较
  • 计算机毕设 java 基于 vue 与 spring 的药品销售管理系统设计与实现 智能药品销售管控平台 医药流通信息化系统
  • 小天才USB驱动下载安装指南:手把手教程(从零实现)
  • 掌握 Xcode,实现移动开发的快速迭代
  • 计算机毕业设计springboot新能源汽车产业链分析系统 基于Spring Boot的新能源汽车产业链数据分析平台设计与实现 Spring Boot框架下新能源汽车产业链综合管理系统开发
  • Windows下STLink驱动下载(STM32)图文说明
  • 计算机毕设 java 基于 Java 的大学生创新成果信息管理系统的设计与实现 高校学生创新成果管理平台 学生创新项目信息备案系统
  • Keil MDK下STM32中断向量表配置一文说清