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. 清晰易懂的RxJava入门实践

    导入 我相信大家肯定对ReactiveX 和 RxJava 都不陌生,因为现在只要是和技术相关的网站,博客都会随处见到介绍ReactiveX和RxJava的文章. ReactiveX Reactive ...

  2. 害...原来阿里面试Redis最常问的是它呀

    一提到Redis缓存,我们不得不了解的三个问题就是:缓存雪崩.缓存击穿和缓存穿透.这三个问题一旦发生,会导致大量的请求直接请求到数据库层.如果并发压力大,就会导致数据库崩溃.那p0级的故障是没跑了. ...

  3. Linux 开机关机在线求助与指令输入

    由于那本书版本稍稍有点早,我就跳过学习第二章第三章了(分别是主机规划和虚拟机安装)下图为在自己电脑上安装好的redhat7 4.1 我们来登入 其中第一行是Linux发行商和发行版本(欸,我的这个怎么 ...

  4. 【笔记】偏差方差权衡 Bias Variance Trade off

    偏差方差权衡 Bias Variance Trade off 什么叫偏差,什么叫方差 根据下图来说 偏差可以看作为左下角的图片,意思就是目标为红点,但是没有一个命中,所有的点都偏离了 方差可以看作为右 ...

  5. QT从入门到入土(八)——项目打包和发布

    引言 新手上路可谓是困难重重,你永远不知道下一个困难会在什么时候出现,在完成了运动控制卡封装发布过程中可谓是举步维艰.因此记录一下qt5+vs2019的打包发布方法. 打包一般分为两步: 将编译后的e ...

  6. CentOS8 安装MySQL5.7

    CentOS_8 安装MySQL5.7 1.在安装之前,如果你的系统曾经安装过Mariadb,请先卸载:yum remove mariadb*2.安装依赖 yum install -y epel-re ...

  7. 你知道那些JVM性能调优

    设定堆内存大小 -Xms :堆初始空间大小 -Xmx : 堆内存最大限制. 设置新生代大小.新生代不宜太小,否则会有大量对象涌入老年代 -XX:NewSize : 新生代大小 -XX:NewRatio ...

  8. vue路由history模式,nginx配置

    nginx配置内容 # For more information on configuration, see: # * Official English Documentation: http://n ...

  9. java String数组城市

    String[] citys = {"北京","天津","河北","山西","内蒙古"," ...

  10. C++泛型编程之类模板

    泛型语义 泛型(Generic Programming),即是指具有在多种数据类型上皆可操作的含意.泛型编程的代表作品 STL 是一种高效.泛型.可交互操作的软件组件. 泛型编程最初诞生于 C++中, ...