RocketMQ系列之集群搭建

2023-10-30

前言

上节我们对RocketMQ(以下简称RMQ)有了一些基本的认识,大致知道了,什么是RMQ以及他能做什么,今天我们来讲讲如何搭建RMQ,与其说搭建RMQ不如说是搭建RMQ集群,为什么这么说呢?看完这篇文章自然就懂了。

 

RMQ几个重要角色?

NameServer:名称服务,这是RMQ的一个重点,他是一个几乎无状态的节点,可集群部署,节点之间无任何信息同步,这里可以充当ZK协调集群的作用;

Broker:Broker消息中转角色,主要负责消息的存储转发,Broker分为Master和Slave,一个Master对应多个Slave,但是一个Slave只能对应一个Master,Master和Slave之间通过指定相同的BrokerName和不同的BrokerId来确定主从关系,id为0的就是Master,非0就是Slave,Master也可以部署多个,每个Broker与NameServer集群中的所有节点建立长连接,定时注册Topic到NameServer上;

Topic:主题频道,用于生产者和消费者进行消息交流的媒介,生产者将消息发送到指定Topic上,消费者订阅该Topic(生产环境下一般都是消费者先订阅,生产者后生产),RMQ以推的形式主动将消息推给消费者消费;

 

RMQ的集群模式?

RMQ的集群模式主要有3种:单Master模式,多Master模式,多Master多Slave模式。

单Master模式:顾名思义,只有一台MQ服务器,即一台Broker,这种模式风险比较大,一旦broker宕机或者重启就会导致整个MQ服务不可用;

多Master模式:一个无Slave的MQ集群,集群中只有Master,这样即使其中一台Broker宕机,不会影响整个MQ服务,MQ服务还是可用的,但是宕机的这台Broker上的消息就无法被消费了,当这台Broker重启之后,会重新加入集群消费会被消费掉,所以这种模式可能会存在消息不实时消费的情况,但是消息是不会丢失的;

多Master多Slave模式:一个既有Master又有Slave的集群模式,这种模式能保证消息的实时消费,当Master宕机时,消息还可以从该Master对应的Slave上进行消费,所以这里存在一个问题,就是Master和Slave消息数据的同步问题,主要有2种同步方案可选,一种是同步双写(生产者将消息发送给MQ时,同时向Master和Slave发送,当2台broker同时返回成功才认为消息发送成功),另一种是异步复制(生产者将消息发送到Master上,然后Slave异步去复制Master的消息,这种会存在少量消息丢失)

 

RMQ集群搭建?

今天我们主要将多Master集群的搭建,单Master没什么好讲的,相当于启动一个Broker就可以了,我们看看多Master,我就以2个Master为例:

环境准备:2台Master

第一步:添加Host信息,主要为了NameServer而设置,为你的机器IP指定nameserver名称

指定完之后,重启网卡: service network restart

每台机器之间ping一下nameserver看看是否能连通:

ping rocketmq-nameserver1、ping rocketmq-nameserver2 ...

 

第二步:每台机器上都需要安装RMQ,上传压缩包,可以直接官网下载最新版(最新版最低要求JDK8)

下载链接:http://rocketmq.apache.org/release_notes/release-notes-4.2.0/

直接解压,安装;

 

第三步:创建存储路径

主要是下面这3个文件夹,这3个文件主要就是用来存储MQ上的消息的,相当于持久化存储文件,但是为什么会是三个文件夹呢?后面讲解MQ存储时我会详细讲解,这里暂且先不介绍

 

第四步:修改Broker配置,进入RMQ下的conf目录下我们会看到下面这几个文件

很明显2m-noslave就是我们需要的配置,进入这个目录下:默认就会有2个broker-a和b配置文件,如果你有N个Master就配置N个broker,我们可以在一台机器上把这些Broker先配置好,然后复制到其他机器上,每个机器启动对应一个broker就可以了

OK,那么我们就来配置broker吧:

# brokerClusterName这里一定要相同,这是集群的名字,配置一样,才能在一个集群中
brokerClusterName=rocketmq-cluster
# 这个是broker的名字,每个配置文件写自己的名字
brokerName=broker-a
# 这个是broker的ID,0代表Master,>0代表Slave
brokerId=0
# 这个就是我们之前配置的nameserver,这里你需要哪几个机器作为Master就配置几个机器的nameserver服务吧
namesrvAddr=rocketmq-nameserver1:9876;rocketmq-nameserver2:9876

配置文件我们其实就配置完了,还有就是启动文件的配置,在bin目录下有2个启动文件:

里面有这一段,根据自己机器的内存大小自己合理分配内存

