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

RabbitMQ—HAProxy负载均衡

上篇文章:

RabbitMQ—仲裁队列https://blog.csdn.net/sniper_fandc/article/details/149312579?fromshare=blogdetail&sharetype=blogdetail&sharerId=149312579&sharerefer=PC&sharesource=sniper_fandc&sharefrom=from_link

目录

1 HAProxy安装

1.1 安装HAProxy

1.2 配置haproxy.cfg(配置负载均衡器监听的服务器和管理界面)

1.3 启动HAProxy

2 HAProxy使用


        前面讲到消息分发时可以对消费者进行负载均衡,当然面对多节点的RabbitMQ集群,也需要负载均衡。原因如下:

        1.写代码时,我们访问集群中任何一个节点都可以,但是如果我们访问的节点宕机,虽然集群还可以正常工作,但是我们的生产者或消费者服务很可能因为无法访问该节点就崩溃。因此,直接访问某个节点不太好,需要访问一个统一的入口,该入口来帮助负载均衡到不同的RabbitMQ节点。

        2.如果都只访问集群的某一个节点,容易导致该节点负载过大从而容易崩溃,而其它集群节点很可能比较空闲,因此需要把消息负载均衡到不同的RabbitMQ节点。

        这里介绍使用其它软件作为负载均衡器:

1 HAProxy安装

        HAProxy是一个开源的负载均衡器和TCP/HTTP应用程序的代理服务器,主要用来提供集群的高可用性、负载均衡和代理功能。HAProxy会把接受的请求分发到多个服务器,以提高网络的可靠性和性能。

1.1 安装HAProxy

        命令:yum -y install haproxy

1.2 配置haproxy.cfg(配置负载均衡器监听的服务器和管理界面)

        命令:vim /etc/haproxy/haproxy.cfg

        配置内容如下:

#haproxy监听集群配置listen rabbitmq_local_cluster 0.0.0.0:5670 #集群前端IP,供producter和consumer来进行选择,选择一个没有被占用的即可mode tcp #负载均衡选项balance roundrobin #轮询算法将负载发给后台服务器server rabbit1 127.0.0.1:5672 check inter 5000 rise 2 fall 3 #负载均衡器监听的集群节点配置,rabbitmq节点名称只在负载均衡器中使用(不一定和rabbitmq服务器名称一样),每5000秒一次健康检查,连续3次检查失败就停用该服务器,连续2次检查成功就恢复该服务器。server rabbit2 127.0.0.1:5673 check inter 5000 rise 2 fall 3server rabbit3 127.0.0.1:5674 check inter 5000 rise 2 fall 3#haproxy前端监控页面配置listen private_monitoring :8100mode httpoption httplogstats enablestats uri /stats #haproxy 前端页面stats refresh 60s # 60s刷新一次页面stats auth admin:admin #用户名和密码

1.3 启动HAProxy

        命令:systemctl start haproxy

2 HAProxy使用

        开启HAProxy后,生产者需要把与RabbitMQ连接的ip和端口号改为HAProxy所在的ip和其开发的端口号:

spring:rabbitmq:addresses: amqp://admin:admin@192.168.159.150:5670/testVirtual

        其它使用就和普通队列的消息发送无异了:

    @Bean("haproxyQueue")public Queue haproxyQueue(){return QueueBuilder.durable("haproxy.queue").quorum().build();}@RequestMapping("haproxy")public String haproxy() {rabbitTemplate.convertAndSend("", "haproxy.queue", "Hello SpringBoot RabbitMQ");return "发送成功";}

        运行结果如下:

        如果让其中一个节点宕机,生产者也不会出现连接异常,仍然可以发送消息:

        恢复宕机的节点,由于仲裁队列的同步能力,消息也同步到宕机节点上:

        注意:由于增加了负载均衡器,如果Haproxy所在节点也发生宕机,对于客户端来讲就无法与RabbitMQ交互,因此通常会用Keepalived等高可用解决方案对haproxy做主备,在HAProxy主节点故障时自动将流量转移到备用节点。这也体现了分布式环境解决高可用的特点,就是增加机器用备用节点备份。

http://www.dtcms.com/a/297131.html

相关文章:

  • React性能优化终极指南:memo、useCallback、useMemo全解析
  • Ubuntu22 上,用C++ gSoap 创建一个简单的webservice
  • NineData 数据库 DevOps 全面支持 GaussDB,国产化管理再升级!
  • Spring Boot 自动装配底层源码实现详解
  • 国产DevOps平台Gitee:如何重塑中国企业研发效能新格局
  • Java 单元测试详解:从入门到实战,彻底掌握 JUnit 5 + Mockito + Spring Boot 测试技巧
  • react中 多个层级 组件数据同用 组件之间传值 usecontext useReducer
  • Gitee如何成为国内企业DevOps转型的首选平台?
  • 璞致 PZSDR-P101:ZYNQ7100+AD9361 架构软件无线电平台,重塑宽频信号处理范式
  • ERNIE-4.5-0.3B 实战指南:文心一言 4.5 开源模型的轻量化部署与效能跃升
  • 规则分配脚本
  • 初识JVM--从Java文件到机器指令
  • 中国开源Qwen3 Coder与Kimi K2哪个最适合编程
  • “磁”力全开:钕铁硼重塑现代科技生活
  • Linux 网络与 Vim 编辑器操作
  • 3D实景的概念、特点及应用场景
  • 从“人工眼”到‘智能眼’:EZ-Vision视觉系统如何重构生产线视觉检测精度?
  • AI与区块链融合:2025年的技术革命与投资机遇
  • C++与Hive、Spark、libhdfs、ACID交互技巧
  • Vue2下
  • VR 技术在污水处理领域的创新性应用探索​
  • C++ string:准 STL Container
  • 【03】C#入门到精通——C# 输出格式、内容拼接、if判断 、bool 表达式、函数封装调用
  • 【深度学习优化算法】09:Adadelta算法
  • MyBatis-Plus中使用BaseMapper实现基本CRUD
  • MinIO:云原生对象存储的终极指南
  • Qt 与 SQLite 嵌入式数据库开发
  • 云原生可观测-日志观测(Loki)最佳实践
  • SQLite中SQL的解析执行:Lemon与VDBE的作用解析
  • mac下 vscode 运行 c++无法弹出窗口