17.集群

集群

1.RabbitMQ节点类型

1.1:磁盘节点

  1. 磁盘节点将元数据(队列名字属性,交换机的类型名字属性,绑定关系,vhost)放在磁盘中
  2. 磁盘节点一般用来备份数据
  3. 集群中至少需要一个磁盘节点用来持久化元数据,否则全部内存节点崩溃就无从同步元数据了
  4. 节点加入到集群中默认是磁盘节点(可以在加入集群的时候指定为内存节点)

1.2:内存节点

  1. 内存节点将元数据放在磁盘中
  2. 内存节点会将磁盘节点的地址存放在磁盘(不然重启后就没有办法同步数据了)。如果是持久化的消息,会同时存放在内存和磁盘
  3. 一般把应用连接到内存节点因为读写快

2.集群模式

2.1:普通集群

1.架构图

在这里插入图片描述

2.普通集群介绍
  1. 在普通集群模式中各个节点之间只会互相同步元数据
  2. 如果有客户端连接到了节点3想要通过节点3的交换机A找到队列1的内容的话,那么最终还是会请求到节点1上,在这个过程中节点3起到了路由的作用。
  3. 在普通集群模式中由于不会同步队列中的数据,如果保存队列数据的节点挂了会导致数据丢失,所以我们需要镜像队列模式(基于普通集群模式)。
3.普通集群的搭建方式
搭建步骤简介
  1. 安装三台RabbitMQ并保证彼此之间可以通信
  2. 保证.erlang.cookie文件的内容一样
  3. 使用命令构建集群
Docker搭建
  1. 使用docker-compose部署三个RabbitMQ
version: '3'
services:
  rabbitmq1:
    image: rabbitmq:3.7.17-management
    container_name: rabbitmq1
    hostname: rabbitmq1
    ports:
      - 15672:15672
      - 5672:5672
    volumes:
      - ./rabbitmq1/data1:/var/lib/rabbitmq
      - ./rabbitmq1/data2:/etc/rabbitmq
      - ./rabbitmq1/data3:/opt/rabbitmq
    environment:
      - RABBITMQ_DEFAULT_USER=root
      - RABBITMQ_DEFAULT_PASS=123456
      - RABBITMQ_ERLANG_COOKIE=SHANGUOYU
      - RABBITMQ_NODENAME=rabbitmq1
  rabbitmq2:
    image: rabbitmq:3.7.17-management
    container_name: rabbitmq2
    hostname: rabbitmq2
    ports:
      - 15673:15672
      - 5673:5672
    volumes:
      - ./rabbitmq2/data1:/var/lib/rabbitmq
      - ./rabbitmq2/data2:/etc/rabbitmq
      - ./rabbitmq2/data3:/opt/rabbitmq
    environment:
      - RABBITMQ_DEFAULT_USER=root
      - RABBITMQ_DEFAULT_PASS=123456
      - RABBITMQ_ERLANG_COOKIE=SHANGUOYU
      - RABBITMQ_NODENAME=rabbitmq2
  rabbitmq3:
    image: rabbitmq:3.7.17-management
    container_name: rabbitmq3
    hostname: rabbitmq3
    ports:
      - 15674:15672
      - 5674:5672
    volumes:
      - ./rabbitmq3/data1:/var/lib/rabbitmq
      - ./rabbitmq3/data2:/etc/rabbitmq
      - ./rabbitmq3/data3:/opt/rabbitmq
    environment:
      - RABBITMQ_DEFAULT_USER=root
      - RABBITMQ_DEFAULT_PASS=123456
      - RABBITMQ_ERLANG_COOKIE=SHANGUOYU
      - RABBITMQ_NODENAME=rabbitmq3
  1. 进入到rabbitmq2和rabbitmq3的容器中都执行以下命令
rabbitmqctl stop_app
rabbitmqctl reset
rabbitmqctl join_cluster --ram rabbitmq1@rabbitmq1
rabbitmqctl start_app
  1. 这样就构成了普通集群,rabbitmq1是磁盘节点,rabbitme2和rabbitmq3是内存节点。

2.2:镜像队列模式

1.架构图

在这里插入图片描述

2.镜像队列模式介绍
  1. 镜像队列模式下,消息内容会在镜像节点间同步,可用性更高。
  2. 也有一定的副作用,系统性能会降低,节点过多的情况下同步的代价比较大,所以一般是3个节点
  3. 基于普通集群模式
3.搭建方式
# 进入到普通集群中的任意一个节点执行此命令即可
rabbitmqctl set_policy ha-all "^" '{"ha-mode":"all"}'
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值