JAVA_OPT="${JAVA_OPT} -server -Xms1g -Xmx1g -Xmn512m"

 

第五步:启动nameserver

分别启动多台机器上的nameserver,上面我们讲过nameserver充当zk的角色,自然而然就很好理解为什么先启动nameserver了

在bin目录下有个

启动命令:nohup sh mqnamesrv & 后台启动

可以通过查看nameserver启动日志

 

第六步:启动每台机器的Broker

在bin目录下,我们可以看到下面这个

启动命令:分别启动对应broker

#第一台机器
nohup sh mqbroker -c /usr/local/rocketmq-4.2.0/conf/2m-noslave/broker-b.properties &
# 第二台机器
nohup sh mqbroker -c /usr/local/rocketmq-4.2.0/conf/2m-noslave/broker-a.properties &

 

OK,到此为止,其实RMQ多Master集群就搭建起来了,接下来我们还需要做的就是RMQ的控制台

下载链接:https://github.com/apache/rocketmq-externals

下载下来之后,我们需要修改配置文件:配置你的两台Master机器IP+RMQ端口号,注意下面那个VIP配置要改为false

然后我们使用maven命令打个包:

mvn clean package -Dmaven.test.skip=true

这个控制台是用spring-boot开发的,所以我们只需要打个jar,扔到服务器上直接java -jar启动即可。

启动之后打开浏览器,输入访问路径:

我们的nameserver列表:

 

OK,RMQ的集群就介绍到这了

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

