rabbitmq专题06-RabbitMq的集群

1. rabbitmq 集群的作用

1> 允许生产者和消费者在集群部分节点崩溃的情况下仍能正常运行。

2>通过添加更多的节点来线性扩张消费通信吞吐量。

2. rabbitmq 集群节点 

rabbitmq的集群中每个节点,一般只有一个节点存储交换器和队列的所有信息,其它节点只存储交换器和队列的元数据以及指向队列消息数据所属节点的地址(不包含队列的消息数据)。

集群节点每个节点只保存队列和交换器元数据而不保存队列内容的目的是:提升rabbitmq的吞吐性能和方便消息存储的线性扩张。

每个节点不保存队列所有信息的原因:

1>性能:向队列发布数据的时候,队列数据持久化到磁盘后才能ack(确认)消息发送到队列,整个磁盘的io操作是比较耗费性能的,所以如果每个节点都保存队列的所有信息,那么肯定导致增加了集群节点的负载,增加了rabbitmq集群的压力。

2>存储空间:如果每个节点都保存队列的所有信息,那么扩展集群节点的时候就不能扩张消息存储的空间,因为每个节点上都会存储一摸一样的数据备份,并没有增加额外的存储空间。

3. 交换器为什么能在每个节点上都保存,而队列不能

交换器其实只是个routingKey列表,真正的路由器其实是信道匹配routingKey来路由信息的,所以往每个节点复制routingKey列表其实开销并不是很大。并且如果每个节点都保存了交换器信息,就可用性来讲更强。因为如果每个节点上都有交换器信息,如果连接的节点挂了,那么客户端重连集群后,不管连接的是哪个节点,都有交换器的信息,都能路由消息到队列内容所属节点的队列。保证了高可用。

队列中数据量远远可能超过交换器的数据,并且持久化再磁盘上,如果每个节点都保存队列中的内容的化,所有节点的备份操作、持久化操作势必造成集群压力增大,性能降低。

4. 集群节点类型

集群节点节点类型:内存节点、磁盘节点。

内存节点性能更好,但是节点宕机后,重启消息会丢失,并且交换器和队列的元数据也会丢失。

磁盘节点性能低,但是能把内存节点的数据都持久化到磁盘,宕机后重启,交换器和队列的元数据和队列的内容数据都还在。

所以集群中至少要有一个磁盘节点,单节点rabbitmq服务只能是磁盘节点。集群中,如果只有一个磁盘节点,如果磁盘节点故障了,那么集群不能再创建队列、创建交换器、创建绑定、添加用户、更改权限、添加和删除集群节点。但是集群还可以正常运行、可以正常路由信息(信息会丢失,可用发送端的确认机制记录丢失的消息)。解决方案是添加两个磁盘节点内存。

集群中如果有两个磁盘节点,那么确保每个内存节点都配置了这两个磁盘节点,即使其中一个磁盘节点宕机了,也能确保集群的正常使用。例如:当其中一个磁盘节点宕机了,恰好有一个内存节点也宕机了,当内存节点重新恢复后,它还能联系到另一个正常的磁盘节点,重新加入到集群。反之,如果只有一个磁盘节点,那么磁盘节点宕机后,宕机的内存节点恢复后是不能加入到集群环境了。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

荆茗Scaler

你的鼓励是我创作最大的动力

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

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

打赏作者

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

抵扣说明:

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

余额充值