1.问题情景
当我们搭建了一个 RabbitMQ 集群后是存在问题的,也就是数据不同步.我们可以来看下是什么问题
1. 1 添加队列
①:选择虚拟机(需要保证操作⽤户对当前虚拟机有操作权限)
②:设置队列名称
③:持久化队列
④:指定队列所在主节点,其他为从节点分别以 rabbit 节点和 rabbit2 节点添加两个队列
1.2 添加之后,可以看到三个节点都有队列了
1.3 往 testQueue 队列中发送⼀条数据(从任⼀节点都可以)
1.4 发送之后,观察 3 个节点的队列中均有消息
1.5 关闭主节点
root@hcss-ecs-2618:~# rabbitmqctl -n rabbit stop_app #rabbit为节点名称
Stopping rabbit application on node rabbit@hcss-ecs-2618 ...
root@hcss-ecs-2618:~#
关闭后可以看到 rabbit2 和 rabbit3 没有该队列的数据了,但是另⼀个队列不受影响
也就是说,这个数据只在主节点存在,从节点没有,如果关闭的是 rabbit2,那么 testQueue2 的数据会消失 如何解决这个问题呢,就需要引⼊咱们的"仲裁队列"
2.仲裁队列(Quorum Queues)
RabbitMQ 的仲裁队列是⼀种基于 Raft ⼀致性算法实现的持久化、复制的 FIFO 队列.
仲裁队列提供队列复制的能⼒,保障数据的⾼可⽤和安全性.使⽤仲裁队列可以在 RabbitMQ 节点间进⾏队列数据的复制,从⽽达到在⼀个节点宕机时,队列仍然可以提供服务的效果.
Quorum Queues | RabbitMQ官⽅⽂档:Quorum Queues | RabbitMQ
仲裁队列是 RabbitMQ 3.8 版本最重要的改动.他是镜像队列的替代⽅案.在 RabbitMQ 3.8版本问世之前,镜像队列是实现数据⾼可⽤的唯⼀⼿段,但是它有⼀些设计上的缺陷,这也是 RabbitMQ 提供仲裁队列的原因.经典镜像队列已被弃⽤,并计划在将来版本中移除.
2.1 Raft 协议介绍
什么是 Raft?
&n