[Erlang 0091] 另辟蹊径构建RabbitMQ集群

简介:

  除了内置的RabbitMQ集群方案,还可以通过其它一些软件或者插件来构建RabbitMQ集群.这些方案可以解决一些让我们头痛不已的问题,当然它们也不是银弹,也有使用场景的限制.事实上,对于各种集群方案我们都不能假设太多,每当连入一个节点,我们都要把这个节点当成一个全新的节点来处理,首先要完成各种声明工作.

 

  下面的方式都没有实践过,暂且记录一笔,留点印象,后面实践之后丰富.下面的截图来自"RabbitMQ in Action"

 

HAProxy

 

  开源项目HAProxy 的定位是:The Reliable, High Performance TCP/HTTP Load Balancer.官网地址 http://haproxy.1wt.eu/我们可以把独立的RabbitMQ节点隐藏在HAProxy后面,HAProxy完成了下面的职责:

 

[1] 负载均衡 帮助我们进行节点选择 HAProxy 实现了一些经典的负载均衡算法 比如:roundrobin leastconn 完整的列表请查看 http://cbonte.github.com/haproxy-dconv/configuration-1.5.html#4-balance

 

[2] 异常节点检测 

 

  使用HAProxy可以不同策略来构建RabbitMQ集群,最典型的用法是:在一组Rabbit节点前端放置HAProxy做负载均衡,看下面的图:

 

  使用这种方式构建集群,和我们做WebServer集群一样,把一批功能相同的Web Server隐藏在HAProxy后面.如果节点宕掉如何处理?这种情况,应用程序并不知道自己实际连接的是哪个节点, cancellation notification消息可以显示得到连接到的节点已经宕掉.

 

Warrens 替补队员

 

  之前提到过使用built-in方式构建集群环境durable queue的问题:队列只有元数据会在集群的所有节点同步,但是队列中的数据只会存在于一个节点;这不免让人失望:数据没有冗余容易丢数据甚至在durable的情况下,如果所在的节点当掉就要等待节点恢复.

  使用HAProxy添加backup节点的方式可以在当前活跃节点宕掉之后尽快启用备用节点,恢复正常服务.

 

  backup节点在没有投入使用的时候都处于静默状态,并不从活跃节点同步消息.活跃节点在崩溃之前积压没有处理的消息只有等待其重启恢复之后才能启用.还有一个方法是让active和backup节点共享存储文件,这里有两个问题:1.共享存储 之前造成active node崩掉的数据可能继续让backup崩掉 2.要共享存储要求节点名完全一致,换句话说两个节点不可能同时启动,这就达不到我们的目的了

 

 

Shovel:WAN环境使用Cluster

 

   Erlang OTP对网络延迟敏感,所以RabbitMQ一样不建议在WAN环境使用集群.在WAN环境可以使用Shovel 实现跨地域数据同步.

 

 

 

最后小图一张:

