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/rabbitmq2)生成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_status2)第二台机器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是否可以正常连接:
简单的搭建就这些了,更多的请到官方文档查看