RabbitaMQ 官方地址](https://hub.docker.com/_/rabbitmq/)
大部分问题都可以在官方文档找到,有问题查看下官方文档。
环境准备:
192.168.11.134 docker1
192.168.11.156 docker2
192.168.11.157 docker3
1、关闭防火墙
2、关闭selinux
#特别注解(看清楚宿主机是宿主机,和启动的容器半毛钱关系也没有),因为踩坑所以特别注解下,后面操作怕混淆关系,RabbitMQ加入集群关系巨大
192.168.11.134 宿主机IP
docker1 宿主机主机名
一、简单介绍搭建用到的几个东西:
1)主机名
-
官方有一段话是这样说的:
RabbitMQ节点使用短域名或完全合格(FQDN) 域名相互寻址
。因此,所有群集成员的主机名以及所有 可能使用命令行工具(例如rabbitmqctl)的机器都必须是可解析的。
-
容器启动可以使用 -h/ --hostname 指定启动的容器名字
2)Erlang Cookie(身份验证)
3)设置默认用户和密码
4)集群中的节点
二、创建hosts 以及数据存储挂载目录(三台机器)
1)创建数据挂载目录
mkdir /opt/rabbitmq
2)生成hosts 文件
vim /opt/rabbitmq/hosts
192.168.11.134 docker1
192.168.11.156 docker2
192.168.11.157 docker3
#特别注解(看清楚容器是容器,和宿主机半毛钱关系也没有)
192.168.11.134 容器IP
docker1 容器主机名
这里需要解释下,到时候我们挂载进去 -v /opt/rabbitmq/hosts:/etc/hosts 挂载去启动容器,这样就可以将我们定义hosts挂载到容器中。 可以会好奇这样挂载进去有什么作用呢? 容器的IP又不是宿主机的IP, 这样一说是不是已经知道,对的!我们就是用docker 网络模式中的 host 模式启动容器!host模式就是容器复制宿主机的网络,这样就达到了容器里面可以域名相互寻址,又不会影响到宿主机。(百度docker host模式
)
三、启动容器:
第一台机器:
docker run -itd --log-opt max-size=10m --log-opt max-file=4 --name rabbit1 --hostname docker1 -e RABBITMQ_DEFAULT_USER=root -e RABBITMQ_DEFAULT_PASS=root -e RABBITMQ_ERLANG_COOKIE='secret cookie here' -v /opt/rabbitmq/hosts:/etc/hosts -v /opt/rabbitmq:/var/lib/rabbitmq:z --net host rabbitmq:3.6.15-management
第二台机器:
docker run -itd --log-opt max-size=10m --log-opt max-file=4 --name rabbit2 --hostname docker2 -e RABBITMQ_DEFAULT_USER=root -e RABBITMQ_DEFAULT_PASS=root -e RABBITMQ_ERLANG_COOKIE='secret cookie here' -v /opt/rabbitmq/hosts:/etc/hosts -v /opt/rabbitmq:/var/lib/rabbitmq:z --net host rabbitmq:3.6.15-management
第三台机器:
docker run -itd --log-opt max-size=10m --log-opt max-file=4 --name rabbit3 --hostname docker3 -e RABBITMQ_DEFAULT_USER=root -e RABBITMQ_DEFAULT_PASS=root -e RABBITMQ_ERLANG_COOKIE='secret cookie here' -v /opt/rabbitmq/hosts:/etc/hosts -v /opt/rabbitmq:/var/lib/rabbitmq:z --net host rabbitmq:3.6.15-management
四、搭建 rabbitmq 的一般模式集群
1)第一台机器docker1:
- 进入容器 docker exec -it rabbit1 /bin/bash
- 查看rabbitmq集群状态(这步只是为为了方便取得rabbitmq的名称,便于加入集群中): rabbitmqctl cluster_status
2)第二台机器docker2:
- 进入容器: docker exec -it rabbit2 /bin/bash
- 查看集群: rabbitmqctl cluster_status
- 停止: rabbitmqctl stop_app
- 重置: rabbitmqctl reset
#注释:@ 后面的主机名字 加入集群—内存节点
: - rabbitmqctl join_cluster
--ram
rabbit@docker1 - 启动服务:rabbitmqctl start_app
#注解:
1、reset 命令会将当前节点内的集群元数据全部清空.同时告诉集群,这个节点要退出集群了
2、生产避免使用 --ram 内存节点, 如果需要最少保证有两个磁盘节点,一个disc节点
可能操作会失误照成节点加入集群失败:报错解决方案
3)第三台机器docker3:
- 进入容器 docker exec -it rabbit3 /bin/bash
- 查看集群(测试启动是否成功OK接着下一步):rabbitmqctl cluster_status
- 停止: rabbitmqctl stop_app
- 重置: rabbitmqctl reset
#注释:@ 后面的主机名字 加入集群—磁盘节点:
- rabbitmqctl join_cluster rabbit@docker1
- 启动服务:rabbitmqctl start_app
五、检查集群是否搭建成功
六、搭建高可用性(镜像)队列
官方地址:https://www.rabbitmq.com/ha.html
策列一:任何两个节点
策列二:所有节点
策列三:指定节点
其实我也不知道这个玩意咋匹配的。。。 具体大家还是去官方文档查看吧! 我就是个菜鸡的运维
七、测试添加配置ha. 添加到所有节点的策列:
rabbitmqctl set_policy ha-all "^ha\." '{"ha-mode":"all"}'
web界面查看
删除策列
八、测试HTTP API是否可以正常连接:
简单的搭建就这些了,更多的请到官方文档查看