所有分类
  • 所有分类
  • 未分类

RabbitMQ高可用–镜像队列的用法

简介

说明

本文介绍如何使用RabbitMQ的镜像队列实现高可用。

镜像队列(Mirror Queue):将队列复制到集群的其他Broker节点上,publish到镜像队列的所有消息也被publish到master和所有的slave。如果集群中的一个节点失效了,队列能自动地切换到镜像中的另一个节点上以保证服务的可用性。

备注

在 3.8 以前的版本,RabbitMQ 通过镜像队列(Classic Queue Mirroring)来提供高可用性。但镜像队列存在很大的局限性,在 3.8 之后的版本 RabbitMQ 推出了 Quorum queues 来替代镜像队列,在之后的版本中镜像队列将被移除。

为什么引入镜像队列?

如果RabbitMQ集群中只有一个Broker节点,那么该节点的失效将导致整体服务的临时性不可用,并且也可能会导致消息丢失。可以将所有消息都设置为持久化,并且对应队列的durable属性也设置为true,但是这样仍然无法避免由于缓存导致的问题:因为消息在发送之后和被写入磁盘之间存在时间差,这时可能会产生问题。

通过publisher confirm机制能确保客户端知道哪些消息己经存入磁盘,尽管如此,一般不希望遇到因单点故障导致的服务不可用。

如果RabbitMQ集群是由多个Broker节点组成的,那么该集群对于单点故障是有弹性的,但要注意:尽管交换器和绑定关系在单点故障时没问题,但队列和其存储的消息会丢失,因为队列进程及其内容仅仅维持在单个节点之上,所以一个节点的失效表现为其对应的队列不可用。

一般对每个队列配置镜像队列。这样同一个队列有多个备份,分布到一个主节点(master)和若干个从节点(slave),相应的结构如下图所示:

配置方法

见:RabbitMQ高可用–镜像队列的配置方法 – 自学精灵

镜像队列的原理

见 :RabbitMQ高可用–镜像队列的原理 – 自学精灵

0

评论0

请先

显示验证码
没有账号?注册  忘记密码?

社交账号快速登录