docker版本:18.09.6 或以上
rabbitmq镜像版本:rabbitmq:3.9.5-management
一、拉镜像:
docker pull rabbitmq:3.9.5-management

二、查看镜像erlang cookie:

docker run --rm rabbitmq:3.9.5-management
ctrl - c 结束运行(自动删除容器,不用关心这个临时容器)
 
三、输出的日志中找到"cookie hash": sFDpr2/hTjqLDpdtOgrhpg==

四、创建docker swarm集群(单节点直接为管理节点,多节点创建docker集群):

docker swarm init --default-addr-pool 200.0.0.0/24 --advertise-addr 172.16.11.54

说明:

这是必要的步骤,先组件docker集群,不然无法使用后续步骤需要的“机要信息存储”和“服务集群”
--default-addr-pool为在该集群内的隧道ip,给容器用的,
--advertise-addr 172.16.11.54这是本机物理ip为组建docker集群用的,
执行后需要记录好反馈信息。
Swarm initialized: current node (azez8x2ae1u3l5uqwpexf3yi2) is now a manager.
To add a worker to this swarm, run the following command:
docker swarm join --token SWMTKN-1-4mo2do1p8oxgcou36dhzd1o8lbvr7ecxh0ecdfza9pt1a47tez-1yuyuqo9cm252nsdz7bov68ir 172.16.11.54:2377
To add a manager to this swarm, run 'docker swarm join-token manager' and follow the instructions.

五、利用docker机要信息存储erlang cookie:

printf "KYSleSjVyzf0Gej+eiPpCQ==" | docker secret create doc-rabbit-erlcookie -

六、创建一个用于给rabbitmq集群内部使用的网络:(这一步不是必要的,但推荐执行,便于管理这一层网络)

docker network create \
--driver overlay \
rabbitmq_network

七、在docker集群中可以直接创建rabbitmq服务集群:

docker service create --container-label doc-rabbit --replicas 3 \
--name doc-rabbitmq \
-p 5672:5672 -p 15672:15672 \
--network rabbitmq_network \
--secret source=doc-rabbit-erlcookie,target=/var/lib/rabbitmq/.erlang.cookie,uid=999,gid=999,mode=0600 \
rabbitmq:3.9.5-management

解释:

使用rabbitmq:3.9.5-management镜像创建集群
使用机要doc-rabbit-erlcookie(参考第4步)存储的信息,放在集群每个容器的/var/lib/rabbitmq/.erlang.cookie文件中,并且明确文件属组和权限,这里是rabbitmq对它有这样的要求
定义容器标签:--container-label doc-rabbit
定义容器副本个数(规模,我这里是3个扩展)--replicas 3 
定义容器主机名--hostname doc-rabbitmq
定义这个服务集群的名字--name doc-rabbitmq

八、由于直接使用docker,未找到资料证明可以自动构建集群的方式,k8s下可以参考rabbitmq官方文档,其中有关于在k8s下构建的两种方式,和相应k8s插件

开始构建集群
使用docker ps 查看容器名称,其命名规则是扩展容器逻辑名称.扩展节点id
使用docker service ps doc-rabbitmq 查看服务中的扩展容器逻辑名称和相应id
通过以上两个指令,找到相应3个扩展容器,记录容器的id,就是记录docker ps查看到的第一列的id号
通过docker service方式定义的容器组,每个容器默认的hostname就是容器id
对容器进行伪终端操作,
规划一下rabbitmq主节点、磁盘节点、内存节点,例如:rabbitmq1(容器名是abcdefg)是主节点同时是磁盘节点,rabbitmq2(容器名是hijklmn),rabbitmq3(容器名是opqrst)是内存节点
docker exec rabbitmq2 rabbitmqctl stop_app && rabbitmqctl join_cluster rabbit@abcdefg --ram && rabbitmqctl start_app
docker exec rabbitmq3 rabbitmqctl stop_app && rabbitmqctl join_cluster rabbit@abcdefg --ram && rabbitmqctl start_app

两个内存节点加入集群后,rabbitmq集群就搭建完成了,

这里不是docker的使用风格,不该由容器进行操作构建集群,所以这里需要仍需要后续探索。

9、验证

因为在docker服务构建过程中,使用了端口映射,可以从docker节点的物理机ip直接进行访问,这里底层是ipvs,所以任意docker swarm的集群物理ip都能访问
浏览器访问:http://172.16.11.54:15672,用户名密码都是默认的guest。
参考资料:
https://hub.docker.com/_/rabbitmq
https://docs.docker.com/engine/reference/commandline/service_create/#create-a-service-with-secrets
https://docs.docker.com/engine/swarm/secrets/

