Centos 7 docker搭建RabbitMQ

Posted Shuaidede

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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

以上是关于Centos 7 docker搭建RabbitMQ的主要内容,如果未能解决你的问题,请参考以下文章

CentOS 7+Docker搭建rabbitMQ无法访问15672端口

CentOS7 使用docker安装rabbitMQ并搭建集群

centos7下docker-ce19.03.2搭建本地开发环境(mysql5.7,RabbitMQ3.7.7-management,redis5.0.5)

在centos搭建rabbitmq并制作docker镜像

centos7 搭建rabbitmq服务 3.7.15

CentOS7.X环境下源码包安装部署RabbitMQ3.7.17