消息队列专题(架构篇):RabbitMQ 的集群架构模式

本文详细介绍了RabbitMQ的四种集群模式:主备模式、远程模式(shovel模式)、多活模式和镜像模式。重点讨论了镜像模式,包括其工作原理、配置过程以及如何使用Haproxy和Keepalived实现高可用和负载均衡。此外,还提到了Federation插件在多活模式中的应用。
摘要由CSDN通过智能技术生成

RabbitMQ 的集群架构模式主要有四种,分别是主备模式、远程模式、多活模式和镜像模式,本篇博客将依次介绍这四种架构模式,其中的镜像模式使用范围最广,我们将对其进行重点介绍。


主备模式

主备模式是指,主节点负责提供读写服务,从节点只负责提供备份服务,当主节点宕机时,备份节点会自动切换为主节点提供读写服务。
在这里插入图片描述

如上图所示,在主备架构模式下,我们使用 HaProxy 进行健康检测和负载均衡,也就是说,主备切换由 HaProxy 完成,对于 Consumer 消费端来说是完全透明的。这里需要注意的是,主备模式和我们经常提起的主从模式是不一样的,主从模式中的从节点并不是用来备份的,它会提供只读服务。

一般在并发和数据量不高的情况下多使用这种架构模式,简单好用,易于维护。

Haproxy 配置如下
在这里插入图片描述
需要特别关注的是图中关于 server 的配置:
在这里插入图片描述
第一行是配置主节点,第二行的 backup 表明是对备份节点的配置。

inter 5000 rise 2 fall 2 则表示:每隔 5 秒对 MQ 集群做一次健康检查, 2 次正确证明服务可用,2 次失败证明服务器不可用;


远程模式

远程模式就是一种实现双活的模式,简称 shovel 模式,能够让消息在不同数据中心之间进行复制,可以跨地域的让两个 MQ 集群互联,从而实现远距离通信。
在这里插入图片描述
如图所示,有两个异地的 MQ 集群(可以是更多的集群),当用户在地区 1 下单,系统发消息到 1 区的 MQ 服务器,发现 MQ 服务已超过设定的阈值,负载过高,这条消息就会被转到地区 2 的 MQ 服务器上,由 2 区的 MQ 服务器去执行后面的业务逻辑,相当于分摊了 1 区的服务压力。

它是 RabbitMQ 比较早期的架构模型,现在很少使用了,在这里不做过多介绍,了解即可。


多活模式

多活模式是实现异地数据复制的主流模式,因为 shovel 模式配置比较复杂,实现异地集群多采用这种模式。

在这里插入图片描述
如上图所示,在多活模式的每个数据中心中,都会各部署一套 RabbitMQ 集群,集群中的各个节点数据是一样的,通过镜像队列来保证数据一致性。不同数据中心的数据复制则需要依赖 RabbitMQ 的 Federation 插件来完成,Federation 插件可以实现持续可靠的 AMQP 数据通信。

Federation 插件是一个不需要构建 Cluster ,可以直接在 Brokers 之间传输消息的高性能插件。当它在 Brokers 或者 Cluster 之间传输消息时,连接的双方可以使用不同的 users 和 virtual hosts,甚至可以使用不同版本的 RabbitMQ 和 Erlang。

Federation 插件使用 AMQP 协议进行通信,可以接受不连续的传输。它的通信不建立在集群上的,而是建立在单个节点上的,比如图上黄色的 node 3 就可以利用 Federation 插件与绿色的 node1、node2、node3 中的任意一个节点进行数据的同步操作。

Federation 插件配置过程可以参考如下博客:

https://blog.csdn.net/yisuyanyu/article/details/106055000


镜像模式

镜像模式(Mirror)是一个非常经典的集群模式,它能保证 100% 数据不丢失,在实际工作中使用广泛,而且实现简单,互联网大厂一般都会使用这种模式来构建集群,所以本篇博客会以这个模式为重点进行详细介绍。

镜像模式实际上就是在主备模式的基础上进行了扩展,集群中所有的节点设备都是同步的。
在这里插入图片描述
消息的发布与消费都是通过 master 节点完成的,master 节点对消息进行处理的同时会将消息的处理动作广播给所有的 slave 节点,slave 节点收到消息后,通过回调交由 mirror_queue_slave进行实际处理。

镜像模式流程

程序(Springboot Application)通过访问 KeepAlived 提供的 VIP(虚拟 ip)指定到其中一个Haproxy,然后 Haproxy 将访问请求代理到其管理的多个 Rabbitmq Server 中的一个,从而实现了高可用、负载均衡的功能。

镜像集群模式搭建过程

1. 准备 5 台服务器节点用来搭建集群在这里插入图片描述
如图所示,我们选择在 76 - 78 节点上安装部署对应的 RabbitMQ 服务,79 和 80 节点用来部署 Haproxy 和 Keepalived 来对 3 个消息队列节点进行负载均衡和健康检测。

2. 复制 Erlang Cookie

消息队列在启动的时候,Erlang VM 会在/var/lib/rabbitmq/目录下自动创建一个随机的 cookie 文件:.erlang.cookie。.erlang.cookie 是 Erlang 分布式的 token 文件,集群内所有设备要持有相同的.erlang.cookie 文件才允许彼此通信。

在这里,我们选择 76、77、78 任意一个节点为 Master(这里选择 76 为 Master),也就是说我们需要把76的 Cookie 文件同步到 77、78 节点上去。

进入 /var/lib/rabbitmq 目录下,把.erlang.cookie文件 copy 到 77、78 节点下:

scp /var/lib/rabbitmq/.erlang.cookie root@192.168.11.77:/var/lib/rabbitmq/
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

盛夏温暖流年

可以赏个鸡腿吃嘛~

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值