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集群,并开放端口,我建议 ...

  10. Docker部署zookeeper集群和kafka集群,实现互联

    本文介绍在单机上通过docker部署zookeeper集群和kafka集群的可操作方案. 0.准备工作 创建zk目录,在该目录下创建生成zookeeper集群和kafka集群的yml文件,以及用于在该 ...

随机推荐

  1. Hadoop学习笔记——搭建

    一搭建环境列表 操作系统:centos6.5 64位 JDK环境:jdk1.7.0_71 hadoop版本:社区版本2.7.2,hadoop-2.7.2-src.tar.gz 主机名 ip 角色 用户 ...

  2. .Net程序员Python之道---Python基础

    最近对动态语言比较好奇.所以选择了学习Python这门语言.话不多说开始学习笔记. 一. Python 基础: 1. print对Python进行数据输出, #号后面是队友的输出结果, 通过encod ...

  3. idea中如何配置tomcat

    这几天想通过JDBC驱动使用MySQL数据库,但老是运行不成功,但是写成java就没有问题,于是想到是不是服务器没配置好 idea中配置tomcat的步骤如下 1:File->Settings. ...

  4. Ajax异步刷新局部页面的小李子

    看到下面那幅图没有,我们要的是当点击确定以后,根据条形码搜索出商品信息,并且异步刷新右边页面:

  5. 了解cron以及使用cron定时备份MySQL

    cron是一个linux下的定时执行工具,可以在无需人工干预的情况下运行作业.由于Cron 是Linux的内置服务,但它不自动起来,可以用以下的方法启动.关闭这个服务: /sbin/service c ...

  6. aspnet core 2.0 发布之后没有 views文件夹

    在项目文件里面 增加这个节点: MvcRazorCompileOnPublish 设置为false 是会发布views <PropertyGroup> <PackageTargetF ...

  7. Django之路由控制配置

    路由控制配置 简单的路由配置 Django即支持1.x版本的路由配置也支持2.x的路由配置 1.x版本的路由配置是使用re进行路由配置(re_path) 2.x版本的路由配置使用(path)进行路由配 ...

  8. USB with NXP Microcontrollers

    USB with NXP Microcontrollers NXP Advantages NXP's microcontroller portfolio features the latest USB ...

  9. sass的嵌套

    sass的嵌套包括两种: 1.选择器的嵌套.(最常用到) 指的是在一个选择器中嵌套另一个选择器来实现继承,从而增强了sass文件的结构性和可读性. 在选择器嵌套中,可以使用&表示父元素选择器 ...

  10. 关于分析web.xml的一篇博客,写的很详细

    http://blog.csdn.net/believejava/article/details/43229361