RabbitMQ高可用方案

搭建RabbitMQ内建集群

为什么需要集群?

  • 高可用:保证生产者和消费者在某个节点故障后,仍然可以连上其他节点
  • 高性能:通过添加更高节点来线性扩展消息通信吞吐量

分布交换器

当某节点故障后,需要保证连接该节点的消费者能重新连接集群并重新创建队列。要做到这一点,就要分布交换器,即每个节点都拥有其他节点上的交换器信息

镜像队列

在有了分布交换器机制的后,可以解决节点故障时,消费者重连集群并创建队列的问题。但是,故障节点上队列中的消息在恢复前是不可用的。在2.6.0版本之前,上述情况是存在的,因为队列只存活于集群的一个节点上。但是现在,有了双活的选择:镜像队列。镜像队列的主拷贝仅存在于一个节点(主队列)上,镜像节点在集群中的其他节点上拥有从队列(slave)拷贝。一旦队列节点不可用,最老的从队列将被选举为新的主队列。

具体步骤

  • 停止Rabbit运行:rabbitmqctl stop
  • 停止RabbitMQ插件:rabbitmq-plugins disable rabbitmq_management,避免其他节点启动时冲突
  • 添加第二、三个节点,并分别命名为rabbit_1、rabbit_2,端口号依次监听5673、5674