相关实践学习
快速体验阿里云云消息队列RocketMQ版
本实验将带您快速体验使用云消息队列RocketMQ版Serverless系列实例进行获取接入点、创建Topic、创建订阅组、收发消息、查看消息轨迹和仪表盘。
消息队列 MNS 入门课程
1、消息队列MNS简介 本节课介绍消息队列的MNS的基础概念 2、消息队列MNS特性 本节课介绍消息队列的MNS的主要特性 3、MNS的最佳实践及场景应用 本节课介绍消息队列的MNS的最佳实践及场景应用案例 4、手把手系列:消息队列MNS实操讲 本节课介绍消息队列的MNS的实际操作演示 5、动手实验:基于MNS,0基础轻松构建 Web Client 本节课带您一起基于MNS,0基础轻松构建 Web Client
目录
相关文章
|
10月前
|
边缘计算 负载均衡 NoSQL
FreeMQTT Plus: 一个新型 MQTT Broker 集群的实现
FreeMQTT Plus 是一款基于 MQTT 协议的高性能消息中间件,采用分布式架构解决单点瓶颈问题。其核心由 Nginx 负载均衡器、黑(A)节点(MQTT Broker)、白(B)节点(消息路由)和日志(L)节点组成。通过无主从设计,支持高可用性、负载均衡与灵活扩展。针对会话同步、消息路由等挑战,FreeMQTT Plus 利用 MQTT5 特性定义元命令,实现节点间高效通信,无需依赖第三方组件。适用于物联网海量设备接入与高并发场景,为未来边缘计算和多级集群部署提供坚实基础。
1659 74
|
11月前
|
消息中间件 监控 RocketMQ
Docker部署RocketMQ5.2.0集群
本文详细介绍了如何使用Docker和Docker Compose部署RocketMQ 5.2.0集群。通过创建配置文件、启动集群和验证容器状态,您可以快速搭建起一个RocketMQ集群环境。希望本文能够帮助您更好地理解和应用RocketMQ,提高消息中间件的部署和管理效率。
1556 91
|
消息中间件 监控 数据挖掘
基于RabbitMQ与Apache Flink构建实时分析系统
【8月更文第28天】本文将介绍如何利用RabbitMQ作为数据源,结合Apache Flink进行实时数据分析。我们将构建一个简单的实时分析系统,该系统能够接收来自不同来源的数据,对数据进行实时处理,并将结果输出到另一个队列或存储系统中。
1159 2
|
消息中间件 存储 运维
2024最全RabbitMQ集群方案汇总
本文梳理了RabbitMQ集群的几种方案,主要包括普通集群、镜像集群(高可用)、Quorum队列(仲裁队列)、Streams集群模式(高可用+负载均衡)和插件方式。重点介绍了每种方案的特点、优缺点及适用场景。搭建步骤包括安装Erlang和RabbitMQ、配置集群节点、修改hosts文件、配置Erlang Cookie、启动独立节点并创建集群,以及配置镜像队列以提高可用性和容错性。推荐使用Quorum队列与Streams模式,其中Quorum队列适合高可用集群,Streams模式则同时支持高可用和负载均衡。此外,还有Shovel和Federation插件可用于特定场景下的集群搭建。
2993 2
|
消息中间件 RocketMQ
2024最全RocketMQ集群方案汇总
在研究RocketMQ集群方案时,发现网上存在诸多不一致之处,如组件包含NameServer、Broker、Proxy等。通过查阅官方文档,了解到v4.x和v5.x版本的差异。v4.x部署模式包括单主、多主、多主多从(异步复制、同步双写),而v5.x新增Local与Cluster模式,主要区别在于Broker和Proxy是否同进程部署。Local模式适合平滑升级,Cluster模式适合高可用需求。不同模式下,集群部署方案大致相同,涵盖单主、多主、多主多从等模式,以满足不同的高可用性和性能需求。
1777 0
|
消息中间件 存储 负载均衡
|
消息中间件 安全 Java
构建基于RabbitMQ的安全消息传输管道
【8月更文第28天】在分布式系统中,消息队列如RabbitMQ为应用间的数据交换提供了可靠的支持。然而,随着数据的敏感性增加,确保这些消息的安全传输变得至关重要。本文将探讨如何在RabbitMQ中实施一系列安全措施,包括加密通信、认证和授权机制,以保护敏感信息。
361 1
|
消息中间件 存储 负载均衡
"RabbitMQ集群大揭秘!让你的消息传递系统秒变超级英雄,轻松应对亿级并发挑战!"
【8月更文挑战第24天】RabbitMQ是一款基于AMQP的开源消息中间件,以其高可靠性、扩展性和易用性闻名。面对高并发和大数据挑战时,可通过构建集群提升性能。本文深入探讨RabbitMQ集群配置、工作原理,并提供示例代码。集群由多个通过网络连接的节点组成,共享消息队列,确保高可用性和负载均衡。搭建集群需准备多台服务器,安装Erlang和RabbitMQ,并确保节点间通信顺畅。核心步骤包括配置.erlang.cookie文件、使用rabbitmqctl命令加入集群。消息发布至任一节点时,通过集群机制同步至其他节点;消费者可从任一节点获取消息。
267 2
|
存储 C# 关系型数据库
“云端融合:WPF应用无缝对接Azure与AWS——从Blob存储到RDS数据库,全面解析跨平台云服务集成的最佳实践”
【8月更文挑战第31天】本文探讨了如何将Windows Presentation Foundation(WPF)应用与Microsoft Azure和Amazon Web Services(AWS)两大主流云平台无缝集成。通过具体示例代码展示了如何利用Azure Blob Storage存储非结构化数据、Azure Cosmos DB进行分布式数据库操作;同时介绍了如何借助Amazon S3实现大规模数据存储及通过Amazon RDS简化数据库管理。这不仅提升了WPF应用的可扩展性和可用性,还降低了基础设施成本。
403 0
|
消息中间件 API 数据安全/隐私保护
就软件研发问题之RocketMQ ACL 2.0加强集群组件间访问控制的问题如何解决
就软件研发问题之RocketMQ ACL 2.0加强集群组件间访问控制的问题如何解决
176 0