【RabbitMQ】之高可用集群搭建

一、RabbitMQ 集群简介

1、默认集群原理
1-1、RabbitMQ 集群简介

单台 RabbitMQ 服务器处理消息的能力是有瓶颈的,而且可靠性还无法保证,所以需要通过集群来提高消息的吞吐量和提高数据可靠性。

由于 RabbitMQ 本身是基于 Erlang 编写,而 Erlang 语言天生具备分布式特性(通过同步 Erlang 集群各节点的 erlang.cookie 来实现)。因此,RabbitMQ 天然支持集群,并且还能通过水平扩展节点的方式提高吞吐量。

在一个多节点的 RabbitMQ 集群中,Exchange(交换器)的元数据(Metadata)信息在所有节点上都是一致的,而 Queue(存放消息的队列)的完整数据只会存在于创建它的那个节点上,其他节点只知道这个 Queue 的 Qetadata 信息和一个指向 Queue 的 owner node 的指针(起到消息转发作用)。

1-2、RabbitMQ 集群同步的元数据

RabbitMQ 集群会始终同步以下四种类型的内部元数据:

  • Queue 元数据:队列名称和它的属性;
  • Exchange 元数据:交换器名称、类型和属性;
  • Binding 元数据:一张简单的表格展示了如何将消息路由到队列;
  • VHost 元数据:为 VHost 内的队列、交换器和绑定提供命名空间和安全属性;

所以,当用户访问其中任何一个 RabbitMQ 节点时,通过 rabbitmqctl 查询到的 Queue/Exchange/Binding/VHost 等信息都是相同的。

1-3、为什么 RabbitMQ 集群只同步元数据

第一,存储空间。如果每个集群节点都拥有所有 Queue 的完全数据,那么每个节点的存储空间会非常大,集群的消息积压能力会非常弱(无法通过集群节点的扩容提高消息积压能力);

第二,性能。消息的发布者需要将消息复制到每一个集群节点,对于消息持久化、网络和磁盘同步复制的开销都会明显增加。
1-4、RabbitMQ 集群发布/订阅消息的基本原理

集群原理图如下:

客户端消息收发有以下两种情况

客户端直接连接队列所在的节点 : 如果消息生产者或者消费者通过 amqp-client 的客户端连接至节点 1 进行消息的发布或者订阅,那么此时的集群中的消息收发只与节点 1相关。
客户端连接的是非队列数据所在的节点: 如果消息生产者所连接的是节点 2 或者节点 3,此时,由于队列 1 的完整数据不在该两个节点上,所以在发送消息时这两个节点会根据节点上队列 1 的元数据将消息转发至节点1上,最终发送的消息还是会存储至节点 1 的队列 1 上(这两个节点主要起了一个路由转发作用)。同样,如果消息消费者所连接的节点在 2 或者 3,那这两个节点也会作为路由节点起到转发作用,将会从节点 1 的队列 1中 拉取消息进行消费。

1-5、集群节点类型

RabbitMQ 集群节点分为磁盘节点和内存节点两种类型:

磁盘节点 : 将配置信息和元信息存储在磁盘上(单节点系统必须是磁盘节点,否则每次重启 RabbitMQ 之后所有的系统配置信息都会丢失)。
内存节点 : 将配置信息和元信息存储在内存中,性能是优于磁盘节点的。

RabbitMQ 要求集群中至少有一个磁盘节点,当节点加入和离开集群时,必须通知磁盘节点(如果集群中唯一的磁盘节点崩溃了,则不能进行创建队列、创建交换器、创建绑定、添加用户、更改权限、添加和删除集群节点)。

总之如果唯一磁盘的磁盘节点崩溃,集群是可以保持运行的,但不能更改任何东西。因此建议在集群中设置两个磁盘节点,只要一个可以,就能正常操作。

rabbitMQ的配置文件来指定其他配置,如监听的接口和端口等。RabbitMQ的配置文件通常位于 /etc/rabbitmq/rabbitmq.conf

相关推荐
Java程序之猿1 小时前
微服务分布式(一、项目初始化)
分布式·微服务·架构
来一杯龙舌兰1 小时前
【RabbitMQ】RabbitMQ保证消息不丢失的N种策略的思想总结
分布式·rabbitmq·ruby·持久化·ack·消息确认
节点。csn3 小时前
Hadoop yarn安装
大数据·hadoop·分布式
NiNg_1_2344 小时前
基于Hadoop的数据清洗
大数据·hadoop·分布式
隔着天花板看星星6 小时前
Spark-Streaming集成Kafka
大数据·分布式·中间件·spark·kafka
技术路上的苦行僧10 小时前
分布式专题(8)之MongoDB存储原理&多文档事务详解
数据库·分布式·mongodb
龙哥·三年风水10 小时前
workman服务端开发模式-应用开发-后端api推送修改二
分布式·gateway·php
小小工匠11 小时前
分布式协同 - 分布式事务_2PC & 3PC解决方案
分布式·分布式事务·2pc·3pc
Allen Bright11 小时前
Spring Boot 整合 RabbitMQ:从入门到实践
spring boot·rabbitmq·java-rabbitmq
闯闯的日常分享13 小时前
分布式锁的原理分析
分布式