前言

了解下Docker的rabbit的版本:
官方文档地址:https://www.rabbitmq.com/
从官方文档上我们了解有以下几个版本:
在这里插入图片描述
其中management版本是带有web页面的,其他版本需要下载页面插件才可以
。(这里博主就是吃了没看文档的亏,怎么也找不到页面 !!!∑(゚Д゚ノ)ノ)


如果你pull了rabbitmq 的其他版本镜像包,需要做以下操作

docker exec -itd 镜像ID /bin/bash  # 进入容器
进入容器后执行以下操作,即可安装web管理插件
rabbitmq-plugins enable rabbitmq_management  #这条命令是安装web插件的,执行完就可以用web页面了。

———————————————————————————————————
为了避免以上错误,我们接下来的操作直接使用rabbitmq:management版本的

搭建基础环境

  1. 创建数据目录
 mkdir -p /data/mqdata{01..03}

在这里插入图片描述

  1. 拉取并运行rebbitmq容器
docker run -d --hostname rabbit01 --name mq01  -v /data/mqdata01:/var/lib/rabbitmq -p 15672:15672 -p 5672:5672 -e RABBITMQ_DEFAULT_USER=admin -e RABBITMQ_DEFAULT_PASS=123456  -e RABBITMQ_ERLANG_COOKIE='HOUCUGJDZYTFZDSWXTHJ' rabbitmq:management

docker run -d --hostname rabbit02 --name mq02 -v /data/mqdata02:/var/lib/rabbitmq -p 15673:15672 -p 5673:5672  -e RABBITMQ_DEFAULT_USER=admin -e RABBITMQ_DEFAULT_PASS=123456 -e RABBITMQ_ERLANG_COOKIE='HOUCUGJDZYTFZDSWXTHJ'   --link mq01:rabbit01 rabbitmq:management

docker run -d --hostname rabbit03 --name mq03 -v /data/mqdata03:/var/lib/rabbitmq -p 15674:15672 -p 5674:5672  -e RABBITMQ_DEFAULT_USER=admin -e RABBITMQ_DEFAULT_PASS=123456 -e RABBITMQ_ERLANG_COOKIE='HOUCUGJDZYTFZDSWXTHJ'   --link mq01:rabbit01  --link mq02:rabbit02  rabbitmq:management
	--name          		  :容器名字
	--hostname                :容器内部的名字
	--RABBITMQ_DEFAULT_USER   :登陆用户名
	--RABBITMQ_DEFAULT_PASS   :登陆密码
	--RABBITMQ_ERLANG_COOKIE  :集群cookie 要保持一致
	--link  				  :应为我们不确定容器各节点的ip地址是否会更变,所以使用--link
								来连接,格式为 容器名:容器内部的名字
  1. 进行访问 宿主机ip:15672 ,可以看到只有一个节点
    在这里插入图片描述

搭建集群

  1. 进入mq01节点容器 停止 start_app服务
docker exec -it mq01 bash   #进入容器
rabbitmqctl stop_app     #停止rabbit应用
rabbitmqctl reset      # 重置rabbit应用
rabbitmqctl start_app  #启动 rabbir 应用
  1. 进入mq02节点容器 加入节点mq01
docker exec -it mq02 bash

rabbitmqctl stop_app  #停止rabbit应用

rabbitmqctl reset    #重置rabbitmq

rabbitmqctl join_cluster --ram rabbit@rabbit01 ## -ram 设置内存节点,后面设置的是rabbit01这个节点,这个ID是--hostname的
rabbitmqctl start_app #启动rabbit应用

  1. 进入mq03节点容器 加入节点mq01
docker exec -it mq03 bash

rabbitmqctl stop_app  #停止rabbit应用

rabbitmqctl reset    #重置rabbitmq

rabbitmqctl join_cluster --ram rabbit@rabbit02 ## --ram 设置内存节点,后面设置的是rabbit01这个节点,这个ID是--hostname的

rabbitmqctl start_app #启动rabbit应用

  1. 实现镜像集群

docker exec -it mq01 bash   #进入mq01 容器
rabbitmqctl set_policy-p/ha-all"^"'{"ha-mode":"all"}'  #策略名称为ha-allqueue,策略模式为 all 即复制到所有节点,包含新增节点,策略正则表达式为 “^” 表示所有匹配所有队列名称。
  1. 刚问web页面 ,可以看到集群搭建成功

在这里插入图片描述

其他问题

挂载卷后 如果删除容器,请把卷也删掉。
另外cookie 要保持一致 可以不用提前指定,可以复制成三份
怎么查看各个节点的cookie呢?

docker logs 容器名称

在这里插入图片描述
例如这个容器, 他的cookie就是 “/var/lib/rabbitmq/.erlang.cookie”
另外复制之后,记得进入容器 给予400权限 ,即 容器内操作“chmod 600 /var/lib/rabbitmq/.erlang.cookie”

拓展

以上集群已经搭建完毕
如果需要高可用,可以使用 HAproxy / Nginx + keeplived 做负载和高可用
在这里插入图片描述

Logo

权威|前沿|技术|干货|国内首个API全生命周期开发者社区

更多推荐