耶耶耶耶耶 发表于 2024-11-11 06:50:18

【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 集群发布/订阅消息的基本原理
集群原理图如下:
https://i-blog.csdnimg.cn/direct/4d984054cb7e4fde80471fc0e208b66a.png 
客户端消息收发有以下两种情况:
客户端直接连接队列所在的节点: 如果消息生产者或者消耗者通过 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

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
页: [1]
查看完整版本: 【RabbitMQ】之高可用集群搭建