当前位置: 首页 > news >正文

Docker环境搭建RabbitMq集群详解

在docker环境下搭建rabbitmq集群

环境

Centos8
docker 26.0
rabbitmq docker pull 命令拉取镜像

创建docker-compose.yml配置

使用dockers-compose 来启动三个rabbitmq节点,确保没有其他节点运行中

version: '3'services:rabbit1:image: rabbitmq:3.12-management  # 镜像名和版本hostname: rabbit1    # 这个是容器主机名,相当于我们物理机主机名称 在分布式下会用container_name: rabbit1  # 这个是容器名 environment:RABBITMQ_ERLANG_COOKIE: 'rabbit-cluster-cookie'  # 集群用到的cookieRABBITMQ_NODENAME: rabbit@rabbit1  # 这是集群每个节点的名字ports:- 15672:15672  # 管理端web 端口- 5672:5672   # 服务端口networks:rabbitmq_net:  # 关联网桥aliases:  # ip 别名- rabbit1rabbit2:image: rabbitmq:3.12-managementhostname: rabbit2container_name: rabbit2environment:RABBITMQ_ERLANG_COOKIE: 'rabbit-cluster-cookie' #Erlang cookie 必须一致,才能加入集群RABBITMQ_NODENAME: rabbit@rabbit2networks:rabbitmq_net:aliases:- rabbit2depends_on:- rabbit1rabbit3:image: rabbitmq:3.12-managementhostname: rabbit3container_name: rabbit3environment:RABBITMQ_ERLANG_COOKIE: 'rabbit-cluster-cookie'RABBITMQ_NODENAME: rabbit@rabbit3networks:rabbitmq_net:aliases:- rabbit3depends_on:- rabbit1networks:rabbitmq_net:

启动顺序最好是 rabbit1 → rabbit2 → rabbit3

创建好文件,执行启动命令:

docker compose up -d  # 默认读取当前目录下docker-compose.yml 名字保持一致

手动组建集群

把节点1 当作主节点,另外两个节点加入集群中,实际上集群中三台机器不分主次,没有主次节点的概念,都是平等的

步骤

进入节点1

docker exec -it rabbit1 bashrabbitmqctl start_app  

进入节点2

docker exec -it rabbit2 bashrabbitmqctl stop_app
rabbitmqctl reset
rabbitmqctl join_cluster rabbit@rabbit1
rabbitmqctl start_app

进入节点3

docker exec -it rabbit3 bash
rabbitmqctl stop_app
rabbitmqctl reset
rabbitmqctl join_cluster rabbit@rabbit1
rabbitmqctl start_app

这里集群就创建完毕

检查集群状态

随机进入一台节点

docker exec -it rabbit3 bash
rabbitmqctl cluster_status

看看3个节点是不是正常运行

怎么指定不同的集群模式?

这里要详细解释下rabbitmq集群,和我们以前的集群模式不一样,比如redis,集群模式主从模式是节点层次来讲的,但是rabbitmq的集群模式是队列层次的,每种队列他的主从同步方式、复制方式、选举方式都是根据队列设置的集群类型来的,在声明队列的时候指定。比如rabbitmqadmin declare queue name=order_queue durable=true arguments='{"x-queue-type":"quorum"}' 这里指定quorum类型,这个队列会随机选一个节点作为主,其他两个从来同步,其他队列也是如此。

选举也是根据你当前队列的集群类型来决定是哪种选举方式,镜像队列使用Erlang内部算法选举,quorum采用raft模式选举

`

模式指定方式
默认普通模式什么都不加(x-queue-type 不设置)
Classic 镜像队列设置 policy(3.8 起废弃,3.12 删除)
Quorum 队列设置 x-queue-type=quorum 属性

集群运行验证

浏览器访问:http://localhost:15672

默认账号:guest / guest

查看集群状态、队列分布、消息同步情况

第一次用guest登录报错

在这里插入图片描述
guest只能用localhost登录,没权限远程登录,然后赋权,进入随便一个节点容器

# 登录其中一个容器(假设叫 rabbit1)
docker exec -it rabbit1 bash# 添加新用户
rabbitmqctl add_user admin 123456# 给用户赋予管理员角色
rabbitmqctl set_user_tags admin administrator# 给用户赋权
rabbitmqctl set_permissions -p / admin ".*" ".*" ".*"

创建队列测试

1、在rabbit1节点创建类型为quorum队列
新建队列指定参数

x-queue-type=quorum

可以看到1节点挂了两个队列
在这里插入图片描述
rabbit1中查看队列信息

rabbitmqctl list_queues name leader slave_pids state

在这里插入图片描述
可以看到两个队列 leader都是1节点

现在关闭节点1
在这里插入图片描述
进入节点2查看队列信息
在这里插入图片描述

leader已经变成节点2了 说明已经成功选举新节点

http://www.dtcms.com/a/292962.html

相关文章:

  • 【CAN】2.帧格式
  • ReasonFlux:基于思维模板与分层强化学习的高效推理新范式
  • Python接口自动化实战 ( 第一阶段) - 封装接口请求类和异常处理
  • Ubuntu 虚拟机配置 与Windows互传文件
  • react19相关问题和解答
  • 【技术新闻】OpenAI发布GPT-5,AI编程助手迎来革命性突破
  • React集成百度【BMap Draw】教程(001):实现距离测量和面积测量
  • dubbo源码分析之请求调用异步化原理
  • Pandas核心数据结构详解
  • 第3章通用的服务可用性治理手段——3.2 重试
  • Kotlin 作用域函数 let 的实现原理
  • 大疆视觉算法面试30问全景精解
  • 基于Java+MySQL实现(Web)文件共享管理系统(仿照百度文库)
  • Java自动拆箱机制
  • 云祺容灾备份系统阿里云对象存储备份与恢复实操手册
  • List<UserInfo> list = new ArrayList<>();为什么要这样创建数组?
  • 智能文本抽取在法院卷宗管理应用剖析
  • 力扣-139.单词拆分
  • Qt 网络编程如何采用Http进行通信
  • 碳化硅缺陷分类与原因
  • C++的lambda表达式原理
  • 【RK3576】【Android14】MIC开发调试
  • 【iOS】SideTable
  • [学习] 笛卡尔坐标系的任意移动与旋转详解
  • 交叉编译opencv(Cpp)于arm64架构开发板上
  • AI 音频产品开发模板及流程(二)
  • 使用python中的pymysql库,并且转化为数组元组数据
  • 【多任务YOLO】A-YOLOM
  • 字体识别实战:用Python打造智能字体侦探工具
  • for-of和for-in