• RabbitMq(集群搭建)


    一、集群分类

    • 普通集群

    是一种分布式集群,将队列分散到各个节点上,提高整个集群的并发能力。

    • 镜像集群

    是一种主从集群,在普通集群的基础上,添加了主从备份,提高了数据可用性。(镜像集群虽然支持主从,但不是强一致,有可能产生丢失数据的风险。3.8后采用仲裁队列来代替镜像集群,使用Raft协议来保持数据一致性)

    1.1 普通集群

    集群里面单个节点只有交换机和自己里面声明的队列以及其他节点的队列的元信息,当一个消费者访问当前节点,这个节点不存在该队列,这个节点将会通过队列的元信息找到这个队列所在节点,并返回数据。

    在这里插入图片描述
    1.1.2 从之前启动的mq获取一个公共的cookie

    不同的mq节点是通过Erlang cookie进行通信的

    docker exec -it mq cat /var/lib/rabbitmq/.erlang.cookie
    
    • 1

    VZIWBRQFZDOKLTNKVQDE

    1.1.2 在/tmp目录新建一个配置文件 rabbitmq.conf

    内容如下

    loopback_users.guest = false
    listeners.tcp.default = 5672
    cluster_formation.peer_discovery_backend = rabbit_peer_discovery_classic_config
    cluster_formation.classic_config.nodes.1 = rabbit@mq1
    cluster_formation.classic_config.nodes.2 = rabbit@mq2
    cluster_formation.classic_config.nodes.3 = rabbit@mq3
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    1.1.3 在/tmp下创建一个文件.erlang.cookie记录cookie,写入cookie

    touch .erlang.cookie
    echo "VZIWBRQFZDOKLTNKVQDE" > .erlang.cookie
    chmod 600 .erlang.cookie #修改文件权限
    
    • 1
    • 2
    • 3

    1.1.4 创建mq三个目录并拷贝

    mkdir mq1 mq2 mq3
    
    cp rabbitmq.conf mq1
    cp rabbitmq.conf mq2
    cp rabbitmq.conf mq3
    cp .erlang.cookie mq1
    cp .erlang.cookie mq2
    cp .erlang.cookie mq3
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    1.1.4 启动集群
    分别是8871、8872、8873。控制台端口分别是8081、8082、8083

     #创建网络
    docker network create mq-net 
    #启动docker
    #第一台
    docker run -d --net mq-net \
    -v ${PWD}/mq1/rabbitmq.conf:/etc/rabbitmq/rabbitmq.conf \
    -v ${PWD}/.erlang.cookie:/var/lib/rabbitmq/.erlang.cookie \
    -e RABBITMQ_DEFAULT_USER=itcast \
    -e RABBITMQ_DEFAULT_PASS=123456 \
    --name mq1 \
    --hostname mq1 \
    -p 8071:5672 \
    -p 8081:15672 \
    rabbitmq:3.8-management
    
    #第二台
    docker run -d --net mq-net \
    -v ${PWD}/mq2/rabbitmq.conf:/etc/rabbitmq/rabbitmq.conf \
    -v ${PWD}/.erlang.cookie:/var/lib/rabbitmq/.erlang.cookie \
    -e RABBITMQ_DEFAULT_USER=itcast \
    -e RABBITMQ_DEFAULT_PASS=123456 \
    --name mq2 \
    --hostname mq2 \
    -p 8072:5672 \
    -p 8082:15672 \
    rabbitmq:3.8-management
    
    #第三台
    docker run -d --net mq-net \
    -v ${PWD}/mq3/rabbitmq.conf:/etc/rabbitmq/rabbitmq.conf \
    -v ${PWD}/.erlang.cookie:/var/lib/rabbitmq/.erlang.cookie \
    -e RABBITMQ_DEFAULT_USER=itcast \
    -e RABBITMQ_DEFAULT_PASS=123456 \
    --name mq3 \
    --hostname mq3 \
    -p 8073:5672 \
    -p 8083:15672 \
    rabbitmq:3.8-management
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39

    访问8083
    在这里插入图片描述
    添加队列发现三个节点都有该队列,如果声明队列的节点挂了,队列就不存在了。

    1.2 镜像集群

    • 本质上是主从模式。交换机、队列以及队列里面的消息会在mq的各个镜像节点中进行同步备份。
    • 创建队列的节点为该队列的主节点,备份到的其他节点为该队列的镜像节点。
    • 所有操作由主节点完成,然后同步给镜像节点。

    1.3 仲裁队列

    • 仲裁队列:仲裁队列是3.8版本以后才有的新功能,用来替代镜像队列,具备下列特征:·
    • 与镜像队列一样,都是主从模式,支持主从数据同步
      给.
    • 使用非常简单,没有复杂的配置
    • 主从同步基于Raft协议,强一致

    1.3.1 添加仲裁队列
    Type选中Quorum,Node为主节点,其他为镜像节点
    在这里插入图片描述

    1.3.2 代码声明仲裁队列

    在这里插入图片描述

    连接集群
    在这里插入图片描述

  • 相关阅读:
    浅谈矩阵 学习笔记
    python 装饰器
    Python升级之路( Lv10 ) 文件操作
    【浅学Java】端口号 / UDP
    <OpenCV> 边缘填充
    .Net Web项目创建比较不错的参考文章
    Android 消息机制
    docker Dockerfile
    微服务解码:揭示API的优势挑战与最佳实践
    Linux常用命令分享之收藏必备
  • 原文地址:https://blog.csdn.net/qq_46624276/article/details/126677785