千家信息网

RocketMQ 集群部署

发表于:2025-12-02 作者:千家信息网编辑
千家信息网最后更新 2025年12月02日,RocketMQ介绍概述Apache RocketMQ是一个具有低延迟、高性能和高可靠性、万亿级容量,同时具备灵活的、可伸缩性强的分布式消息流处理平台,它由四个部分组成:name servers, b
千家信息网最后更新 2025年12月02日RocketMQ 集群部署

RocketMQ介绍

概述

Apache RocketMQ是一个具有低延迟、高性能和高可靠性、万亿级容量,同时具备灵活的、可伸缩性强的分布式消息流处理平台,它由四个部分组成:name servers, brokers, producers 和 consumers。它们所有部分都可以水平扩展避免单点故障,就像上图所示。

名称服集群务 NameServer cluster
NameServer服务提供了轻量级的服务发现和路由。每个NameServer服务记录完整的路由信息,提供一致的读写服务,支持快速存储扩展

代理服务集群 Broker Cluster
Broker通过提供轻量级主题和队列机制来处理消息存储。它们支持Push和Pull模型,包含容错机制(2个副本或3个副本),提供了极强的峰值处理里能力和按照时间顺序存储数以百万记的消息存储能力,此外,代理提供了灾难恢复、丰富的度量统计和警报机制,这些都是在传统的消息传递系统中缺乏的

生产者集群 Producer Cluster
produce支持分布式部署,分布式的produce通过broker集群提供的各种负载均衡策略将消息发送到broker集群中。发送过程支持快速失败是低延迟的。

消费者集群 Consumer Cluster
消费者也支持在推送或者拉取模式下分布式部署,它还支持集群消费和消息广播。提供实时的消息订阅机制,能够满足大多数消费者的需求。RocketMQ的网站为感兴趣的用户提供了一个简单的快速入门指南。

名称服务NameServer

NameServer是一个功能齐全的服务器,主要包括两个功能:
⊙broker 管理,nameserver 接受来自broker集群的注册信息并提供心跳来检测他们是否可用。
⊙路由管理,每一个nameserver都持有关于broker集群和队列的全部路由信息,用来向客户端提供查询。

我们知道 ,rocketMQ客户端(生产者/消费者)会从nameserver查询队列的路由信息,客户端是如何知道nameserver的地址的呢?

有四种方式能够让客户端获取到nameserver的地址:
⊙通过程序,像这样producer.setNamesrvAddr("ip:port")
⊙java 配置项,这么用rocketmq.namesrv.addr
⊙环境变量 NAMESRV_ADDR
⊙HTTP 端点
更多关于nameserver地址发现的详细信息请参考这里

代理服务 broker server

broker server负责消息的存储传递,消息查询,保证高可用等等。

像下图所示,broker server有一些非常重要的子模块:


⊙remoting(远程) 模块,broker的入口,处理从客户端发起的请求。
⊙client manager(客户端管理),管理各个客户端(生产者/消费者)还有维护消费者主题订阅。
⊙store(存储服务),提供简单的api来在磁盘保持或者查询消息。
⊙HA 高可用服务,提供主从broker的数据同步。
⊙index(索引服务),为消息建立索引提供消息快速查询。

RocketMQ与其他消息队列服务的区别

如下图,列出了 ActiveMQ、Kafka、RocketMQ 三者的区别,详见官方文档

服务器规划

如下表,准备两台服务器,互为主备:

RocketMQ环境准备

1、设置主机hosts

echo "192.168.2.177 rocketmq-nameserver1" >> /etc/hostsecho "192.168.2.177 rocketmq-master1" >> /etc/hostsecho "192.168.2.178 rocketmq-nameserver2" >> /etc/hostsecho "192.168.2.178 rocketmq-master2" >> /etc/hosts

2、准备 JAVA 环境

下载 JAVA 安装包:https://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html

解压下载的 jdk 包到 /usr/local 目录,并配置环境变量

[root@rocketmq-nameserver1 ~]#  vim .bash_profileexport JAVA_HOME=/usr/local/jdk1.8.0_201export PATH=$PATH:$JAVA_HOME/bin

3、准备 Maven 环境

下载 Maven 安装包:http://maven.apache.org/download.cgi

下载 bin 包,则直接解压到 /use/local 目录,再修改环境变量

[root@rocketmq-nameserver1 ~]#  vim .bash_profileexport JAVA_HOME=/usr/local/jdk1.8.0_201export M2_HOME=/usr/local/maven3export PATH=$PATH:$JAVA_HOME/bin:$M2_HOME/bin

RocketMQ部署

下载 RocketMQ 安装包:http://rocketmq.apache.org/dowloading/releases/

解压所下载的 RocketMQ 安装包,进行编译

