RabbitMQ高可用性
RabbitMQ是基于主从非分布式做高可用性的。有三种模式单机模式、普通集群模式和镜像集群模式。
单机模式,一般就是本地demo作示例用的。
普通集群模式(无高可用性),就是在多台机器上启动多个RabbitMQ实例,每台机器启动一个。创建的queue只放在一个RabbitMQ实例上,每个实例都同步queue的元数据,元数据是queue的一些配置信息,通过元数据可以找到queue所在实例。消费的时候,如果连接到了另外一个实例,那么那个实例会从queue所在实例上拉取数据过来。这种就是个普通集群。导致要么消费者每次随机连接一个实例然后拉取数据,要么固定连接那个queue所在实例消费数据,前者有数据拉取的开销,后者导致单实例性能瓶颈。而且如果那个放queue的实例宕机了,会导致接下来其他实例就无法从那个实例拉取,开启消息持久化让RabbitMQ落地存储消息的话,消息不一定会丢,得等这个实例恢复了,然后才可以继续从这个queue拉取数据。所以这个没有什么高可用性,主要是提高吞吐量的,就是让集群中多个节点来服务某个queue的读写操作。
镜像集群模式(高可用性),镜像集群模式下创建的queue,无论是元数据还是queue里的消息都会存在于多个实例上,每个RabbitMQ 节点都有这个queue的一个完整镜像,包含 queue的全部数据。每次写消息到queue的时候,都会自动把消息同步到多个实例的queue 上。