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. javascript 特殊字符 注意转义

  2. EL表达式和JSTL标签

    什么是 EL 表达式,EL 表达式的作用? EL 表达式的全称是:Expression Language.是表达式语言. EL 表达式的什么作用:EL 表达式主要是代替 jsp 页面中的表达式脚本在 ...

  3. 关于java新特性lambda表达式的理解即使用

    Lambda 表达式的使用 1.举例: (o1,o2) -> Integer.compare(o1,o2); 2.格式: -> : lambda操作符 或 箭头操作符 ->左边 : ...

  4. Skywalking-06:OAL基础

    OAL 基础知识 基本介绍 OAL(Observability Analysis Language) 是一门用来分析流式数据的语言. 因为 OAL 聚焦于度量 Service . Service In ...

  5. 【笔记】Bagging和Pasting以及oob(Out-of-Bag)

    Bagging和Pasting以及oob(Out-of-Bag) Bagging和Pasting 前面讲到soft voting classifier和hard voting classifier两个 ...

  6. 痞子衡嵌入式:i.MXRT中不支持DQS的FlexSPI引脚组连接Flash下载与启动注意事项

    大家好,我是痞子衡,是正经搞技术的痞子.今天痞子衡给大家分享的是i.MXRT中不支持DQS的FlexSPI引脚组连接Flash下载与启动注意事项. 最近痞子衡在支持一个印度客户,这个客户项目主芯片选择 ...

  7. 一个命令搞定 Web 国际化

    背景 随着出海的业务越来越多,web 应用面临越来越多的国际化的工作.如何高效,高质量的完成 Web 前端国际化工作,已经是摆在 web 前端同学的急需解决的问题. i18n-helper-cli 是 ...

  8. Xilinx约束学习笔记(一)—— 约束方法学

    <Xilinx约束学习笔记>为自己阅读 Xilinx 官方 UG903 文档后的学习笔记,大多数为翻译得来,方便大家学习. 1 约束方法学 1.1 组织约束文件 Xilinx 建议将时序约 ...

  9. 题解 数列 及exgcd总结

    传送门 自闭了--考场上exgcd打错然后对着屏幕自闭了一个小时不知道它为什么解得不对 开始恶补: 对于方程 \(a*x+b*y=c\) ,就等价于 \(a*x \equiv c\pmod{b}\) ...

  10. Mysql生成UUID的SQL语句

    大写的UUID: SELECT UPPER(UUID()); 小写的UUID: SELECT LOWER(UUID()); SELECT UUID(); 去掉横杠的UUID: SELECT REPLA ...