docker 搭建RabbitMQ分布式集群

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是否可以正常连接:
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

简单的搭建就这些了,更多的请到官方文档查看

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值