docker部署rabbitmq集群的更多相关文章

  1. RabbitMQ系列(五)使用Docker部署RabbitMQ集群

    概述 本文重点介绍的Docker的使用,以及如何部署RabbitMQ集群,最基础的Docker安装,本文不做过多的描述,读者可以自行度娘. Windows10上Docker的安装 因为本人用的是Win ...

  2. Docker环境下的前后端分离项目部署与运维(八)使用Docker部署RabbitMQ集群

    下载RabbitMQ镜像 镜像地址RabbitMQ Docker官方认证镜像地址:https://hub.docker.com/_/rabbitmq 安装命令安装之前,切记把Docker Hub设置为 ...

  3. Docker swarm结合Openresty部署rabbitmq集群

    Docker swarm结合Openresty部署rabbitmq集群 大家好,年底了,年味儿越来越浓了.2019年的寒冬被定义为未来10年中最好的一年,对于这一说法悲观的人和乐观的人的理解是不一样的 ...

  4. Docker搭建RabbitMQ集群

    Docker搭建RabbitMQ集群 Docker安装 见官网 RabbitMQ镜像下载及配置 见此博文 集群搭建 首先,我们需要启动运行RabbitMQ docker run -d --hostna ...

  5. k8s集群部署rabbitmq集群

    1.构建rabbitmq镜像 RabbitMQ提供了一个Autocluster插件,可以自动创建RabbitMQ集群.下面我们将基于RabbitMQ的官方docker镜像,添加这个autocluste ...

  6. Docker部署Hadoop集群

    Docker部署Hadoop集群 2016-09-27 杜亦舒 前几天写了文章"Hadoop 集群搭建"之后,一个朋友留言说希望介绍下如何使用Docker部署,这个建议很好,Doc ...

  7. Docker部署Elasticsearch集群

    http://blog.sina.com.cn/s/blog_8ea8e9d50102wwik.html Docker部署Elasticsearch集群 参考文档: https://hub.docke ...

  8. Docker 构建 RabbitMQ 集群

    刚开始,关于RabbitMQ集群的搭建,我找到了这篇文章:Docker 安装 RabbitMQ 集群 从而找到了第三方的RabbitMQ集群容器 rabbitmq-server 但是这个容器只有3.6 ...

  9. 基于Docker部署ETCD集群

    基于Docker部署ETCD集群 关于ETCD要不要使用TLS? 首先TLS的目的是为了鉴权为了防止别人任意的连接上你的etcd集群.其实意思就是说如果你要放到公网上的ETCD集群,并开放端口,我建议 ...

随机推荐

  1. [CISCN2019 华北赛区 Day2 Web1]Hack World(二分法写布尔注入脚本)

    记一道布尔注入的题,存在过滤字符. 从题目看应该是一道注入题.提示存在flag表flag列. 输入1和2的返回结果不一样,可能是布尔注入. 简单用万能密码尝试了一下.提示SQL Injection C ...

  2. 面试必知道的APP测试adb命令

    查看当前连接设备: adb devices 如果发现多个设备: adb -s 设备号 其他指令 查看日志: adb logcat 安装apk文件: adb install xxx.apk 此安装方式, ...

  3. 10 个超棒的 JavaScript 简写技巧

    今天我要分享的是10个超棒的JavaScript简写方法,可以加快开发速度,让你的开发工作事半功倍哦. 开始吧! 1. 合并数组 普通写法: 我们通常使用Array中的concat()方法合并两个数组 ...

  4. 一个遵循CleanArchitecture原则的Asp.net core轻量级开源项目

    这是一个基于最新的ASP.net core 5.0创建Razor Page应用程序解决方案模板.遵循Clean Architecture的原则,以最求简洁的代码风格和实现快速开发小型的web业务系统的 ...

  5. MySQL-13-日志管理

    常用日志参数 经常用到的有错误.快慢查询.二进制等日志 错误日志 1 作用 记录启动\关闭\日常运行过程中,状态信息,警告,错误,排查MySQL运行过程的故障 2 错误日志配置 默认就是开启的: /数 ...

  6. Java JVM【笔记】

    Java JVM[笔记] Java的平台无关性是如何实现的? Java源码首先被编译成字节码,再由不同的平台的JVM进行解析,Java语言在不同的平台上运行时不需要进行重新编译,Java虚拟机在执行字 ...

  7. luoguP1528&2329 栅栏&切蛋糕

    前言 蒟弱本来是在亿万年前做二分答案专题栅栏的,由于数据水所以过掉了,后来发现有一个数据加强版,也就是本题,于是爆T了...过了有个五六个月回来填坑了...现在开O2是在最优解第一个(自豪ing 题目 ...

  8. 【AI】TorchVision_DataLoad

    From: https://liudongdong1.github.io/ All datasets are subclasses of torch.utils.data.Dataset i.e, t ...

  9. 理解js运行时的一些概念

    帧:一个帧是一个连续的工作单元.当一个js函数被调用时,运行时环境就会在栈中创建一个帧.帧里保存了特殊的函数参数和局部变量.当函数返回时,帧就被从栈中推出.例如: function foo(b) { ...

  10. [C#]c#中数据的同步加锁机制 的几种方法

    一,锁定机制最简单的做法就是使用锁定关键字Lock.Lock关键字英文中就是锁的意思,顾名思义就是为操作加上一把锁.它的语法如下: lock(lockObj){//加锁的代码段,一般是操作共同资源的代 ...