• 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 代码声明仲裁队列

    在这里插入图片描述

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

  • 相关阅读:
    【Java】全套云HIS(医院信息管理系统)源码包含EMR、LIS
    【数据结构与算法】八大排序(下)剩下四大排序+基数排序的补充.什么,这还拿不下你?
    Chrome速度惊人,不到30天修复40个漏洞
    接口和接口测试
    Spring源码深度解析:九、bean的获取② - createBeanInstance
    AI创作系统ChatGPT网站源码+支持最新GPT-Turbo模型+支持DALL-E3文生图/AI绘画源码
    CSS技巧专栏:一日一例 19 -纯CSS实现超酷的水晶按钮特效
    习题:循环结构(一)
    深圳跨境电商的崛起:从“野蛮生长”到“全球引领”
    Wampserver使用问题记录
  • 原文地址:https://blog.csdn.net/qq_46624276/article/details/126677785