这里的 management 表示拉取带有web管理页面插件的镜像,不指定版本号为拉取最新版。
docker pull rabbitmq:management
mkdir -p /data/rabbitmq
docker run -d --hostname my-rabbitmq --name rabbitmq -v /data/rabbitmq:/var/lib/rabbitmq -p 15672:15672 -p 5672:5672 rabbitmq:management
rabbitmq:management #拉取镜像
–hostname #指定容器的主机名
–name #指定容器名字
-p 5672:5672 #发送消息的端口号
-p 15672:15672 #web页面的端口号
http://localhost:15672
普通集群模式只能同步主节点上的交换机和队列信息,但对于队列中的消息不做同步,主节点宕机也不能进行切换(故障转移)。由于镜像集群模式基于普通集群模式上进行配置,所以先搭建普通集群模式。
mkdir /data/rabbitmq
cd /data/rabbitmq
mkdir rabbitmq01 rabbitmq02 rabbitmq03
docker run -d --hostname rabbitmq01 --name rabbitmqCluster01 -v /data/rabbitmq/rabbitmq01:/var/lib/rabbitmq -p 15672:15672 -p 5672:5672 -e RABBITMQ_ERLANG_COOKIE='rabbitmqCookie' rabbitmq:management
##子节点1
docker run -d --hostname rabbitmq02 --name rabbitmqCluster02 -v /data/rabbitmq/rabbitmq02:/var/lib/rabbitmq -p 15673:15672 -p 5673:5672 -e RABBITMQ_ERLANG_COOKIE='rabbitmqCookie' --link rabbitmqCluster01:rabbitmq01 rabbitmq:management
##子节点2
docker run -d --hostname rabbitmq03 --name rabbitmqCluster03 -v /data/rabbitmq/rabbitmq03:/var/lib/rabbitmq -p 15674:15672 -p 5674:5672 -e RABBITMQ_ERLANG_COOKIE='rabbitmqCookie' --link rabbitmqCluster01:rabbitmq01 --link rabbitmqCluster02:rabbitmq02 rabbitmq:management
–hostsname #容器中的主机名,便于区分
–name #容器名
-v #挂载Linux的目录到容器内目录
-p #映射Linux系统的端口与容器内端口,注意要使用未被占用的端口,每个容器都有两个端口,15672为web页面的访问端口,5672为服务端口
-e #容器环境变量, RABBITMQ_ERLANG_COOKIE 是rabbitmq节点加入集群必须的认证手段
-link #使容器间可以通信
docker exec -it rabbitmqCluster01 /bin/bash
关闭rabbitmq应用,并重置节点数据,再重新启动应用
rabbitmqctl stop_app
rabbitmqctl reset
rabbitmqctl start_app
docker exec -it rabbitmqCluster02 /bin/bash
rabbitmqctl stop_app
rabbitmqctl reset
rabbitmqctl join_cluster --ram rabbit@rabbitmq01
rabbitmqctl start_app
docker exec -it rabbitmqCluster03 /bin/bash
rabbitmqctl stop_app
rabbitmqctl reset
rabbitmqctl join_cluster --ram rabbit@rabbitmq01
rabbitmqctl start_app
docker exec -it rabbitmqCluster01 /bin/bash
设置镜像集群策略(注意,策略可以在队列产生前设置,也可以在队列产生后设置)
rabbitmqctl set_policy --vhost "/MyVirtualHost" ha-all "^hello" '{"ha-mode":"all","ha-sync-mode":"automatic"}'
–vhost #需要使用镜像集群的虚拟机主机(Virtual Host)也可不指定,这里我指定测试用的/MyVirtualHost
ha-all #策略名
“^hello” #通配符匹配,这里我指定以hello开头的队列名,如果需要指定所有队列使用 “^”
‘{“ha-mode”:“all”,“ha-sync-mode”:“automatic”}’ #json格式的参数,其中ha-mode为镜像队列的模式,这里设置all,集群内所有节点都备份镜像;ha-sync-mode是消息队列同步方式,automatic指自动同步
http://localhost:15672