RabbitMQ 的高可用集群

RabbitMQ 的高可用性

RabbitMQ 是比较有表明性的,由于是基于主从非分布式)作高可用的服务器

RabbitMQ 有三种模式:单机模式、普通集群模式、镜像集群模式。微信

单机模式

单机模式,生产几乎不用。网络

普通集群模式(无高可用性)

普通集群模式,有服务器ABC,在服务器ABC上分别启动RabbitMQ实例,生产者生产消息1,随机发给某一实例A,实例BC 上记录消息1的原数据信息(好比消息1具体信息在示例A上),消费者消费消息,随机链接某个示例B,消费消息1,实例B根据 原数据发现消息1在实例A上,则实例B去实例A拉取消息返回给消费者。分布式

就是个普通集群。由于这致使你要么消费者每次随机链接一个实例而后拉取数据,要么固定链接那个 queue 所在实例消费数据,前者有数据拉取的开销,后者致使单实例性能瓶颈性能

并且若是那个放 queue 的实例宕机了,会致使接下来其余实例就没法从那个实例拉取,若是你开启了消息持久化,让 RabbitMQ 落地存储消息的话,消息不必定会丢,得等这个实例恢复了,而后才能够继续从这个 queue 拉取数据。3d

因此这个事儿就比较尴尬了,这就没有什么所谓的高可用性,这方案主要是提升吞吐量的,就是说让集群中多个节点来服务某个 queue 的读写操做。blog

镜像集群模式(高可用性)

这种模式,才是所谓的 RabbitMQ 的高可用模式。跟普通集群模式不同的是,在镜像集群模式下,你建立的 queue,不管元数据仍是 queue 里的消息都会存在于多个实例上,就是说,每一个 RabbitMQ 节点都有这个 queue 的一个完整镜像,包含 queue 的所有数据的意思。而后每次你写消息到 queue 的时候,都会自动把消息同步到多个实例的 queue 上。同步

那么如何开启这个镜像集群模式呢?其实很简单,RabbitMQ 有很好的管理控制台,就是在后台新增一个策略,这个策略是镜像集群模式的策略,指定的时候是能够要求数据同步到全部节点的,也能够要求同步到指定数量的节点,再次建立 queue 的时候,应用这个策略,就会自动将数据同步到其余的节点上去了。it

这样的话,好处在于,你任何一个机器宕机了,没事儿,其它机器(节点)还包含了这个 queue 的完整数据,别的 consumer 均可以到其它节点上去消费数据。坏处在于,第一,这个性能开销也太大了吧,消息须要同步到全部机器上,致使网络带宽压力和消耗很重!第二,这么玩儿,不是分布式的,就没有扩展性可言了,若是某个 queue 负载很重,你加机器,新增的机器也包含了这个 queue 的全部数据,并无办法线性扩展你的 queue。你想,若是这个 queue 的数据量很大,大到这个机器上的容量没法容纳了,此时该怎么办呢?集群

如感受文章对你有所帮助,能够关注微信公众号【五彩的颜色】鼓励一下

相关文章
相关标签/搜索