docker搭建rabbitmq集群——镜像模式

RabbitMQ是一套开源(MPL)的消息队列服务软件,是由 LShift 提供的一个 Advanced Message Queuing Protocol (AMQP) 的开源实现,由以高性能、健壮以及可伸缩性出名的 Erlang 写成

RabbitMQ的5大核心概念:Connection(连接)、Channel(信道)、Exchange(交换机)、Queue(队列)、Virtual host(虚拟主机)。

普通模式的集群

普通模式的集群是不会将创建的队列复制到其他节点,虽然我们在其它节点能够看到这个节点;这是由于其它节点只会保存一份这个队列的元数据,展示给我们看的,真实的队列还是存在创建这个队列的节点中的;如果这个时候我们把创建队列的的节点关闭,那么这个队列其实就不可用了; 为了解决这个问题,rabbitmq还提供了另外一种集群模式:镜像模式

镜像模式

镜像模式是rabbit提供的一种可添加的策略模式,如果创建的队列和创建的策略能够匹配上,则会把队列同步复制到其他节点中,而不再只是复制元数据;

这里使用docker来搭建rabbitmq集群的镜像模式,首先准备好docker环境,下载好镜像

创建网卡

docker network create rabbitmq_net
#安装三个rabbitmq组件,一主两从

docker run -d --name=rabbitmq_master -p 5672:5672 -p 15672:15672 -e RABBITMQ_NODENAME=rabbitmq_master -e RABBITMQ_ERLANG_COOKIE='1111111' -h rabbitmq_master --net=rabbitmq_net -v /data/rabbitmq-1/rabbitmq_master/data:/var/lib/rabbitmq -e RABBITMQ_DEFAULT_USER=admin -e RABBITMQ_DEFAULT_PASS=CiA7rk7L_6gIKnaX  rabbitmq:3.8.27-management
docker run -d --name=rabbitmq_slave1 -p 5673:5672 -p 15673:15672 -e RABBITMQ_NODENAME=rabbitmq_slave1 -e RABBITMQ_ERLANG_COOKIE='1111111' -h rabbitmq_slave1 --net=rabbitmq_net -v /data/rabbitmq-1/rabbitmq_slave1/data:/var/lib/rabbitmq -e RABBITMQ_DEFAULT_USER=admin -e RABBITMQ_DEFAULT_PASS=CiA7rk7L_6gIKnaX  rabbitmq:3.8.27-management
docker run -d --name=rabbitmq_slave2 -p 5674:5672 -p 15674:15672 -e RABBITMQ_NODENAME=rabbitmq_slave2 -e RABBITMQ_ERLANG_COOKIE='1111111' -h rabbitmq_slave2 --net=rabbitmq_net -v /data/rabbitmq-1/rabbitmq_slave2/data:/var/lib/rabbitmq -e RABBITMQ_DEFAULT_USER=admin -e RABBITMQ_DEFAULT_PASS=CiA7rk7L_6gIKnaX  rabbitmq:3.8.27-management

开启三个组件的管理端插件

docker exec -it rabbitmq_master /bin/bash
rabbitmq-plugins enable rabbitmq_management
exit
docker exec -it rabbitmq_slave1 /bin/bash
rabbitmq-plugins enable rabbitmq_management
exit
docker exec -it rabbitmq_slave2 /bin/bash
rabbitmq-plugins enable rabbitmq_management
exit

浏览器分别访问以下地址,用户名和密码都是admin
http://localhost:15672/#/ http://localhost:15673/#/ http://localhost:15674/#/ 如果成功登入,则代表组件安装成功,但是这时候还不是集群模式,我们需要手动加入到集群

salve1加入集群

docker exec -it rabbitmq_slave1 /bin/bash
rabbitmqctl stop_app
rabbitmqctl join_cluster rabbitmq_master@rabbitmq_master
rabbitmqctl start_app
exit

salve2加入集群

docker exec -it rabbitmq_slave2 /bin/bash
rabbitmqctl stop_app
rabbitmqctl join_cluster rabbitmq_master@rabbitmq_master
rabbitmqctl start_app
exit

开启镜像队列

docker exec -it rabbitmq_slave1 /bin/bash
rabbitmqctl set_policy my_ha "^" '{"ha-mode":"all"}'
exit

到这里,rabbitmq集群镜像模式就安装成功了

docker一键安装rabbitmq集群镜像模式脚本:

start_rabbitmq.sh

#创建网卡
docker network create rabbitmq_net
#安装三个rabbitmq组件,一主两从
docker run -d --name=rabbitmq_master -p 5672:5672 -p 15672:15672 -e RABBITMQ_NODENAME=rabbitmq_master -e RABBITMQ_ERLANG_COOKIE='1111111' -h rabbitmq_master --net=rabbitmq_net -v /data/rabbitmq-1/rabbitmq_master/data:/var/lib/rabbitmq -e RABBITMQ_DEFAULT_USER=admin -e RABBITMQ_DEFAULT_PASS=CiA7rk7L_6gIKnaX  rabbitmq:3.8.27-management
docker run -d --name=rabbitmq_slave1 -p 5673:5672 -p 15673:15672 -e RABBITMQ_NODENAME=rabbitmq_slave1 -e RABBITMQ_ERLANG_COOKIE='1111111' -h rabbitmq_slave1 --net=rabbitmq_net -v /data/rabbitmq-1/rabbitmq_slave1/data:/var/lib/rabbitmq -e RABBITMQ_DEFAULT_USER=admin -e RABBITMQ_DEFAULT_PASS=CiA7rk7L_6gIKnaX  rabbitmq:3.8.27-management
docker run -d --name=rabbitmq_slave2 -p 5674:5672 -p 15674:15672 -e RABBITMQ_NODENAME=rabbitmq_slave2 -e RABBITMQ_ERLANG_COOKIE='1111111' -h rabbitmq_slave2 --net=rabbitmq_net -v /data/rabbitmq-1/rabbitmq_slave2/data:/var/lib/rabbitmq -e RABBITMQ_DEFAULT_USER=admin -e RABBITMQ_DEFAULT_PASS=CiA7rk7L_6gIKnaX  rabbitmq:3.8.27-management
#开启三个组件的管理端插件
docker exec -it rabbitmq_master rabbitmq-plugins enable rabbitmq_management
docker exec -it rabbitmq_slave1 rabbitmq-plugins enable rabbitmq_management
docker exec -it rabbitmq_slave2 rabbitmq-plugins enable rabbitmq_management
#salve1加入集群
docker exec -it rabbitmq_slave1 rabbitmqctl stop_app
docker exec -it rabbitmq_slave1 rabbitmqctl join_cluster rabbitmq_master@rabbitmq_master
docker exec -it rabbitmq_slave1 rabbitmqctl start_app
#salve2加入集群
docker exec -it rabbitmq_slave2 rabbitmqctl stop_app
docker exec -it rabbitmq_slave2 rabbitmqctl join_cluster rabbitmq_master@rabbitmq_master
docker exec -it rabbitmq_slave2 rabbitmqctl start_app
#开启镜像队列
docker exec -it rabbitmq_slave1 rabbitmqctl set_policy ha-all "^" '{"ha-mode":"all"}'

你可能感兴趣的:(docker,rabbitmq,集群,rabbitmq,docker,分布式)