RocketMQ系列之集群搭建 的相关文章

  • Docker安装RockerMQ消息队列

    文章目录 1 安装namesrv2 安装broker3 安装console xff08 可选 xff09 1 安装namesrv namesrv就类似于消息队列的注册中心 span class token function docker s
  • UC/OS-III 消息队列

    消息队列 一 消息队列基本概念讲解1 消息队列基本概念2 消息池2 1 消息池概念2 2 消息池初始化2 3 消息队列的运作机制2 4 消息队列的阻塞机制2 5 消息队列的应用场景 二 消息队列创建步骤1 定义消息队列2 创建消息队列 三
  • FreeRTOS消息队列、信号量、事件组、任务通知之间的总结

    转载自 xff1a FreeRTOS消息队列 信号量 事件标志组 任务通知 丨匿名用户丨的博客 CSDN博客 功能及区别列表 消息队列 xff08 需要传递消息时使用 xff09 在任务与任务间 中断和任务间传递信息 xff0c 可以数据传
  • FreeRTOS消息队列

    FreeRTOS消息队列 队列又称消息队列 xff0c 是一种常用于任务间通信的数据结构 xff0c 队列可以在任务与任务间 中断和任务间传递信息 xff0c 实现了任务接收来自其他任务或中断的不固定长度的消息 xff0c 任务能够从队列里
  • 【UCOSIII操作系统】消息队列篇(1)消息队列

    UCOSIII操作系统 UCOSIII操作系统 消息队列篇 xff08 1 xff09 消息队列消息队列常用函数消息队列概念简介创建消息队列 gt OSQCreate 消息队列删除 gt OSQDel 消息队列发送 gt OSQPost 消
  • Windows下安装RocketMQ、配置可视化界面

    1 下载RocketMQ 官网下载地址 https rocketmq apache org dowloading releases 2 安装及启动 1 前提条件 已安装jdk和maven 注意jdk安装路径不能有空格 否则启动mq时会报类加
  • RabbitMQ高级特性-Confirm确认消息

    Confirm确认消息 消息的确认 是指生产者投递消息后 如果Broker收到消息 则会给我们产生一个应答 生产者进行接收应答 用来确定这条消息是否正常发送到Broker 这种方式也是消息的可靠性投递的核心保障 如何实现Confirm确认消
  • 了解消息中间件的基础知识

    为什么要使用消息中间件 解耦 消息中间件可以使不同的应用程序通过解耦的方式进行通信 减少系统间的依赖关系 提供异步通信 消息中间件可以实现异步消息传递 提高系统的响应性能 流量削峰 消息中间件可以起到流量削峰的作用 将短时间内的爆发式流量存
  • RocketMQ安装与启动

    分享知识 传递快乐 官网 https rocketmq apache org 1 准备环境 系统 Centos7 jdk 1 8 2 环境部署 解压 rocketmq 并进入 rocketmq 下的 bin 目录 调整启动内存 vim bi
  • 消息队列MQ-面试题

    目录 1 什么是消息队列 2 为什么要使用消息队列 1 解耦 2 异步处理 3 削峰 3 使用消息队列带来的一些问题 4 JMS两种消息模型 5 消息队列由哪些角色组成 6 常见消息中间件比较 7 如何保证消息队列是高可用的 RocketM
  • 06-分布式消息队列Kafka

    目录 一 简介 1 什么是kafka 1 1 概念 1 2 特性 2 应用场景 二 原理 1 基本概念 1 1 Broker 代理 1 2 Topic 主题 1 3 Partition 分区 1 4 Replication 副本 1 5 P
  • 使用RabbitMQ实现延时队列

    之前公司是一个类电商公司 会有用户下单后未支付取消订单的场景 解决方案是使用RabbitMQ的死信队列来实现一个延时队列 下单时 将订单丢进消息队列 设置过期时间 订单失效时间 然后到时候检查订单状态 如果未支付则取消订单 1 什么是死信
  • RabbitMQ:Queue的介绍和使用

    1 声明 当前内容用于本人学习和使用当前的Queue 当前内容为RabbitMQ中对Queue的介绍 当前内容来源 RabbitMQ中的Queue 2 Queue的官方介绍 首先先分析以下前面的Queue的使用 其实这个东西就是一个队列 一
  • OSAL

    OSAL为 Operating System Abstraction Layer 即操作系统抽象层 支持多任务运行 它并不是一个传统意义上的操作系统 但是实现了部分类似操作系统的功能 OSAL概念是由TI公司在ZIGBEE协议栈引入 他的意
  • 非阻塞的connect使用方式

    connect 函数的调用涉及到3次握手 默认connect函数为阻塞连接状态 通常connect 会阻塞到三次握手的完成和失败 而这个connect阻塞超时时间会依赖于系统 一般为75s到几分钟时间 一种方式可以通过该系统配置 proc
  • 7 SpringBoot整合RocketMQ发送单向消息

    发送单向消息是指producer向 broker 发送消息 执行 API 时直接返回 不等待broker 服务器的结果 这种方式主要用在不特别关心发送结果的场景 举例 日志发送 RocketMQTemplate给我们提供了sendOneWa
  • RocketMQ第五篇 RocketMQ API基本使用

    目录 生产者Product 消费者Consumer 前面已经学习了Rocket的基本知识 以及搭建MQ单机版和集群环境 下面开始进行实际开发 根据前面下载的RocketMQ源码 开展讲解RocketMQ 的基本使用 生产者Product 在
  • RocketMQ系列之架构浅谈

    RMQ的架构设计 下面我从GitHub上截取了一张RMQ的源码结构图 图中我框框出来的9大模块 基本就构成了整个RMQ的内部结构 上面9大模块的依赖层次主要如下 依赖越强的越处于底层 下面介绍下最上层的4个模块 这4个模块中工具命令行就不讲
  • 5分钟学会RocketMQ

    RocketMQ 简介 RocketMQ 是一个队列模型的消息中间件 具有高性能 高可用 高实时等特性 它并不支持JMS java消息服务 规范 但参考了JMS规范和kafak等的思想 Producer Consumer 队列都可以分布式
  • 高可用:如何实现消息队列的 HA?

    管理学上有一个木桶理论 一只水桶能装多少水取决于它最短的那块木板 这个理论推广到分布式系统的可用性上 就是系统整体的可用性取决于系统中最容易出现故障 或者性能最低的组件 系统中的各个组件都要进行高可用设计 防止单点故障 消息队列也不例外 本