[root@rocketmq-nameserver1 rocketmq-all-4.4.0]# mvn -Prelease-all -DskipTests clean install -U

此过程受限于网络状况,有可能非常缓慢,请耐心等待。。。。。。

编译完成之后,进入 distribution/target/ 目录,将该目录下的 apache-rocketmq 目录整个复制到 /usr/local 目录下

[root@rocketmq-nameserver1 rocketmq-all-4.4.0]# cd distribution/target/[root@rocketmq-nameserver1 target]# cp -raf apache-rocketmq /usr/local/rocketmq

进入 /usr/local/rocketmq/conf 目录,修改日志配置文件,将配置文件中的相关日志路径修改为自己设置的路径

[root@rocketmq-nameserver1 conf]# vim logback_broker.xml[root@rocketmq-nameserver1 conf]# vim logback_namesrv.xml[root@rocketmq-nameserver1 conf]# vim logback_tools.xml

再进入 2m-2s-async 目录(注意:这里一共三个目录,2m-2s-async为多主多异步复制预配置文件目录,2m-2s-sync为多主多从同步双写预配置文件目录,2m-noslave为双主预配置文件目录),修改 broker 配置文件

[root@rocketmq-nameserver1 2m-2s-async]# vim broker-a.propertiesbrokerClusterName=rocketmq-clusterbrokerName=broker-abrokerId=0brokerIP1=192.168.2.177brokerIP2=192.168.2.177listenPort=10911storePathRootDir=/wdata/rocketmq/storestorePathCommitLog=/wdata/rocketmq/store/commitlognamesrvAddr=rocketmq-nameserver1:9876;rocketmq-nameserver2:9876deleteWhen=04fileReservedTime=48brokerRole=ASYNC_MASTERflushDiskType=ASYNC_FLUSH

保存退出

[root@rocketmq-nameserver1 2m-2s-async]# vim broker-a-s.propertiesbrokerClusterName=rocketmq-clusterbrokerName=broker-abrokerId=1brokerIP1=192.168.2.178brokerIP2=192.168.2.178listenPort=10920storePathRootDir=/wdata/rocketmq/store-a-sstorePathCommitLog=/wdata/rocketmq/store-a-s/commitlognamesrvAddr=rocketmq-nameserver1:9876;rocketmq-nameserver2:9876deleteWhen=04fileReservedTime=48brokerRole=SLAVEflushDiskType=ASYNC_FLUSH

保存退出

[root@rocketmq-nameserver1 2m-2s-async]# vim broker-b.propertiesbrokerClusterName=rocketmq-clusterbrokerName=broker-bbrokerId=0brokerIP1=192.168.2.178brokerIP2=192.168.2.178listenPort=10911storePathRootDir=/wdata/rocketmq/storestorePathCommitLog=/wdata/rocketmq/store/commitlognamesrvAddr=rocketmq-nameserver1:9876;rocketmq-nameserver2:9876deleteWhen=04fileReservedTime=48brokerRole=ASYNC_MASTERflushDiskType=ASYNC_FLUSH

保存退出

[root@rocketmq-nameserver1 2m-2s-async]# vim broker-b-s.propertiesbrokerClusterName=rocketmq-clusterbrokerName=broker-bbrokerId=1brokerIP1=192.168.2.177brokerIP2=192.168.2.177listenPort=10920storePathRootDir=/wdata/rocketmq/store-b-sstorePathCommitLog=/wdata/rocketmq/store-b-s/commitlognamesrvAddr=rocketmq-nameserver1:9876;rocketmq-nameserver2:9876deleteWhen=04fileReservedTime=48brokerRole=SLAVEflushDiskType=ASYNC_FLUSH

保存退出

注意:这里的 brokerId 格式为主0从1

进入 /usr/local/rocketmq/bin ,修改 JAVA 虚拟机运行的所占用的内存(这里主要看服务器配置,如果服务器配置较差,建议修改)

[root@rocketmq-nameserver1 bin]# vim runbroker.sh

[root@rocketmq-nameserver1 bin]# vim runserver.sh

修改为上图中红框中所示的内容

编辑 namesrv 服务的配置文件(此步可以忽略,采用系统默认的配置)

[root@rocketmq-nameserver1 conf]# vim /wdata/rocketmq/namesrv/namesrv.confrocketmqHome=/usr/local/rocketmqkvConfigPath=/wdata/rocketmq/namesrv/kvConfig.jsonconfigStorePath=/wdata/rocketmq/namesrv/namesrv.propertiesproductEnvName=centerclusterTest=falseorderMessageEnable=falselistenPort=9876serverWorkerThreads=8serverCallbackExecutorThreads=0serverSelectorThreads=3serverOnewaySemaphoreValue=256serverAsyncSemaphoreValue=64serverChannelMaxIdleTimeSeconds=120serverSocketSndBufSize=65535serverSocketRcvBufSize=65535serverPooledByteBufAllocatorEnable=trueuseEpollNativeSelector=false

