zoukankan      html  css  js  c++  java
  • Docker安装集群rabbitMQ

    环境准备

    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 RABBITMQERLANGCOOKIE='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);
    

    总结

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

  • 相关阅读:
    Strust2学习笔记
    EL与OGNL区别
    十进制与其他进制转换
    JSTL
    <jsp:include>和<%@include%>区别
    AngularJS 内置过滤器
    ubuntu下swift安装
    ubuntu下gerrit 安装部署
    java日期操作
    SpringMVC GET请求中文数据传递到Server端乱码
  • 原文地址:https://www.cnblogs.com/sanduzxcvbnm/p/13912980.html
Copyright © 2011-2022 走看看