• Docker RabbitMQ 镜像集群


    环境搭建:

    Docker启动3个RabbitMQ,第一个MQ为主节点,同时指定 RABBITMQ_ERLANG_COOKIE

    后面两个镜像为第一个MQ的节点,RABBITMQ_ERLANG_COOKIE` 保持一致,通过 --link 指定关联。

    链式关联。

    docker run -d --hostname mq1 --name mes_queue_1 -p 15672:15672 -p 5672:5672 -e RABBITMQ_ERLANG_COOKIE='rabbitcookie' rabbitmq:3.7.7-management 
    docker run -d --hostname mq2 --name mes_queue_2 -p 5673:5672 --link mes_queue_1:mq1 -e RABBITMQ_ERLANG_COOKIE='rabbitcookie' rabbitmq:3.7.7-management 
    docker run -d --hostname mq3 --name mes_queue_3 -p 5674:5672 --link mes_queue_1:mq1 --link mes_queue_2:mq2 -e RABBITMQ_ERLANG_COOKIE='rabbitcookie'  rabbitmq:3.7.7-management 

    成功启动3个MQ服务,端口从 5672 - 5674。

    进入第一个MQ容器:

    docker exec -it 4aee53ed687b /bin/bash

    执行以下命令:

    root@mq1:/# rabbitmqctl stop_app
    Stopping rabbit application on node rabbit@mq1 ...
    root@mq1:/# rabbitmqctl reset
    Resetting node rabbit@mq1 ...
    root@mq1:/# rabbitmqctl start_app
    Starting node rabbit@mq1 ...
     completed with 3 plugins.
    root@mq1:/#

    进入第二个MQ容器:

    PS C:Userschaojie> docker exec -it cc178e06ac2f /bin/bash
    root@mq2:/# rabbitmqctl stop_app
    Stopping rabbit application on node rabbit@mq2 ...
    root@mq2:/# rabbitmqctl reset
    Resetting node rabbit@mq2 ...
    root@mq2:/# rabbitmqctl join_cluster --ram rabbit@mq1
    Clustering node rabbit@mq2 with rabbit@mq1 <---- 加入集群
    root@mq2:/# rabbitmqctl start_app
    Starting node rabbit@mq2 ...
     completed with 3 plugins.
    root@mq2:/#

    进入第三个MQ容器:

    PS C:Userschaojie> docker exec -it 7cc63aeaf35d /bin/bash
    root@mq3:/# rabbitmqctl stop_app
    Stopping rabbit application on node rabbit@mq3 ...
    root@mq3:/# rabbitmqctl reset
    Resetting node rabbit@mq3 ...
    root@mq3:/# rabbitmqctl join_cluster --ram rabbit@mq1
    Clustering node rabbit@mq3 with rabbit@mq1
    root@mq3:/#

    同步消息队列:所以节点数据同步,队列同步。消息消费同步:任意节点执行

    root@mq3:/# rabbitmqctl set_policy ha-all "^" '{"ha-mode":"all"}'
    Setting policy "ha-all" for pattern "^" to "{"ha-mode":"all"}" with priority "0" for vhost "/" ...

    打开MQ管理界面:

    三个MQ已经关联了。

    数据已同步。

    其中第一个节点 info 中的 disc 表示磁盘节点,磁盘节点会将消息持久化到硬盘,另外的节点持久化到内存,当磁盘节点宕机,消息依然可以收发,,但是不能执行创建队列、交换机、绑定关系、用户,以及更改权限、添加或者删除集群节点的操作。

    内存节点宕机没事。

    测试:

    停止主节点。

    docker stop e55a0eff0d36

    其他节点不受影响。

    打开节点,数据已同步。

  • 相关阅读:
    Autofac框架详解 转载https://www.cnblogs.com/lenmom/p/9081658.html
    .NET Core开源组件:后台任务利器之Hangfire 转载 https://www.cnblogs.com/chenug/p/6655636.html
    ASP.NET Core项目目录结构介绍
    使用cookie来做身份认证 转载https://www.cnblogs.com/sheldon-lou/p/9545726.html
    Windows7 64位安装最新版本号MySQLserver
    [个人开发人员赚钱九]做一个日收入10元的APP!
    排序算法之高速排序
    IOS使用Charts
    JS检查浏览器类型和版本号
    【视频教程】捷微开发视频系统讲课-陆续更新
  • 原文地址:https://www.cnblogs.com/yangchaojie/p/13654992.html
Copyright © 2020-2023  润新知