以下内容来自网络转载

步骤1. 安装docker

以centos7为例,https://docs.docker.com/engine/installation/linux/centos/

步骤2. 创建节点互联基础

#创建Docker私有网络
docker network create rabbitmqnet

步骤3. 创建节点

#使用Docker Networking,分别创建三个节点
docker run -d \
--name=rabbitmq1 \
-p 5672:5672 \
-p 15672:15672 \
-e RABBITMQ_NODENAME=rabbitmq1 \
-e RABBITMQ_ERLANG_COOKIE='YZSDHWMFSMKEMBDHSGGZ' \
-h rabbitmq1 \
--net=rabbitmqnet \
rabbitmq:3.5-management
docker run -d \ 
--name=rabbitmq2 \ 
-p 5673:5672 \ 
-p 15673:15672 \ 
-e RABBITMQ_NODENAME=rabbitmq2 \ 
-e RABBITMQ_ERLANG_COOKIE='YZSDHWMFSMKEMBDHSGGZ' \ 
-h rabbitmq2 \ 
--net=rabbitmqnet \ 
rabbitmq:3.5-management
docker run -d \ 
--name=rabbitmq3 \ 
-p 5674:5672 \ 
-p 15674:15672 \ 
-e RABBITMQ_NODENAME=rabbitmq3 \ 
-e RABBITMQ_ERLANG_COOKIE='YZSDHWMFSMKEMBDHSGGZ' \ 
-h rabbitmq3 \ 
--net=rabbitmqnet \ 
rabbitmq:3.5-management

步骤4. 加入集群

#磁盘节点
docker exec rabbitmq2 bash -c \
"rabbitmqctl stop_app && \
rabbitmqctl reset && \
rabbitmqctl join_cluster rabbitmq1@rabbitmq1 && \
rabbitmqctl start_app"
#内存节点
docker exec rabbitmq3 bash -c \
"rabbitmqctl stop_app && \
rabbitmqctl reset && \
rabbitmqctl join_cluster --ram rabbitmq1@rabbitmq1 && \
rabbitmqctl start_app"

步骤5. 设置镜像队列

设置所有队列为镜像队列,除了amq开头的交换器绑定队列。 生成环境不建议这种处理, 应该设置部分队列为镜像队列
docker exec rabbitmq1 rabbitmqctl set_policy HA '^(?!amq\.).*' '{"ha-mode": "all"}'

步骤6. 退出集群

docker exec rabbitmq3 bash -c \
"rabbitmqctl stop_app && \
rabbitmqctl reset && \
rabbitmqctl start_app"

集群重启

集群节点的关闭顺序与节点的启动顺序相反,即最后关闭的最先启动,并且最后关闭的节点必须是磁盘节点。请务必遵守按此步骤处理,否则可能造成集群无法启动,造成元数据,消息丢失的情况。
Docker容器不同于虚拟机或主机,容器内部署的应用无法启动,基本上这个容器就废了。Docker现在不允许做一些已创建容器的启动参数调整。

集群部署、运行准则

1. 保证集群中至少有一个在线,那怕这个节点是内存节点.
2. 如果关闭整个集群节点,必须按照顺序逐个关闭,并且最后一个关闭节点务必为磁盘节点。在启动时倒着顺序启动。(如关闭顺序r1,r2,r3.那么启动顺序为r3,r2,r1).
3. 集群中如果使用了虚拟技术(Docker,VM),虚拟节点不能全在同一台物理机中。(你不能保证物理机不会宕机,如果宕机基本上集群是启动不了的.你不知道关闭顺序,你就无法确定启动顺序,并且宕机关闭时间可能RabbitMQ节点都没有反应过来,无法做一些集群状态处理。) 

参考资料

  1. RabbitMQ Doc - Clustering Guide
  2. RabbitMQ Doc - Highly Available Queues
  3. RabbitMQ 实战 - 第五章 集群并处理失败

持续更新地址:http://www.thinkingnote.com/archives/18

