Rabbitmq-集群

集群分类

RabbitMq是天然支持集群模式。rabbitmq的集群有两种模式:

  • 普通模式: 是一种分布式集群,将队列分散到集群各个节点,从而提供整个集群的并发能力。可用性不高。因为一个节点宕机,这个节点上的数据将不可用。
  • 镜像集群:是一种主从集群,普通集群的基础上,添加了主从备份功能,提供集群的数据可用性。

镜像集群虽然支持主从,但主从同步并不是强一致性的,某些情况下可能有数据丢失的风险。因此在RabbitMq的3.8版本以后退出了新的功能:仲裁队列来替代镜像集群。底层采用Raft协议确保主从的数据一致性。

普通集群

普通集群,或者叫标准集群(classic cluster),具备下列特征:

  • 会在集群各个节点间共享数据部分,包括交换机,队列元信息(队列的名字,队列的地址)。但是不包含队列的信息
  • 当访问集群某节点时,如果队列不再该节点,会在数据所在节点传递到当前节点并返回(因为共享队列的元信息)
  • 队列所在节点宕机,队列中消息将会丢失。

Rabbitmq-集群_第1张图片

镜像集群

镜像集群: 本质是主从模式,具备下面的特征:

  • 交换机,队列,队列中消息会在各个mq的镜像节点之间同步备份。
  • 创建队列的节点被称为队列的主节点,备份到其他节点叫做该队列的镜像节点。
  • 一个队列的主节点可能是另一个队列的镜像节点
  • 所有操作都是主节点完成,然后同步给镜像节点
  • 主节点宕机后,镜像节点会成为主节点
    Rabbitmq-集群_第2张图片

仲裁队列

是用来替换镜像队列的

  • 与镜像集群一样,都是主从模式,支持主从数据同步
  • 使用简单,没有复杂的配置 (默认值为5,就是 1主 4镜像)
  • 主从同步基于Raft 协议,强一致

Rabbitmq-集群_第3张图片

Rabbitmq-集群_第4张图片

Rabbitmq-集群_第5张图片

优势

  1. 客户端不需要改变它们生产和订阅的方法,无需考虑队列类型。
    唯一的区别就是在客户端定义队列的时候需要定义成仲裁队列(代码中添加相关属性)
  2. 被解决当节点重新上线时,不会丢数据(解决了镜像队列同步的问题)
    主副本会直接从从副本中断的地方开始复制消息。复制的过程是非阻塞的,所以整个队列不会因为新的副本加入而收到影响。唯一的影响是网络使用率。
  3. 没有了同步问题,不仅让仲裁队列比镜像队列更可靠,同时,因为写入必须被超过半数的副本接受,所以不会因为脑裂而丢数据。
    4.Raft 协议比镜像队列的算法更有效率,可以提供更好的消息吞吐量

你可能感兴趣的:(rabbitmq,rabbitmq)