前言
了解下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
版本的
搭建基础环境
- 创建数据目录
mkdir -p /data/mqdata{01…03}
2.拉取并运行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 来连接,格式为 容器名:容器内部的名字
3.进行访问 宿主机ip:15672
,可以看到只有一个节点
搭建集群
1.进入mq01节点容器 停止 start_app服务
docker exec -it mq01 bash #进入容器
rabbitmqctl stop_app #停止rabbit应用
rabbitmqctl reset # 重置rabbit应用
rabbitmqctl start_app #启动 rabbir 应用
2.进入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应用
3.进入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应用
4.实现镜像集群
docker exec -it mq01 bash #进入mq01 容器
rabbitmqctl set_policy-p/ha-all"^"’{“ha-mode”:“all”}’ #策略名称为ha-allqueue,策略模式为 all 即复制到所有节点,包含新增节点,策略正则表达式为 “^” 表示所有匹配所有队列名称。
5.刚问web页面 ,可以看到集群搭建成功
其他问题
挂载卷后 如果删除容器,请把卷也删掉。
另外cookie 要保持一致 可以不用提前指定,可以复制成三份
怎么查看各个节点的cookie呢?
docker logs 容器名称
例如这个容器, 他的cookie就是 “/var/lib/rabbitmq/.erlang.cookie”
。
另外复制之后,记得进入容器 给予400权限 ,即 容器内操作“chmod 600 /var/lib/rabbitmq/.erlang.cookie”
拓展
以上集群已经搭建完毕
如果需要高可用,可以使用 HAproxy / Nginx + keeplived 做负载和高可用