zoukankan      html  css  js  c++  java
  • RabbitMQ:镜像集群搭建(基于Docker)

    集群形式

    RabbitMQ集群节点包括内存节点(RAM)、磁盘节点(Disk,消息持久化),集群中至少有一个Disk节点。

    普通模式

    对于普通模式,集群中各节点有相同的队列结构,但消息只会存在于集群中的一个节点。对于消费者来说,若消息进入A节点的Queue中,当从B节点拉取时,RabbitMQ会将消息从A中取出,并经过B发送给消费者。

    应用场景:该模式各适合于消息无需持久化的场合,如日志队列。当队列非持久化,且创建该队列的节点宕机,客户端才可以重连集群其他节点,并重新创建队列。若为持久化,只能等故障节点恢复。

    镜像模式

    与普通模式不同之处是消息实体会主动在镜像节点间同步,而不是在取数据时临时拉取,高可用;该模式下,mirror queue有一套选举算法,即1个master、n个slaver,生产者、消费者的请求都会转至master。

    应用场景:可靠性要求较高场合,如下单、库存队列。

    缺点:若镜像队列过多,且消息体量大,集群内部网络带宽将会被此种同步通讯所消耗。

    (1)镜像集群也是基于普通集群,即只有先搭建普通集群,然后才能设置镜像队列。

    2)若消费过程中,master挂掉,则选举新master,若未来得及确认,则可能会重复消费

    搭建

    创建三个节点

    mkdir -p /mydata/rabbitmq/rabbitmq01
    mkdir -p /mydata/rabbitmq/rabbitmq02
    mkdir -p /mydata/rabbitmq/rabbitmq03
    docker run -d --hostname rabbitmq01  --name rabbitmq01 -v /mydata/rabbitmq/rabbitmq01:/var/lib/rabbitmq  -p 15673:15672 -p 5673:5672 -e RABBITMQ_ERLANG_COOKIE='wj' rabbitmq:management
    docker run -d --hostname rabbitmq02  --name rabbitmq02 -v /mydata/rabbitmq/rabbitmq02:/var/lib/rabbitmq  -p 15674:15672 -p 5674:5672 -e RABBITMQ_ERLANG_COOKIE='wj' --link  rabbitmq01:rabbitmq01 rabbitmq:management
    docker run -d --hostname rabbitmq03  --name rabbitmq03 -v /mydata/rabbitmq/rabbitmq03:/var/lib/rabbitmq  -p 15675:15672 -p 5675:5672 -e RABBITMQ_ERLANG_COOKIE='wj' --link  rabbitmq01:rabbitmq01 --link  rabbitmq02:rabbitmq02 rabbitmq:management
    

    RABBITMQ_ERLANG_COOKIE:节点认证作用,部署集群时,需要同步该值。

    节点加入集群

    docker exec -it rabbitmq01 /bin/bash
    
    rabbitmqctl stop_app
    rabbitmqctl reset
    rabbitmqctl start_app
    exit
    

    image-20210401135109417

    rabbitmq02加入集群

    docker exec -it rabbitmq02 /bin/bash
    
    rabbitmqctl stop_app
    rabbitmqctl reset
    rabbitmqctl join_cluster --ram rabbit@rabbitmq01
    rabbitmqctl start_app
    exit
    

    rabbitmq03加入集群

    docker exec -it rabbitmq03 /bin/bash
    
    rabbitmqctl stop_app
    rabbitmqctl reset
    rabbitmqctl join_cluster --ram rabbit@rabbitmq01
    rabbitmqctl start_app
    exit
    

    访问:http://192.168.1.48:15673/#/

    image-20210401135430202

    实现镜像集群

    docker exec -it rabbitmq01 /bin/bash
    #设置策略
    rabbitmqctl set_policy -p / ha "^" '{"ha-mode":"all","ha-sync-mode":"automatic"}'
    #查询策略
    rabbitmqctl  list_policies -p /
    

    image-20210401135940526

    验证镜像集群

    添加一个hello队列

    image-20210401140123469

    添加完成后,发现其他mq实例也有这个队列

    image-20210401140220268

    我们发布一个持久化消息:

    image-20210401140258709

    在其他mq实例中可以消费该消息

    image-20210401140412225

  • 相关阅读:
    eclipse中使用git
    获取系统的联系人信息
    Android中调用百度地图
    shell脚本等的操作
    shell与变量的声明的操作
    文件的基本操作命令
    Android实战_来电拦截专家
    linux c学习笔记----进程创建(fork,wait,waitpid)
    2.2.1 MySQL基本功能与参数文件管理
    2.3.6 Federate 远程访问数据库
  • 原文地址:https://www.cnblogs.com/wwjj4811/p/14606087.html
Copyright © 2011-2022 走看看