原文链接:https://www.jianshu.com/p/63642a48b9ec
在正式的聊聊集群的原理之前,我们先简单了解下RabbitMQ的优缺点,然后为什么要使用RabbitMQ的集群模式,他能为我们解决那些问题,各种不同的集群模式有什么区别,又有什么优缺点;
RabbitMQ的优点,我在Centos7下RabbitMQ的搭建其实已经介绍过了,无外乎三大点:解耦、削峰、异步通讯等,我们这里简单提下,但是相对于优点来说,RabbitMQ同样也有缺点:
其中1和3的问题都可以通过代码和配置来解决,但是问题2和4就不好解决了,为了解决上面的问题,就出现了RabbitMQ服务的集群
什么是普通集群呢? 就是在多个联通的服务器上安装不同的RabbitMQ的服务,这些服务器上的RabbitMQ服务组成一个个节点,通过RabbitMQ内部提供的命令或者配置来构建集群,形成了RabbitMQ的普通集群模式
普通集群模式的原理比较简单,但是并不能真正意义上的实现高可用,他也存在以下的以下缺点:
那么该怎么解决上述的问题呢?
为了解决上面普通模式的两个显著的缺点,RabbitMQ官方提供另外一种集群模式:镜像集群模式
镜像集群模式和普通集群模式大体是一样的,不一样的是:
镜像集群模式是怎么开启的呢?这里简单说下,在普通集群模式的基础上,我们可以通过web控制端来配置数据的同步策略,可以配置同步所有的节点,也可以配置同步到指定数量的服务节点
虽然镜像集群模式能够解决普通集群模式的缺点,当任一节点宕机了,不能正常提供服务了,也不影响该消息的正常消费,但是其本身也有相应的缺点:
对于镜像集群而言,当某个queue负载过重,可能会导致集群雪崩,那么如何来减少集群雪崩呢?我们可以通过HA的同步策略来实现
HA的同步策略如下:
HA-mode | HA-params | 说明 |
---|---|---|
all | 空 | 镜像队列将会在整个集群中复制。当一个新的节点加入后,也会在这个节点上复制一份。 |
exactly | count | 镜像队列将会在集群上复制count份。如果集群数量少于count时候,队列会复制到所有节点上。 如果大于Count集群,有一个节点crash后,新进入节点也不会做新的镜像。(可以阻止集群雪崩) |
nodes | node name | 镜像队列会在node name中复制。如果这个名称不是集群中的一个,这不会触发错误。 如果在这个node list中没有一个节点在线,那么这个queue会被声明在client连接的节点。 |
原文:https://www.cnblogs.com/fswhq/p/13859597.html