Skip to content

高可用机制

一、普通集群(标准集群)

  • 节点间共享交换机、队列元信息,但不共享队列中的消息
  • 访问队列不在当前节点时,会从队列所在节点传递消息到当前节点返回
  • 特点:无数据备份,节点宕机后该节点上的队列消息会丢失,可用性较低

二、镜像集群(主从模式)

  • 交换机、队列、队列中的消息会在各个镜像节点间同步备份
  • 每个队列有一个主节点,其他节点为镜像节点,所有操作由主节点完成,再同步到镜像节点
  • 主节点宕机后,镜像节点会替代成为新的主节点
  • 缺点:主从同步未完成时主节点宕机,可能导致数据丢失,一致性较弱

三、仲裁队列(推荐替代镜像队列)

  • RabbitMQ 3.8+ 新增功能,替代镜像队列的主从同步方案
  • 主从同步基于 Raft协议,实现数据强一致,解决镜像队列的数据丢失问题
  • 配置简单,声明队列时指定即可启用仲裁模式:
java
@Bean
public Queue quorumQueue() {
    return QueueBuilder.durable("quorum.queue")
            .quorum()
            .build();
}

四、面试回答模板

问:项目中如何保证RabbitMQ服务高可用?答: 项目中采用仲裁队列实现RabbitMQ集群高可用,该方案基于Raft协议保障数据强一致性,避免了传统镜像队列可能出现的数据丢失问题。集群节点间自动完成数据同步,当某个节点宕机后其余节点可无缝接管业务,同时配置简单、运维成本低,有效防止单点故障,保障消息服务持续稳定对外提供服务。

问:简单说下RabbitMQ几种集群方案区别,生产环境如何选择?答: RabbitMQ包含普通集群、镜像集群和仲裁队列三种方案。普通集群仅同步元数据,无消息备份,无法应对节点故障;镜像集群实现消息主从备份,但数据一致性较弱。我们生产环境选用仲裁队列,它具备强数据一致性、故障自动转移的能力,能够在集群节点异常时保证消息不丢失、业务不中断,是目前主流的高可用选型。

Powered by VitePress 1.6.4 | 持续更新中