环境准备

Centos 7.5虚拟机三台:

  • 192.168.102.128
  • 192.168.102.130
  • 192.168.102.131

以上虚拟机统一安装docker环境

三台机器分别配置如下所示的hosts文件,以供rabbitmq容器使用

$ vim /home/rabbitmq/hosts

//文件中写入以下内容:

192.168.102.128 rabbit1 rabbit1
192.168.102.130 rabbit2 rabbit2
192.168.102.131 rabbit3 rabbit3

搭建过程

拉取镜像

在三台机器上,分别management版本的rabbitmq镜像

$ docker pull rabbitmq:management

创建容器

在三台机器上分别创建rabbitmq容器

  • 在192.168.102.128上创建容器rabbit1
$ docker run --restart=unless-stopped -h rabbit1 -d -p 5672:5672 -p 15672:15672 -p 25672:25672 -p 4369:4369 \
--name myrabbit1 \
-v /home/rabbitmq:/var/lib/rabbitmq:z \
-v /home/rabbitmq/hosts:/etc/hosts \
-e RABBITMQ_DEFAULT_USER=admin \
-e RABBITMQ_DEFAULT_PASS=123456 \
-e RABBITMQ_ERLANG_COOKIE='xxx_2019' \
rabbitmq:management
  • 在192.168.102.130上创建容器rabbit2
$ docker run --restart=unless-stopped -h rabbit2 -d -p 5672:5672 -p 15672:15672 -p 25672:25672 -p 4369:4369 \
--name myrabbit2 \
-v /home/rabbitmq:/var/lib/rabbitmq:z \
-v /home/rabbitmq/hosts:/etc/hosts \
-e RABBITMQ_ERLANG_COOKIE='xxx_2019' \
rabbitmq:management
  • 在192.168.102.131上创建容器rabbit3
$ docker run --restart=unless-stopped -h rabbit3 -d -p 5672:5672 -p 15672:15672 -p 25672:25672 -p 4369:4369 \
--name myrabbit3 \
-v /home/rabbitmq:/var/lib/rabbitmq:z \
-v /home/rabbitmq/hosts:/etc/hosts \
-e RABBITMQ_ERLANG_COOKIE='xxx_2019' \
rabbitmq:management

参数说明:

  • -d 表示容器后台运行
  • -h rabbit1 容器的主机名是rabbit1,容器内部的hostname
  • -v /home/rabbitmq:/var/lib/rabbitmq:z 将宿主机目录/home/rabbitmq挂载到容器的/var/lib/rabbitmq目录。z是一个标记,在selinux环境下使用
  • -e RABBITMQ_ERLANG_COOKIE='rabbit_cluster' 设置rabbitmq的cookie,该值可以任意设置,只需要三个容器保持一致即可

绑定集群

  • 重置myrabbit1节点
$ docker exec -it myrabbit1 /bin/bash

$ rabbitmqctl stop_app && rabbitmqctl reset && rabbitmqctl start_app
  • 加入myrabbit2节点到集群中
$ docker exec -it myrabbit2 /bin/bash

$ rabbitmqctl stop_app && rabbitmqctl reset && rabbitmqctl join_cluster rabbit@rabbit1 && rabbitmqctl start_app
  • 加入myrabbit3节点到集群中
$ docker exec -it myrabbit3 /bin/bash

$ rabbitmqctl stop_app && rabbitmqctl reset && rabbitmqctl join_cluster rabbit@rabbit2 && rabbitmqctl start_app

查询集群状态

$ rabbitmqctl cluster_status

故障节点的处理

$ docker exec -it rabbit2 /bin/bash

$ rabbitmqctl stop_app

在一个正常的节点上移除一个异常的节点

$ docker exec -it rabbit1 /bin/bash

$ rabbitmqctl forget_cluster_node rabbit@rabbit2

集群模式

普通模式

基本特征

  • 交换机和队列的元数据存在于所有的节点上
  • 队列中的完整数据只存在于创建该队列的节点上
  • 其他节点只保存队列的元数据信息以及指向当前队列的owner node的指针

数据消费

进行数据消费时随机连接到一个节点,当队列不是当前节点创建的时候,需要有一个从创建队列的实例拉取队列数据的开销。此外由于需要固定从单实例获取数据,因此会出现单实例的瓶颈。

优点

可以由多个节点消费单个队列的数据,提高了吞吐量

缺点

  • 节点实例需要拉取数据,因此集群内部存在大量的数据传输
  • 可用性保障低,一旦创建队列的节点宕机,只有等到该节点恢复其他节点才能继续消费消息

示意图

镜像模式

基本特征

  • 创建的queue,不论是元数据还是完整数据都会在每一个节点上保存一份
  • 向queue中写消息时,都会自动同步到每一个节点上

优点

  • 保障了集群的高可用
  • 配置方便,只需要在后台配置相应的策略,就可以将指定数据同步到指定的节点或者全部节点

缺点

  • 性能开销较大,网络带宽压力和消耗很严重
  • 无法线性扩展,例如单个queue的数据量很大,每台机器都要存储同样大量的数据

示意图

策略配置

全部节点镜像策略创建

指定节点数镜像策略创建



参数说明:

  • Pattern 模式:""为全部;"all-"为所有all-开头
  • Priority 优先级:建议10,比较耗费资源
  • Definition 定义参数:
