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. 全面理解HTTP

    URL与URI 我们经常接触到的就是URL了,它就是我们访问web的一个字符串地址,那么URI是什么呢?他们是什么关系呢? URL:uniform resource location 统一资源定位符U ...

  2. Sublime Text设置快捷键让html文件在浏览器打开

    一.安装View In Browser插件 快捷键 Ctrl+Shift+P(菜单栏Tools->Command Paletter),输入 pcip选中Install Package并回车,输入 ...

  3. JS实现图片翻书效果示例代码

    js 图片翻书效果.  picture.html  <html xmlns="http://www.w3.org/1999/xhtml">  <head>  ...

  4. 微信小程序大全(下)(最新整理 建议收藏)

  5. python新手之2变量

    变量 变量是将储存的值保存在内存中.当声明一个变量的时候会在内存中开辟一个储存内容的位置. 基于变量的数据类型,解释器分配内存空间并决定储存的内容.因此我们可以通过变量分配不同的数据类型,可以在变量中 ...

  6. libgdx学习记录24——九宫格NinePatch

    NinePatch用于图片纹理拉伸显示.当图片拉伸时,4个角不会拉伸,而只有中间的部分会拉伸,适合做圆角矩形类的Button. 简单示例: package com.fxb.newtest; impor ...

  7. bokeyuan_python文章爬去入mongodb读取--LOWBIPROGRAMMER

    # -*- coding: utf-8 -*- import requests,os from lxml import etree from pymongo import * class Boke(o ...

  8. pair

    pair的类型: pair 是 一种模版类型.每个pair 可以存储两个值.这两种值无限制.也可以将自己写的struct的对象放进去.. 功能:pair将一对值组合成一个值,这一对值可以具有不同的数据 ...

  9. Git Hooks、GitLab CI持续集成以及使用Jenkins实现自动化任务

    Git Hooks.GitLab CI持续集成以及使用Jenkins实现自动化任务 前言 在一个共享项目(或者说多人协同开发的项目)的开发过程中,为有效确保团队成员编码风格的统一,确保部署方式的统一, ...

  10. Asp.net Mvc (Filter及其执行顺序)

    应用于Action的Filter 在Asp.netMvc中当你有以下及类似以下需求时你可以使用Filter功能判断登录与否或用户权限,决策输出缓存,防盗链,防蜘蛛,本地化设置,实现动态Actionfi ...