对RabbitMQ集群的理解

本文介绍了RabbitMQ的集群机制,包括如何通过Erlang虚拟机实现节点间通信,队列元数据、交换器元数据等关键概念及其在单节点与集群环境下的表现差异,并深入探讨了镜像队列对于保障集群高可用性的重要性。

上一篇文章讲了RabbitMQ中几个核心组件是如何配合工作的,现在来分析一下集群中的行为

Rabbit节点

1)RabbitMQ是使用Erlang语言编写的,当我们执行  ./rabbitmq-server start  后,一个Erlang虚拟机实例启动

2)区别于Java虚拟机一个程序对应一个虚拟机实例,Erlang虚拟机上可以运行多个程序(通常和Rabbit一起启动的有,Mnesia数据库和Rabbit admin插件),为了方便描述,以下将Erlang虚拟机实例称为Rabbit节点。

3)Rabbit节点需要有相同的凭证才能找到对方,这个凭证就是   .erlang.cookie文件

     Windows下的位置:C:\Users\%USERNAME%\.erlang.cookie

     CentOS7下的位置:/root/.erlang.cookie


rabbit元数据

rabbit会保存四种元数据:

1)队列元数据:队列名称、属性、是否是持久化队列等

2)交换器元数据:交换器名称、属性、是否被持久化等

3)绑定元数据:队列与交换器的对应关系

4)vhost元数据:命名空间管理等

单节点下行为

上图是单节点的情况下,交换器和队列信息被保存在内存中,如果是持久化的队列和交换器则被保存在硬盘上,当节点关闭,会丢失未持久化的交换器和队列。

集群下的行为


1)每个节点会保存交换器、队列、绑定等数据

2)消费者可以通过连接任何节点来定位到需要的队列获取数据

3)默认情况下,队列的完整信息(含内容)不会在集群下所有的节点中保存,而是只存在于一个节点中

4)当保存队列完整信息的节点崩溃,消费者不能从集群中获得这个队列的消息,生产者不能推送消息到队列中

5)为了保证集群的高可用,可以在创建队列时声明为镜像队列,即所有节点都保存队列的完整信息,其中有一个主队列,其他都是从队列,当主队列所在的节点崩溃,集群在从队列中选举出一个队列成为主队列






评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值