rabbitmq的多种集群模式;镜像集群模式自定义queue同步策略

Posted 好大的月亮

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了rabbitmq的多种集群模式;镜像集群模式自定义queue同步策略相关的知识,希望对你有一定的参考价值。

概述

平時为了保证mq的高可用,一般都会部署集群模式,不过对于rabbitmq有多种集群模式,没有弄对的话容易埋坑。

  • **单机模式:**风险大,生产一般没人使用。
  • **普通集群模式:**虽然是集群,但是没有高可用。
  • **镜像集群模式:**有高可用。

普通集群模式

mq实例部署在多台服务器上。
如果创建了一个queue,那么只会放在一台上面,其他的都是同步这个queue的元数据(即配置信息,可以路由到queue所在机器)。
在消费的时候连接到非queue所在服务器时,会根据保存的queue元数据从它所在的实例上拉数据过来。如果此时queue所在服务宕机了,那么就无法拉取消息,即使开启了消息持久化,也需要等其恢复后才能拉取数据。

这种模式虽然叫集群,让queue分散在不同实例上,能减轻一些压力,但是在高可用要求上还是有点不太行。

镜像集群模式

此种模式和上面普通集群的区别在于,创建的queue会同步到其他实例上,而且queue里的消息也会同步到其他实例中。
简而言之就是每个mq实例中都有queue的完整镜像。每次写一个消息都会同步到其他实例中去。

优点:实现了高可用,避免一个实例挂了,导致某个queue消费阻塞。
缺点:无法线性扩展,新增一台实例消息也全部会同步过去(即包含了queue的全部数据)。而且某些queue的数据量非常大,可能导致磁盘无法容纳。

rabbitmq自定义queue同步策略

控制台配置位置

参数

rabbitmqctl set_policy [-p Vhost] Name Pattern Definition [Priority]

-p Vhost: 可选参数,针对指定vhost下的queue进行设置

Name: policy的名称

#镜像配置的pattern 采用的是正则表达式匹配,也就是说会匹配一组符合要求的队列
Pattern: queue的匹配模式(正则表达式)

Definition:镜像定义,包括三个部分ha-mode, ha-params, ha-sync-mode

	ha-mode:指明镜像队列的模式,有效值为 all/exactly/nodes

		all:表示在集群中所有的节点上进行镜像
		
		exactly:表示在指定个数的节点上进行镜像,节点的个数由ha-params指定
		
		nodes:表示在指定的节点上进行镜像,节点名称通过ha-params指定

	ha-params:ha-mode模式需要用到的参数

	ha-sync-mode:进行队列中消息的同步方式,有效值为automatic和manual

priority:可选参数,policy的优先级

配置demo1同步到所有队列中
_LOG结尾的队列全部同步到其他mq实例中。
ha-sync-mode配置为automatic在某个mq宕机重启后会自动拉取同步

配置demo2,同步到指定实例中
QUEUE_开头的队列同步到指定实例中

以上是关于rabbitmq的多种集群模式;镜像集群模式自定义queue同步策略的主要内容,如果未能解决你的问题,请参考以下文章

《Linux运维实战:Centos7.6部署rabbitmq3.9.16镜像模式集群》

部署Rabbitmq集群

RabbitMQ集群搭建

Rabbitmq 相关介绍之单机镜像模式集群配置

RabbitMQ集群

怎么保证RabbitMQ和kafuka集群的高可用性?