Centos 7 docker搭建RabbitMQ

单机

拉取镜像

这里的 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

进入子节点1容器

docker exec -it rabbitmqCluster02 /bin/bash
rabbitmqctl stop_app
rabbitmqctl reset
rabbitmqctl join_cluster --ram rabbit@rabbitmq01
rabbitmqctl start_app

进入子节点2容器

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

你可能感兴趣的:(rabbitmq,docker,centos)