主要修改相关的目录以及端口号,其他想不用管

说明:以上配置中所涉及的字段含义,详情请参阅官方文档,这里不错过多说明。

复制文件

将 192.168.2.177 上 /usr/local/rocketmq 整个目录复制到 192.168.2.178 上。

[root@rocketmq-nameserver1 local]# scp -r rocketmq root@192.168.2.178:/usr/local/[root@rocketmq-nameserver1 local]# scp -r /wdata/rocketmq root@192.168.2.178:/wdata/

此处操作为了方便起见,如果不是很放心,可在另外一台服务器上做上述同样的操作。

启动 RocketMQ

在 192.168.2.177上操作

[root@rocketmq-nameserver1 ~]# nohup /usr/local/rocketmq/bin/mqnamesrv -c /wdata/rocketmq/namesrv/namesrv.conf 2>&1 &[root@rocketmq-nameserver1 ~]# nohup /usr/local/rocketmq/bin/mqbroker -c /usr/local/rocketmq/conf/2m-2s-async/broker-a.properties > /wdata/rocketmq/logs/rocketmqlogs/broker-a.log 2>&1 &[root@rocketmq-nameserver1 ~]# nohup /usr/local/rocketmq/bin/mqbroker -c /usr/local/rocketmq/conf/2m-2s-async/broker-b-s.properties > /wdata/rocketmq/logs/rocketmqlogs/broker-b-s.log 2>&1 &

在 192.168.2.178 上操作

[root@rocketmq-nameserver2 ~]# nohup /usr/local/rocketmq/bin/mqnamesrv -c /wdata/rocketmq/namesrv/namesrv.conf 2>&1 &[root@rocketmq-nameserver2 ~]# nohup /usr/local/rocketmq/bin/mqbroker -c /usr/local/rocketmq/conf/2m-2s-async/broker-b.properties > /wdata/rocketmq/logs/rocketmqlogs/broker-b.log 2>&1 &[root@rocketmq-nameserver2 ~]# nohup /usr/local/rocketmq/bin/mqbroker -c /usr/local/rocketmq/conf/2m-2s-async/broker-a-s.properties > /wdata/rocketmq/logs/rocketmqlogs/broker-a-s.log 2>&1 &

到此,RocketMQ 集群部署完成,为了查看集群的状态,我们可以使用 github 上的图形化开源工具 rocketmq-console 。

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

解压并进入 rocketmq-console 目录,进行编译

[root@rocketmq-nameserver1 opt]# cd rocketmq-externals-master/rocketmq-console/

在编译之前,需要先修改该目录下的 pom.xml 文件

[root@rocketmq-nameserver1 rocketmq-console]# vim pom.xml

将上图中红框内的 4.4.0-SNAPSHOT 修改为 4.4.0,不修改此处,在编译的过程中可能会报错。

编译

[root@rocketmq-nameserver1 rocketmq-console]# mvn clean package -Dmaven.test.skip=true

此过程较为漫长,需耐心等待。。。。。。

等编译完成之后,进入 target/ 目录

[root@rocketmq-nameserver1 rocketmq-console]# cd target/

运行 rocketmq-console-ng-1.0.0.jar 包

[root@rocketmq-nameserver1 target]# java -jar rocketmq-console-ng-1.0.0.jar

如上图,出现 Tomcat started on port(s): 8080 (http) 表示服务开启成功。

然后我们在浏览器中输入 192.168.1.177:8080 查看

如图,出现两主两从,表示我们的集群配置成功

服务 目录 配置 消息 集群 文件 客户 客户端 消费 编译 服务器 消费者 环境 存储 支持 信息 路由 查询 上图 分布式 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 军品软件开发流程 数据库中确定关系本身的属性是 淄博办公管理软件开发公司 等保服务器数据备份恢复测评项 qq邮箱的接受服务器 国外网络安全隔离卡 星网视易软件开发 大数据时代软件开发模式 网络安全违规外联通报 oracle数据库表结构同步 软件开发工程师助理是什么 php 服务器选择 什么是邮箱服务器 恒一互联网科技有限公司地址 网络安全会议礼品 网络技术发展迅速的利弊 江苏晖宇常网络技术有限公司 网络安全事件应急方案 网络安全学术研究现状 云浮小程序软件开发 达梦数据库备份导出 工业网络技术就业前景怎么样 青浦区什么是软件开发一体化 千千静听歌词服务器最新补丁 王者微信区登录服务器没响应 服务器角色属于权限管理 湖北移动云服务器云主机 江西网络技术基础期末考试 怎么找软件开发者 阿里云如何连接mysql数据库
0