RabbitMQ:镜像集群搭建(基于Docker)

集群形式

RabbitMQ集群节点包括内存节点(RAM)、磁盘节点(Disk,消息持久化),集群中至少有一个Disk节点。

普通模式

对于普通模式,集群中各节点有相同的队列结构,但消息只会存在于集群中的一个节点。对于消费者来说,若消息进入A节点的Queue中,当从B节点拉取时,RabbitMQ会将消息从A中取出,并经过B发送给消费者。

应用场景:该模式各适合于消息无需持久化的场合,如日志队列。当队列非持久化,且创建该队列的节点宕机,客户端才可以重连集群其他节点,并重新创建队列。若为持久化,只能等故障节点恢复。

镜像模式

与普通模式不同之处是消息实体会主动在镜像节点间同步,而不是在取数据时临时拉取,高可用;该模式下,mirror queue有一套选举算法,即1个master、n个slaver,生产者、消费者的请求都会转至master。

应用场景:可靠性要求较高场合,如下单、库存队列。

缺点:若镜像队列过多,且消息体量大,集群内部网络带宽将会被此种同步通讯所消耗。

(1)镜像集群也是基于普通集群,即只有先搭建普通集群,然后才能设置镜像队列。

2)若消费过程中,master挂掉,则选举新master,若未来得及确认,则可能会重复消费

搭建

创建三个节点

mkdir -p /mydata/rabbitmq/rabbitmq01
mkdir -p /mydata/rabbitmq/rabbitmq02
mkdir -p /mydata/rabbitmq/rabbitmq03
docker run -d --hostname rabbitmq01  --name rabbitmq01 -v /mydata/rabbitmq/rabbitmq01:/var/lib/rabbitmq  -p 15673:15672 -p 5673:5672 -e RABBITMQ_ERLANG_COOKIE='wj' rabbitmq:management
docker run -d --hostname rabbitmq02  --name rabbitmq02 -v /mydata/rabbitmq/rabbitmq02:/var/lib/rabbitmq  -p 15674:15672 -p 5674:5672 -e RABBITMQ_ERLANG_COOKIE='wj' --link  rabbitmq01:rabbitmq01 rabbitmq:management
docker run -d --hostname rabbitmq03  --name rabbitmq03 -v /mydata/rabbitmq/rabbitmq03:/var/lib/rabbitmq  -p 15675:15672 -p 5675:5672 -e RABBITMQ_ERLANG_COOKIE='wj' --link  rabbitmq01:rabbitmq01 --link  rabbitmq02:rabbitmq02 rabbitmq:management

RABBITMQ_ERLANG_COOKIE:节点认证作用,部署集群时,需要同步该值。

节点加入集群

docker exec -it rabbitmq01 /bin/bash

rabbitmqctl stop_app
rabbitmqctl reset
rabbitmqctl start_app
exit

image-20210401135109417

rabbitmq02加入集群

docker exec -it rabbitmq02 /bin/bash

rabbitmqctl stop_app
rabbitmqctl reset
rabbitmqctl join_cluster --ram rabbit@rabbitmq01
rabbitmqctl start_app
exit

rabbitmq03加入集群

docker exec -it rabbitmq03 /bin/bash

rabbitmqctl stop_app
rabbitmqctl reset
rabbitmqctl join_cluster --ram rabbit@rabbitmq01
rabbitmqctl start_app
exit

访问:http://192.168.1.48:15673/#/

image-20210401135430202

实现镜像集群

docker exec -it rabbitmq01 /bin/bash
#设置策略
rabbitmqctl set_policy -p / ha "^" '{"ha-mode":"all","ha-sync-mode":"automatic"}'
#查询策略
rabbitmqctl  list_policies -p /

image-20210401135940526

验证镜像集群

添加一个hello队列

image-20210401140123469

添加完成后,发现其他mq实例也有这个队列

image-20210401140220268

我们发布一个持久化消息:

image-20210401140258709

在其他mq实例中可以消费该消息

image-20210401140412225

原文地址:https://www.cnblogs.com/wwjj4811/p/14606087.html