ha-mode=all 或 exactly;

ha-sync-mode=automatic;

ha-params=2(ha-mode=exactly);

总结

综上所述,对于可靠性要求比较高的场合,推荐使用镜像模式。

Docker安装rabbitMQ主从的更多相关文章

  1. Docker安装rabbitmq

    前面的文章中我们的docker已经安装好了,我的最终目的是用docker来安装rabbitmq,所以本文我记录一下我用docker安装rabbitmq的过程: 1.下载镜像(下载management的 ...

  2. Docker 安装rabbitMQ

    Docker 安装rabbitMQ docker pull rabbitmq:3.7.7-management 使用:docker images 查看所有镜像 4.根据下载的镜像创建和启动容器 doc ...

  3. CentOS中利用Docker安装RabbitMQ

    CentOS中利用Docker安装RabbitMQ 1.拉取镜像(带管理平台) #docker pull rabbitmq:3.7.7-management 2.启动容器: #docker run - ...

  4. Docker安装RabbitMQ,RabbitMQ Management使用

    原文:Docker安装RabbitMQ,RabbitMQ Management使用 版权声明:本文为博主原创文章,未经博主允许不得转载.需要转载请先评论或者邮箱联系我,谢谢! https://blog ...

  5. docker安装mysql主从

    docker安装mysql主从 启动主库: 1.docker run --name master -p 3306:3306 -e MYSQL_ROOT_PASSWORD=root -d mysql:5 ...

  6. docker安装redis主从以及哨兵

    docker安装redis主从以及哨兵 本文使用docker在四台机器上部署一主二从三哨兵的Redis主从结构. 服务器配置 192.168.102.128 主节点 centos7.5 192.168 ...

  7. docker安装RabbitMQ及安装延迟插件

    我这个安装攻略首先得保证服务器上安装过docker了 如果没安装docker请先去安装docker 1.首先说一下什么是MQ MQ(message queue)字面意思上来说消息队列,FIFO先入先出 ...

  8. Docker安装RabbitMQ与Kafka

    RabbitMq安装(dokcer) 下载镜像 docker pull rabbitmq 创建并启动容器 docker run -d --name rabbitmq -p 5672:5672 -p 1 ...

  9. 阿里云-docker安装rabbitmq及无法访问主页

    一.下载最新的rabbitmq docker pull rabbitmq 二.下载完以后启动容器 docker run -d -p 5672:5672 -p 15672:15672 --name my ...

随机推荐

  1. 利用stat指令查看文件创建时间

    -shroot@test-W330-C30:/# stat * 文件:'b' 大小:4096 块:8 IO 块:4096 目录设备:802h/2050d Inode:5636097 硬链接:2权限:( ...

  2. linux进阶之gitlab仓库搭建及免密使用

    一.Gitlab简介 GitLab 是一个用于仓库管理系统的开源项目,使用Git作为代码管理工具,并在此基础上搭建起来的web服务. 可通过Web界面进行访问公开的或者私人项目.它拥有与Github类 ...

  3. 9.1 ps:查看进程

    ps命令 用于列出执行ps命令的那个时刻的进程快照,就像用手机给进程照了一张照片.如果想要动态地显示进程的信息,就需要使用top命令,该命令类似于把手机切换成录像模式.因为ps命令的功能实在是太多了, ...

  4. AD中如何解决 同一局域网下证书冲突问题

    AD中如何解决  同一局域网下证书冲突问题 https://wenku.baidu.com/view/c20e1720482fb4daa58d4b52.html

  5. 使用Tomcat插件控制台中文乱码解决方案(IDEA)(Day_51)

    解决方案 1. File -> Settings... 2. 搜索 Runner (运行程序),在 'VM options:' 中添加:-Dfile.encoding=GB2312 注:GB23 ...

  6. ShardingSphere你还不会吗?(第一篇)

    ShardingSphere你还不会吗?(第一篇) 作者:星晴(当地小有名气,小到只有自己知道的杰伦粉) 一.需求 我们做项目的时候,数据量比较大,单表千万级别的,需要分库分表,于是在网上搜索这方面的 ...

  7. ZooKeeper学习笔记一:集群搭建

    作者:Grey 原文地址:ZooKeeper学习笔记一:集群搭建 说明 单机版的zk安装和运行参考:https://zookeeper.apache.org/doc/r3.6.3/zookeeperS ...

  8. 如何实现一个简易版的 Spring - 如何实现 AOP(下)

    前言 前面两篇 如何实现 AOP(上).如何实现 AOP(中) 做了一些 AOP 的核心基础知识简要介绍,本文进入到了实战环节了,去实现一个基于 XML 配置的简易版 AOP,虽然是简易版的但是麻雀虽 ...

  9. Vue的常用特性

    Vue的常用特性 一.表单基本操作 都是通过v-model 单选框 1. 两个单选框需要同时通过v-model 双向绑定 一个值 2. 每一个单选框必须要有value属性 且value值不能一样 3. ...

  10. noip模拟5[string·matrix·big·所驼门王的宝藏]

    怎么说呢这一场考得还算可以呢 拿了120pts,主要是最后一个题灵光开窍,想起来是tarjan,然后勉勉强强拿了40pts,本来是可以拿满分的,害 没事考完了就要反思 这场考试我心态超好,从第一个题开 ...