高级特性-Rabbitmq高可用集群

DBC 1.6K 0

RabbitMQ集群模式一介绍

普通集群
默认的集群模式, 比如有节点 node1和node2、node3,三个节点是普通集群,但是他们仅有相同的元数据,即交换机、队列的结构;

案例:
消息只存在其中的一个节点里面,假如消息A,存储在node1节点,
消费者连接node1个节点消费消息时,可以直接取出来;

但如果 消费者是连接的是其他节点
那rabbitmq会把 queue 中的消息从存储它的节点中取出,并经过连接节点转发后再发送给消费者

问题:
假如node1故障,那node2无法获取node1存储未被消费的消息;
如果node1持久化后故障,那需要等node1恢复后才可以正常消费
如果ndoe1没做持久化后故障,那消息将会丢失

这个情况无法实现高可用性,且节点间会增加通讯获取消息,性能存在瓶颈

项目中springboot+amqp里面需要写多个节点的配置,比如下面

spring.rabbitmq.addresses = 192.168.1.1:5672,192.168.1.2:5672,192.168.1.3:5672

该模式更适合于消息无需持久化的场景,如日志传输的队列
注意:集群需要保证各个节点有相同的token令牌
erlang.cookie是erlang的分布式token文件,集群内各个节点的erlang.cookie需要相同,才可以互相通信

高级特性-Rabbitmq高可用集群插图
高级特性-Rabbitmq高可用集群插图2

讲解RabbitMQ高可用mirror镜像集群模式介绍
镜像集群(大厂基本使用这个方式)
队列做成镜像队列,让各队列存在于多个节点中
和普通集群比较大的区别就是【队列queue的消息message 】会在集群各节点之间同步,且并不是在 consumer 获取数据时临时拉取,而普通集群则是临时从存储的节点里面拉取对应的数据



结论:
实现了高可用性,部分节点挂掉后,不影响正常的消费
可以保证100%消息不丢失,推荐3个奇数节点,结合LVS+Keepalive进行IP漂移,防止单点故障

缺点:由于镜像队列模式下,消息数量过多,大量的消息同步也会加大网络带宽开销,适合高可用要求比较高的项目
过多节点的话,性能则更加受影响
注意:集群需要保证各个节点有相同的token令牌
erlang.cookie是erlang的分布式token文件,集群内各个节点的erlang.cookie需要相同,才可以互相通信
还有其他通过插件形成的集群,比如Federation集群,大家有兴趣可以去了解下

发表评论 取消回复
表情 图片 链接 代码

分享