参考 参考 https://blog.csdn.net/m0_47214030/article/details/131358298
mkdir -p /data/rabbitmq_cluster/node/{data,conf,log} chmod -R 777 /data/rabbitmq_cluster/node cat << EOF >/data/rabbitmq_cluster/node/data/.erlang.cookie
LleLHxuTQBrxgR4VnP03Q7 EOF chmod -R 600 /data/rabbitmq_cluster/node/data/.erlang.cookie
每台机器分别执行 node1
docker run -d --name rabbitmq --restart=always --hostname node1 \
-e RABBITMQ_DEFAULT_USER=admin -e RABBITMQ_DEFAULT_PASS=123456 \
-e RABBITMQ_DEFAULT_VHOST=my_vhost \ --privileged=true \
--add-host node2:192.168.2.202 --add-host node3:192.168.2.203 \
-v /data/rabbitmq_cluster/node/data:/var/lib/rabbitmq -v /data/rabbitmq_cluster/node/conf:/etc/rabbitmq -v /data/rabbitmq_cluster/node/log:/var/log/rabbitmq \
-p 4369:4369 -p 5672:5672 -p 15672:15672 -p 25672:25672 \
rabbitmq:management
node2
docker run -d --name rabbitmq --restart=always --hostname node2 \
-e RABBITMQ_DEFAULT_USER=admin -e RABBITMQ_DEFAULT_PASS=123456 \
-e RABBITMQ_DEFAULT_VHOST=my_vhost \ --privileged=true \
--add-host node1:192.168.2.201 --add-host node3:192.168.2.203 \
-v /data/rabbitmq_cluster/node/data:/var/lib/rabbitmq -v /data/rabbitmq_cluster/node/conf:/etc/rabbitmq -v /data/rabbitmq_cluster/node/log:/var/log/rabbitmq \
-p 4369:4369 -p 5672:5672 -p 15672:15672 -p 25672:25672 \
rabbitmq:management
node3
docker run -d --name rabbitmq --restart=always --hostname node3 \
-e RABBITMQ_DEFAULT_USER=admin -e RABBITMQ_DEFAULT_PASS=123456 \
-e RABBITMQ_DEFAULT_VHOST=my_vhost \ --privileged=true \
--add-host node1:192.168.2.201 --add-host node2:192.168.2.202 \
-v /data/rabbitmq_cluster/node/data:/var/lib/rabbitmq -v /data/rabbitmq_cluster/node/conf:/etc/rabbitmq -v /data/rabbitmq_cluster/node/log:/var/log/rabbitmq \
-p 4369:4369 -p 5672:5672 -p 15672:15672 -p 25672:25672 \
rabbitmq:management
设置节点1
docker exec -it rabbitmq /bin/bash
rabbitmq-plugins enable rabbitmq_management # 管理页面插件 r
abbitmqctl stop_app # (rabbitmqctl stop 会将Erlang 虚拟机关闭,rabbitmqctl stop_app 只关闭 RabbitMQ 服务)
rabbitmqctl reset
rabbitmqctl start_app #(只启动应用服务)
exit
设置节点2
docker exec -it rabbitmq bash
rabbitmq-plugins enable rabbitmq_management # 管理页面插件
rabbitmqctl stop_app
rabbitmqctl reset
rabbitmqctl join_cluster rabbit@node1
rabbitmqctl start_app(只启动应用服务)
exit
设置节点3
docker exec -it rabbitmq bash
rabbitmq-plugins enable rabbitmq_management # 管理页面插件
rabbitmqctl stop_app
rabbitmqctl reset r
abbitmqctl join_cluster rabbit@node1
rabbitmqctl start_app(只启动应用服务)
exit
2.5、预览结果 节点设置完成之后,在浏览器访问192.168.13.100:15673、192.168.13.100:15674和192.168.13.100:15675中任意一个来查看RabbitMQ Management: 至此,RabbitMQ集群搭建完毕。 3、配置镜像队列 3.1、配置镜像的原因 如果 RabbitMQ 集群中只有一个 Broker 节点,那么该节点的失效将导致整体服务的临时性不可用,并 且也可能会导致消息的丢失。可以将所有消息都设置为持久化,并且对应队列的durable属性也设置为true,但 是这样仍然无法避免由于缓存导致的问题:因为消息在发送之后和被写入磁盘井执行刷盘动作之间存在一 个短暂却会产生问题的时间窗。通过 publisherconfirm(发布确认) 机制能够确保客户端知道哪些消息己经存入磁盘,尽 管如此,一般不希望遇到因单点故障导致的服务不可用。 引入镜像队列(Mirror Queue)的机制,可以将队列镜像到集群中的其他 Broker 节点之上,如果集群中 的一个节点失效了,队列能自动地切换到镜像中的另一个节点上以保证服务的可用性。 3.2、搭建步骤 启动三台集群节点 随便找一个节点添加 policy(策略) 要先绑定一个交换机和队列才行 参考 https://blog.csdn.net/suyuaidan/article/details/133761176 说明: Name:新建的策略的名字(按照自己的需求进行设置即可) Pattern:会按照设置的规则进行镜像设置(例如本例中设置为 ^mirror,则会为开头是 mirror 的队列进行镜像备份) Pattern: queue的匹配模式(正则表达式)。^表示所有队列都是镜像队列。 Definition: 镜像定义,包括三个部分ha-sync-mode、ha-mode、ha-params。 ha-mode: 指明镜像队列的模式,有效取值范围为all/exactly/nodes。 all:表示在集群所有的代理上进行镜像。 exactly:表示在指定个数的代理上进行镜像,代理的个数由ha-params指定。 nodes:表示在指定的代理上进行镜像,代理名称通过ha-params指定。 ha-params: ha-mode模式需要用到的参数。 ha-sync-mode: 表示镜像队列中消息的同步方式,有效取值范围为:automatic,manually。 automatic:表示自动向master同步数据。 manually:表示手动向master同步数据。 Priority: 可选参数, policy的优先级。 3.在 rabbitmq-node1 上创建一个队列发送一条消息,队列存在镜像队列 4、停掉 rabbitmq-node1 之后发现 rabbitmq-node2 成为镜像队列 5、就算整个集群只剩下一台机器了 依然能消费队列里面的消息 说明队列里面的消息被镜像队列传递到相应机器里面 标签:队列,--,rabbitmq,cluster,集群,RabbitMQ,镜像,docker,data From: https://www.cnblogs.com/lucoo/p/18163346