RabbitMQ集群 Docker一键部署的更多相关文章

  1. RabbitMQ集群、镜像部署配置

    1   RABBITMQ简介及安装 RabbitMQ是一个开源的AMQP实现,服务器端用Erlang语言编写,支持多种客户端,如:Python.Ruby..NET.Java.JMS.C.PHP.Act ...

  2. Rabbitmq集群高可用部署详细

    序言 清风万里的季节,周末本该和亲人朋友一起消遣这烂漫的花花草草,或是懒洋洋的晒个太阳听听风声鸟鸣.无奈工作使然,理想使然,我回到啦公司,敲起啦键盘,撸起啦代码,程序狗的世界一片黯然,一片黯然,愿天下 ...

  3. FastDfs集群docker化部署

    初识分布式文件系统FastDFS- 1.分布式与集群的区别 区别:集群是个物理形态,分布式是个工作方式.只要是一堆机器,就可以叫集群,他们是不是一起协作着干活,这个谁也不知道:一个程序或系统,只要运行 ...

  4. Docker搭建RabbitMQ集群

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

  5. Docker一键部署Hadoop心得(一)

    最近一直在折腾使用docker一键部署全分布式hadoop集群,虽然一键部署的脚本写好了并且可以成功运行出各个节点,但在运行一个wordcount实例时出现了错误,错误如下: java.io.IOEx ...

  6. rabbitmq集群搭建方法简介(测试机linux centos)【转】

    本文将介绍四台机器搭建rabbitmq集群: rabbitmq IP和主机名(每台机器已安装RabbitMQ 3.5.6, Erlang 18.1) 192.168.87.73 localhost73 ...

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

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

  8. 基于Docker一键部署大规模Hadoop集群及设计思路

    一.背景: 随着互联网的发展.互联网用户的增加,互联网中的数据也急剧膨胀.每天产生的数据量数以万计,本地文件系统和单机CPU已无法满足存储和计算要求.Hadoop分布式文件系统(HDFS)是海量数据存 ...

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

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

随机推荐

  1. Oracle网络服务管理与配置

    一.Oracle网络服务概述 1.网络解决方案. (1)可连接性:在Oracle中,由Oracle net组件负责在客户端应用程序与数据服务器之间创建会话.维护会话连接和数据传输. (2)可管理性: ...

  2. 计算机网络概述---OSI参考模型

    应用层:所有能产生网络流量的程序,例如:qq等,txt记事本没有产生流量,所以不属于应用层: 表示层:在传输之前对应用层的数据进行加工或处理,例如:加密.压缩.传视频时二进制,传文档时ASCII码 等 ...

  3. Android BlueDroid(蓝牙协议栈)

    Android BlueDroid(一):BlueDroid概述 Android BlueDroid(二):BlueDroid蓝牙开启过程init Android BlueDroid(三):BlueD ...

  4. Cocos2d-x项目移植到WP8系列之二:开篇

    原文链接: http://www.cnblogs.com/zouzf/p/3970130.html 开发环境一笔带过吧,主板和CPU要支持虚拟化技术,要开启才行,装个64位win8.1系统,win8不 ...

  5. vRO 7 添加RestHost证书报错

    报错类似的错误: Cannot execute request: ; java.security.cert.CertificateException: Certificates does not co ...

  6. 如何在java代码中调用一个web项目jsp或者servlet

    有时候需要调用一个web项目的jsp或者servlet,但是执行内部的代码,并不是打开jsp,例如需要在一段java代码中清除一个web项目中的缓存,那么可以把清除缓存的代码放在该web项目的一个se ...

  7. Google Chrome 未响应。是否立即重新启动?

    不当的退出会造成 Google Chrome 无法启动.出现“Google Chrome 未响应.是否立即重新启动?”的错误.要解决这个问题:      1.同时按住Windows旗帜键 + R键,调 ...

  8. 介绍一下Hibernate的二级缓存

    介绍一下Hibernate的二级缓存 按照以下思路来回答:(1)首先说清楚什么是缓存,(2)再说有了hibernate的Session就是一级缓存,即有了一级缓存,为什么还要有二级缓存,(3)最后再说 ...

  9. 转:Android命令Monkey压力测试,详解

    停止Monkey命令: 1. ps命令  查找uiautomator的进程 打开cmd命令行窗口 输入: adb shell ps | grep monkey 返回来的第一个数字,即是monkey的进 ...

  10. ZC_知识点

    1. 在创建一个JNI动态库的工程时应该将工程的输出目标设置为动态连接库(Windows下为.dll,Unix-like系统下为.so,OS X下为.dylib) 2.类型对应关系 (Java与C/C ...