随机推荐

  • 应用SVM预测澳大利亚降雨(含数据预处理与调参)

    0 声明 本文主要内容来自视频 2020机器学习全集 菜菜的sklearn完整版 价值4999元的最全机器学习sklearn全集 赶紧收藏 哔哩哔哩 bilibili 课件来自 https pan baidu com s 1Xl4o0PMA
  • 操作系统——文件管理

    0 关注博主有更多知识 操作系统入门知识合集 目录 9 1文件系统概念 思考题 9 2文件的物理结构 思考题 9 3文件存储和目录 9 1文件系统概念 文件的定义 文件是计算机信息存取的一种重要组织形式 文件由若干信息项有序构成 信息项可以
  • html2pdf 一键生成pdf实践

    背景 项目中需要将查询的图表及表格一键生成pdf 便于运营查看操作 调研 经调研 目前社区有合适的插件实现 html2pdf js 该插件的实现原理就是将html内容获取 解析 用cavans画出来 生成图片 然后由图片生成pdf文件 使用
  • 子组件向父组件传值

    子组件 div style margin top 20px font size 14px span 已经拥有账户 span span span div
  • Qt 屏蔽qDebug 输出

    在pro 文件中定义 QT NO DEBUG OUTPUT 这个宏 就可以屏蔽qDebug 的输出了 DEFINES QT NO DEBUG OUTPUT 那么为什么定义这个宏就可以屏蔽qDebug 的输出呢 看qlogging h 中的定
  • origin设置不同区域的颜色_半分钟教程:关于 Origin 中 Error Bar,看这篇教程就够了...

    本教程转载自 Originlab 帮助中心 前 言 几年前 小编写过一篇关于 Error Bar 的小教程 Error Bar其实一点也不Error 文中介绍了 Error Bar 的基本使用方法 但还有一些内容没能介绍完全 比如如何添加不
  • layui 监听多选框(checkbox) 点击事件

    html代码
  • 关于MIPI协议(一)——物理层D-PHY总结

    关于MIPI协议 一 物理层D PHY总结 通读了一下MIPI物理层D PHY的规格书 拿掉了规格书中一些冗余繁复的部分 留下了一些比较重要的内容 现总结如下 规格书中前部分章节大篇幅论述了D PHY的几种内部实现结构 D PHY采用的是非
  • [Heat]Heat中资源的扩展与加载

    Heat的核心是stack 从某方面讲 heat就是围绕stack的生命周期在玩 stack又是由各种各样的资源组成的 heat除了自定义的大量资源外 还允许用户自定义自己需要的资源 提供了很强的扩展性 下面将简单分析heat资源加载的流程
  • Oracle---排序、分组、表连接

    文章目录 一 排序查询 二 分组查询 三 多表关联查询 表连接 1 内连接 2 外连接 3 自然连接 一 排序查询 使用ORDER BY子句排序 ASC 升序 默认情况下 DESC 降序 ORDER BY 子句在SELECT语句的结尾 例1
  • Mybatis Generator 逆向生成器

    一 首先 安装eclipse插件 Help Eclipser Marketplace中查找 Mybatis Generator 1 3 5安装 二 新建project New other 查找如下 点击next 选择你要将文件生成到哪里的项
  • avalon视频学习笔记(五)

    一 插入移除处理 1 绑定属性ms if a 当ms if的值为真 true 时 就将元素输出到页面里面 div div 根据条件显示内容 div div div div 根据条件显示内容 div div b 如果当ms if 的值为假 f
  • Pytorch c++ 部署报错解决方案

    目录 1 Only the versions between 2017 and 2019 inclusive are supported 2 Cannot find cuDNN library Turning the option off
  • Linux firewall(防火墙)相关命令

    1 检验防火墙是否启动 firewall cmd state 2 检查8080 端口是否启动 firewall cmd permanent zone public list ports 3 开启 8080 端口 firewall cmd z
  • 离群点检测算法python代码

    很高兴为您回答问题 在python中 可以使用以下几种方法实现离群点检测算法 Z score方法 该方法通过计算数据的Z score来识别离群点 您可以使用scipy库中的zscore函数来计算Z score IQR方法 该方法通过计算数据
  • 黄金矿工-Python

    首先做这个项目之前得清楚需要的材料和这个项目的结构 我自己感觉这个游戏项目的难点就在于钩子摆动的问题 它需要利用到三角函数来实现出来 我利用了pygame transform rotate 方法来实现钩字摇摆的问题 用sin和cos的方法来
  • ​Learun FrameWork 强大工作流引擎,让OA更智能

    互联网的发展促使企业在信息化的道路上不断探索 而随着企业信息化进程的不断深入 OA协同办公的概念也逐步进入大众的视野 OA的选型关乎企业的生存发展 除了需要重视 OA技术 OA品牌 OA产品 OA服务 四大要素之外 更重要的其实是让OA变得
  • Llama2下载流程与报错:download.sh: [[: not found Downloading LICENSE and Acceptable Usage Policy..

    最近Meta的新模型LlamaV2可谓是火出圈了 第一时间我也尝试下载了权重 下载Llama2需要首先取得许可 不过没有门槛 秒批 https ai meta com resources models and libraries llama
  • C++11的 thread多线程

    一 C 11的多线程类thread C 11之前 C 库中没有提供和线程相关的类或者接口 因此在编写多线程程序时 Windows上需要调用CreateThread创建线程 Linux下需要调用clone或者pthread create来创建
  • RocketMQ系列之集群搭建

    前言 上节我们对RocketMQ 以下简称RMQ 有了一些基本的认识 大致知道了 什么是RMQ以及他能做什么 今天我们来讲讲如何搭建RMQ 与其说搭建RMQ不如说是搭建RMQ集群 为什么这么说呢 看完这篇文章自然就懂了 RMQ几个重要角色