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

RabbitMQ 集群

在这里插入图片描述

文章目录

  • 前言
  • 单机多节点搭建集群
    • 创建RabbitMQ节点
    • 停止服务并重置
    • 将节点加入到集群中
    • 查看集群状态
    • 宕机
  • 结论

前言

RabbitMQ 作为消息中间件,可以与多个生产者和消费者进行绑定,但是如何只有一台 RabbitMQ 服务的话,那么这个 RabbitMQ 就需要处理很多的请求,如果该 RabbitMQ 节点挂掉了之后,那么所有与之相关的操作都无法进行了。我们可以升级 RabbitMQ 的硬件设施,提升 RabbitMQ 的处理能力,但是硬件的升级成本是很高的,比较好的解决方法就是搭建 RabbitMQ 集群。

单机多节点搭建集群

一般的集群是指在多个不同的主机上搭建,为什么我这里选择单机多节点搭建集群呢?说白了就是我没有那个经济实力,我手上没有那么多的云服务器,但是呢,知道了单机多节点的搭建,那么多机集群的搭建也就很简单了,步骤基本上是相同的。

我们先来看看主机上已经存在的 RabbitMQ 服务rabbimqctl status

在这里插入图片描述
可以看到我当前主机上已经存在一个 RabbitMQ 服务,他绑定的端口是 5672、15672和25672,这里绑定的端口的作用是啥就不具体介绍了,要是不知道的可以看看前面的文章。

创建RabbitMQ节点

然后我们搭建的单机多节点就是一主两从的情况,所以我们需要再启动两个 RabbitMQ 节点:

Node NameAMQP协议端口号Web管理页面端口
rabbit2567315673
rabbit3567415674
RABBITMQ_NODE_PORT=5673 RABBITMQ_SERVER_START_ARGS="-rabbitmq_management
listener [{port,15673}]" RABBITMQ_NODENAME=rabbit2 rabbitmq-server -detachedRABBITMQ_NODE_PORT=5674 RABBITMQ_SERVER_START_ARGS="-rabbitmq_management
listener [{port,15674}]" RABBITMQ_NODENAME=rabbit3 rabbitmq-server -detached

RABBITMQ_NODE_PORT 指定启动的 RabbitMQ 的端口,RABBITMQ_SERVER_START_ARGS 是 RabbitMQ 的配置选项,rabbitmq_management listener 指定管理页面绑定的端口,RABBITMQ_NODENAME 是节点的名称。

那么如何检查我们新的 RabbitMQ 启动成功了呢?我们可以打开云服务器的 15673和15674端口,然后看看管理页面是否能打开:

在这里插入图片描述
在这里插入图片描述
这时我们一台主机上就存在三个 RabbitMQ 节点了,接下来我们就将这三个几点加入到一个集群中。

停止服务并重置

在添加集群之前,我们需要停止 RabbitMQ 服务,并对其进行重置:

rabbitmqctl -n rabbit2 stop_app
rabbitmqctl -n rabbit2 resetrabbitmqctl -n rabbit3 stop_app
rabbitmqctl -n rabbit3 reset

在这里插入图片描述

将节点加入到集群中

我们将最先启动的 rabbit 节点作为主节点,然后 rabbit2 和 rabbit3 作为从节点:

rabbitmqctl -n rabbit2 join_cluster rabbit@iZ2ze5bzkbeuwwqowjzo27Zrabbitmqctl -n rabbit3 join_cluster rabbit@iZ2ze5bzkbeuwwqowjzo27Z

rabbit@iZ2ze5bzkbeuwwqowjzo27Z 是我们主节点的节点名称,可以通过 rabbitmqctl status 查看节点名称:

在这里插入图片描述
我们输入命令的时候可能会出现警告,但是我们现在呢就先不管:

在这里插入图片描述
将节点加入到集群之后呢,我们重新启动 rabbit2 和 rabbit3:

rabbitmqctl -n rabbit2 start_apprabbitmqctl -n rabbit3 start_app

查看集群状态

RabbitMQ 节点加入集群之后,我们通过 rabbitmqctl cluster_status -n rabbit 来查看集群的状态:

在这里插入图片描述
在这里插入图片描述
然后登录到管理页面也是可以查看集群状态的:

在这里插入图片描述

宕机

我们分别用 rabbit 和 rabbit2 节点来添加两个队列:

在这里插入图片描述
在这里插入图片描述
用一个节点添加的队列,然后观察其他节点可以发现在其他的节点中也存在这些创建的队列:

在这里插入图片描述
然后我们向队列中发送消息:

在这里插入图片描述
然后在其他的节点中也是可以看到这个发送的消息:

在这里插入图片描述
然后我们关闭主节点 rabbit rabbitmqctl -n rabbit stop_app

从其他节点的管理平台可以看到我们的 rabbit 节点是挂掉了。
在这里插入图片描述

并且,我们的 testQueue 是由 rabbit 节点创建的,当 rabbit 节点挂掉之后,testQueue 中的消息在其他节点中也不存在了,而不是由 rabbit 节点创建的队列则还存在:

在这里插入图片描述
也就是说,由哪个节点创建的队列,队列中的消息只会在这个节点中存在,那么如何解决这个问题呢?这就需要引入我们的 “仲裁队列” 了。

结论

感谢各位朋友们能够看到结尾,找不到工作?某直聘已读不回?不妨看看这里超快回复,助力每一位程序员早日找到理想的工作

http://www.lryc.cn/news/490811.html

相关文章:

  • 从零开始:使用 Spring Boot 开发图书管理系统
  • 速盾:海外服务器使用CDN加速有什么优势?
  • (二)手势识别——动作模型训练【代码+数据集+python环境(免安装)+GUI系统】
  • window系统下使用open-webui+ollama部署大模型
  • 一加ACE 3 Pro手机无法连接电脑传输文件问题
  • 因果机器学习EconML | 客户细分案例——基于机器学习的异质性处理效果估计
  • 找到最大“葫芦”组合
  • shell(9)完结
  • 【计算机网络】多路转接之select
  • 数据库-基础理论
  • Linux——1_系统的延迟任务及定时任务
  • C++ 矩阵旋转
  • Docker学习笔记整理
  • 计算机组成原理期末试题三(含答案)
  • django+boostrap实现注册
  • C++初阶——类和对象(下)
  • 趋势洞察|AI 能否带动裸金属 K8s 强势崛起?
  • idea初始化设置
  • LINUX系统编程之——环境变量
  • 健康老龄化:适合老年人的播客
  • 家庭智慧工程师:如何通过科技提升家居生活质量
  • Milvus概念
  • 为什么调用 setState 而不是直接改变 state
  • 【Python爬虫五十个小案例】爬取豆瓣电影Top250
  • cocos creator 3.8 物理碰撞器Collider+刚体RigidBody 8
  • Python爬取豆瓣电影全部分类数据并存入数据库
  • 算法模板1:排序+二分+高精度+前缀+差分
  • SpringBoot实现单文件上传
  • rust中解决DPI-1047: Cannot locate a 64-bit Oracle Client library问题
  • YOLOv11(Ultralytics)视频选定区域目标统计计数及跟踪