RabbitMQ集群模式有两种:普通集群模式和镜像集群模式。
普通模式
下图表示在集群配置下的不同节点创建队列的情况
下图表示在集群配置下的不同节点创建交换器和队列的绑定的情况
缺点
这种方式的缺点很明显,没有做到所谓的分布式、只是一个普通的集群。这种方式在消费数据时要么随机选择一个实例拉去数据、要么固定连接那个queue所在的实例来拉取数据,前者导致一次实例见拉取数据的开销、而后在会导致单实例性能的瓶颈。
而且如果存放数据的queue的实例宕机了、会导致其它实例无法从该实例来拉取数据了,如果你开启了RabbitMQ的持久化功能,消息不一定会丢失,但是得等待这个实例重启后才能继续从该queue拉取数据。
镜像模式
缺点
1、性能开销太大,消息同步到所有的节点服务器会导致网络带宽压力和消耗很严重。
2、这种模式没有扩展性可言,如果你某个queue的负载很高,你加机器,新增的机器也包含了这个queue的所有数据,并没有办法线性扩展你的queue.
使用
新增策略
UI管理界面的 Admin >> Policies 里新增一个策略,并且在定义配置里设置ha-mode=all
参数意义:
- ha-all:为策略名称。
- ^:为匹配符,只有一个 ^ 代表匹配所有,^ha 为匹配名称为 ha 的 exchanges 或者 queue。
- ha-mode: 为匹配类型。all 代表所有。
- ha-sync-mode: 为数据同步模式。 automatic 代表自动同步数据。
重启node1服务
节点1关闭
节点1已启动,但不可用。
节点1可用
再次查看队列,可以发现,主节点变成的了node2,镜像节点变成了node0和node1。