docker搭建rabbitmq镜像集群

Rabbitmq普通集群模式,是将交换机、绑定、队列的元数据复制到集群里的任何一个节点,但队列内容只存在于特定的节点中,客户端通过连接集群中任意一个节点,即可以生产和消费集群中的任何队列内容(因为每个节点都有集群中所有队列的元数据信息,如果队列内容不在本节点,则本节点会从远程节点获取内容,然后提供给消费者消费)。

从该模式不难看出,普通集群可以让不同的繁忙队列从属于不同的节点,这样可以减轻单节点的压力,提升吞吐量,但是普通集群不能保证队列的高可用性,因为一旦队列所在节点宕机直接导致该队列无法使用,只能等待重启,所以要想在队列节点宕机或故障也能正常使用,就要复制队列内容到集群里的每个节点,需要创建镜像队列。

rabbitmq镜像集群依赖于普通集群,所以需要先搭建rabbitmq普通集群。

  • 环境

操作系统:centos7

docker版本:1.13.1

  • 搭建rabbitmq普通集群

docker拉取带management tag的最新版本,我这里最新版本是3.8.7

docker pull rabbitmq:management

启动三个同样cookie的rabbitmq实例(同样的cookie才能加入集群)

  1.  docker run -d --hostname rabbit1 --name myrabbit1 -p 15672:15672 -p 5672:5672 -e RABBITMQ_ERLANG_COOKIE='rabbitcookie' rabbitmq:management
  2.  docker run -d --hostname rabbit2 --name myrabbit2 -p 15673:15672 -p 5673:5672 --link myrabbit1:rabbit1 -e RABBITMQ_ERLANG_COOKIE='rabbitcookie' rabbitmq:management
  3.  docker run -d --hostname rabbit3 --name myrabbit3 -p 15674:15672 -p 5674:5672 --link myrabbit1:rabbit1 --link myrabbit2:rabbit2 -e RABBITMQ_ERLANG_COOKIE='rabbitcookie' rabbitmq:management

           这里注意使用--link将容器实例之前网络联系起来

           设置第二和第三个实例,使他们加入集群

  1.  docker exec -it myrabbit1 bash
  2.  rabbitmqctl stop_app
  3.  rabbitmqctl reset
  4.  rabbitmqctl start_app
  5.  exit 
  6.  
  7.  docker exec -it myrabbit2 bash
  8.  rabbitmqctl stop_app
  9.  rabbitmqctl reset
  10.  rabbitmqctl join_cluster rabbit@rabbit1
  11.  rabbitmqctl start_app
  12.  exit
  13.  
  14.   
  15.  docker exec -it myrabbit3 bash
  16.  rabbitmqctl stop_app
  17.  rabbitmqctl reset
  18.  rabbitmqctl join_cluster rabbit@rabbit1 
  19. rabbitmqctl start_app
  20.  exit

进入控制台web界面查看http://ip:15672, 可以发现普通集群搭建成功

  • 搭建rabbitmq镜像集群

搭建镜像集群是在web控制台完成的,主要操作就是在Admin界面添加一个Policy. 具体参数如下图所示:

参数含义:

pattern: 队列名字的通配

ha-mode:镜像队列提供了三种模式:

        all:全部的节点队列都做镜像;

        exactly:指定镜像队列的节点最高镜像数量

        nodes:只为指定具体节点配置镜像队列;

ha-sync-mode :节点之前的同步模式。有自动和手动两种,认是手动,这里设置为自动

设置完成并添加了这个策略后,新建的和已存在的队列认会支持此策略。

            至此,rabbitmq镜像集群已搭建成功。

相关文章

Docker是什么Docker是 Docker.Inc 公司开源的一个基于 LXC技...
本文为原创,原始地址为:http://www.cnblogs.com/fengzheng...
镜像操作列出镜像:$ sudo docker imagesREPOSITORY TAG IMA...
本文原创,原文地址为:http://www.cnblogs.com/fengzheng/p...
在 Docker 中,如果你修改了一个容器的内容并希望将这些更改...
在Docker中,--privileged 参数给予容器内的进程几乎相同的权...