目 录CONTENT

文章目录

RocketMQ—部署

路口、下车
2026-01-18 / 0 评论 / 0 点赞 / 7 阅读 / 0 字
温馨提示:
本文最后更新于2026-01-18,若内容或图片失效,请留言反馈。 部分素材来自网络,若不小心影响到您的利益,请联系我们删除。

RocketMQ生产拓扑结构

image-ihpy.png

RocketMQ单Master部署

  • 使用者:一般是指生产、消费程序的直接研发人员、RocketMQ中间件的维护人员等。
  • Console管理平台:管理RocketMQ生产者组、Topic、消费者组和RocketMQ元数据的平台。管理平台可以自研,也可以基于社区提供的 RocketMQ Console二次开发而来,或者直接使用社区提供的RocketMQ Console。
  • Namesrv集群:一个无状态的元数据管理,Namesrv相当于RocketMQ的注册中心,提供节点发现。
  • Broker 集群:消息中间商或消息代理。主要用于保存消息,处理生产者、消费者的各种请求的代理。包含Master和Slave两种角色,与MySQL中的主从角色类似。
  • 生产者集群:消息发送方,通常由一个或多个生产者实例组成。
  • 消费者集群:消息接收方,通常由一个或多个消费者实例组成。

RocketMQ的部署模式

Namesrv部署

推荐一个集群并部署2~3个Namesrv节点。

Broker集群部署

  • 第一种:单 Master。“集群”中只有一个节点,宕机后不可用。通常用于个人入门学习,比如测试发送消息代码、测试消费消息代码等,建议在生产环境中不要使用这种部署方式。
  • 第二种:单 Master,单 Salve。单主从模式,Master 宕机后集群不可写入消息,但可以读取消息。通常用于个人深入学习,比如研究源码、设计原理等,建议在生产环境中不要使用这种部署方式。
  • 第三种:多 Master,无 Salve。该种部署方式性能最好,并且当单个 Master节点宕机时,不影响正常使用。
  • 第四种:多Master、多Slave,异步复制。在第三种方式上增加了Slave,当一个Master节点宕机时,该Master不能写入消息,消费可以在其对应的Slave上进行。新消息的生产、消费不受影响。添加Salve后,消费者可以从对应的Slave中读取已发送到宕机Master中的消息。生产环境中可以使用这种部署方式。
  • 第五种:多 Master、多 Slave,同步复制。这种部署方式完全解决了第四种部署方式的弊端,虽然由于Master-Salve同步复制导致发送消息耗时增加,集群性能大大下降,但是这仍然是最可靠的部署方式。生产环境中可以使用这种部署方式。

RocketMQ单Master部署

单台虚拟机:192.168.31.103

部署NameServer

# 修改IP地址到103
cd /etc/sysconfig/network-scripts
sed -i 's/dhcp/static/g' ifcfg-ens33
sudo cat >> ifcfg-ens33 <<-'EOF'
IPADDR=192.168.31.103
GATEWAY=192.168.31.1
NETMASK=255.255.255.0
DNS1=114.114.114.114
DNS2=8.8.8.8
EOF
service network restart
  1. 环境准备CentOS 7.x系统 ,YUM安装OpenJDK 1.8,并配置
yum -y install java-1.8.0-openjdk-devel.x86_64
sudo cat >> /etc/profile <<-'EOF'
export JAVA_HOME=/usr/lib/jvm/java-1.8.0-openjdk
export JRE_HOME=$JAVA_HOME/jre
export CLASSPATH=$JAVA_HOME/lib:$JRE_HOME/lib:$CLASSPATH
export PATH=$JAVA_HOME/bin:$JRE_HOME/bin:$PATH
EOF
source /etc/profile
echo $JAVA_HOME


cd /usr/local
# 官网下的太慢,用我提供的OSS加速下载
# wget --no-check-certificate https://manongbiji.oss-cnbeijing.aliyuncs.com/ittailkshow/rocketmq/download/rocketmq-all-4.9.2-binrelease.zip
wget --no-check-certificate https://manongbiji.oss-cnbeijing.aliyuncs.com/ittailkshow/rocketmq/download/rocketmq-all-4.9.2-binrelease.zip
unzip rocketmq-all-4.9.2-bin-release.zip
cd /usr/local/rocketmq-4.9.2
sed -i 's/-Xms4g -Xmx4g -XX:MetaspaceSize=128m/-Xms1g -Xmx1g -
XX:MetaspaceSize=128m/g' ./bin/runserver.sh
firewall-cmd --zone=public --add-port=9876/tcp --permanent
firewall-cmd --reload
# sh ./bin/mqnamesrv
nohup sh ./bin/mqnamesrv > nqnamesrv.log &

部署单Master

cd /etc/sysconfig/network-scripts
sed -i 's/dhcp/static/g' ifcfg-ens33
sudo cat >> ifcfg-ens33 <<-'EOF'
IPADDR=192.168.31.105
GATEWAY=192.168.31.1
NETMASK=255.255.255.0
DNS1=114.114.114.114
DNS2=8.8.8.8
EOF
service network restart

yum -y install java-1.8.0-openjdk-devel.x86_64
sudo cat >> /etc/profile <<-'EOF'
export JAVA_HOME=/usr/lib/jvm/java-1.8.0-openjdk
export JRE_HOME=$JAVA_HOME/jre
export CLASSPATH=$JAVA_HOME/lib:$JRE_HOME/lib:$CLASSPATH
export PATH=$JAVA_HOME/bin:$JRE_HOME/bin:$PATH
EOF
source /etc/profile
echo $JAVA_HOME

cd /usr/local
# 官网下的太慢,用我提供的OSS加速下载
# wget --no-check-certificate https://dlcdn.apache.org/rocketmq/4.9.2/rocketmqall-4.9.2-bin-release.zip
wget --no-check-certificate https://manongbiji.oss-cnbeijing.aliyuncs.com/ittailkshow/rocketmq/download/rocketmq-all-4.9.2-binrelease.zip
unzip rocketmq-all-4.9.2-bin-release.zip
cd /usr/local/rocketmq-4.9.2
sed -i 's/-Xms8g -Xmx8g/-Xms1g -Xmx1g/g' ./bin/runbroker.sh

cat > single-master.properties <<-'EOF'
#集群名称,同一个集群下的broker要求统一
brokerClusterName=DefaultCluster

#broker名称
brokerName=broker-a

#brokerId=0代表主节点,大于零代表从节点
brokerId=0

#删除日志文件时间点,默认凌晨 4 点
deleteWhen=04

#日志文件保留时间,默认 48 小时
fileReservedTime=48

#Broker 的角色
#- ASYNC_MASTER 异步复制Master
#- SYNC_MASTER 同步双写Master
brokerRole=SYNC_MASTER

#刷盘方式
#- ASYNC_FLUSH 异步刷盘,性能好宕机会丢数
#- SYNC_FLUSH 同步刷盘,性能较差不会丢数
flushDiskType=SYNC_FLUSH

#末尾追加,NameServer节点列表,使用分号分割
namesrvAddr=192.168.31.103:9876
autoCreateTopicEnable=true
EOF

firewall-cmd --zone=public --add-port=10911/tcp --permanent
firewall-cmd --reload

# sh ./bin/mqbroker -c ./single-master.properties
nohup sh ./bin/mqbroker -c ./single-master.properties > broker.log &

cd /usr/local/rocketmq-4.9.2/bin
sh mqadmin clusterList -n 192.168.31.103:9876

cd /usr/local/rocketmq-4.9.2/bin
export NAMESRV_ADDR=192.168.31.103:9876
sh tools.sh org.apache.rocketmq.example.quickstart.Producer

cd /usr/local/rocketmq-4.9.2/bin
export NAMESRV_ADDR=192.168.31.103:9876
sh tools.sh org.apache.rocketmq.example.quickstart.Consumer

快速部署RocketMQ (Console)Dashboard监控

RocketMQ Dashboard监控中心

Github官网首页
https://github.com/apache/rocketmq-dashboard
Dashboard中文文档
https://github.com/apache/rocketmqdashboard/blob/master/docs/1_0_0/UserGuide_CN.md
下载Dashboard Jar包
https://developer.aliyun.com/mvn/search 搜索 rocketmq-dashboard

image-reni.png

RocketMQ启动方式
#安装JDK8
yum -y install java-1.8.0-openjdk-devel.x86_64
sudo cat >> /etc/profile <<-'EOF'
export JAVA_HOME=/usr/lib/jvm/java-1.8.0-openjdk
export JRE_HOME=$JAVA_HOME/jre
export CLASSPATH=$JAVA_HOME/lib:$JRE_HOME/lib:$CLASSPATH
export PATH=$JAVA_HOME/bin:$JRE_HOME/bin:$PATH
EOF
source /etc/profile
echo $JAVA_HOME

#开放端口8080
firewall-cmd --zone=public --add-port=8080/tcp --permanent
firewall-cmd --reload

#下载启动dashboard
wget --no-check-certificate https://manongbiji.oss-cnbeijing.aliyuncs.com/ittailkshow/rocketmq/download/rocketmq-dashboard-1.0.0.jar
# java -jar rocketmq-dashboard-1.0.0.jar
nohup java -jar rocketmq-dashboard-1.0.0.jar > dashboard.log &

RocketMQ Dashboard创建主题与读写队列的关系

Dashboard创建主题面板

RocketMQ-Dashboard部署后点击Topic菜单,点击“ADD/UPDATE”按钮新增主题
image-mjew.png
新增主题包含6项:
- ClusterName:集群名称
- Broker_Name:当前主题与哪些Broker绑定,可以多选
- 绑定多个Broker,将均摊写队列的数量,例如选中2个Broker,4条写队列,则每个分配两条。

image-azey.png
- TopicName:主题名称
- WriteQueueNums:写队列数量
- ReadQueueNums:读队列数量
- 读写队列,则是在做路由信息时使用。

举个例子:写队列个数是8,设置的读队列个数是4.这个时候,会创建8个文件夹,代表0 1
2 3 4 5 6 7,但在消息消费时,路由信息只返回4,在具体拉取消息时,就只会消费0 1 2
3这4个队列中的消息,4 5 6 7压根就没有被消费。
反过来,如果写队列个数是4,读队列个数是8,在生产消息时只会往0 1 2 3中生产消息,
消费消息时则会从0 1 2 3 4 5 6 7所有的队列中消费,当然4 5 6 7中压根就没有消息 ,
假设消费group有两个消费者,事实上只有第一个消费者在真正的消费消息(0 1 2 3),第二
个消费者压根就消费不到消息。
- Perm:执行权限,2表示只写,4表示只读

image-2wvo.png
single-master.properties
autoCreateTopicEnable=false # 必须先创建主题,否则报主题不存在,生产要关闭
或者
autoCreateTopicEnable=true # 发送消息时,如果主题不存在,则自动创建
defaultTopicQueueNums=4 #自动创建时读写队列数量为4

生产多Master多Slave环境部署

环境说明

NameServer
- 192.168.31.103
- 192.168.31.113
Broker-A
- Master:192.168.31.104
- Slave:192.168.31.114
Broker-B
- Master:192.168.31.105
- Slave:192.168.31.115

关闭清除已有实例

清除原有并关闭已有线程
pkill java
rm -rf /usr/local/rocketmq-4.9.2
rm -f /usr/local/rocketmq-all-4.9.2-bin-release.zip

部署Name Server

103 NameServer

yum -y install java-1.8.0-openjdk-devel.x86_64
sudo cat >> /etc/profile <<-'EOF'
export JAVA_HOME=/usr/lib/jvm/java-1.8.0-openjdk
export JRE_HOME=$JAVA_HOME/jre
export CLASSPATH=$JAVA_HOME/lib:$JRE_HOME/lib:$CLASSPATH
export PATH=$JAVA_HOME/bin:$JRE_HOME/bin:$PATH
EOF

source /etc/profile
echo $JAVA_HOME

cd /usr/local
# 官网下的太慢,用我提供的OSS加速下载
# wget --no-check-certificate https://manongbiji.oss-cnbeijing.aliyuncs.com/ittailkshow/rocketmq/download/rocketmq-all-4.9.2-binrelease.zip
wget --no-check-certificate https://manongbiji.oss-cnbeijing.aliyuncs.com/ittailkshow/rocketmq/download/rocketmq-all-4.9.2-bin-
release.zip

unzip rocketmq-all-4.9.2-bin-release.zip
cd /usr/local/rocketmq-4.9.2
sed -i 's/-Xms4g -Xmx4g -XX:MetaspaceSize=128m/-Xms1g -Xmx1g -
XX:MetaspaceSize=128m/g' ./bin/runserver.sh
firewall-cmd --zone=public --add-port=9876/tcp --permanent
firewall-cmd --reload
# sh ./bin/mqnamesrv
nohup sh ./bin/mqnamesrv > nqnamesrv.log &

113 NameServer

yum -y install java-1.8.0-openjdk-devel.x86_64
sudo cat >> /etc/profile <<-'EOF'
export JAVA_HOME=/usr/lib/jvm/java-1.8.0-openjdk
export JRE_HOME=$JAVA_HOME/jre
export CLASSPATH=$JAVA_HOME/lib:$JRE_HOME/lib:$CLASSPATH
export PATH=$JAVA_HOME/bin:$JRE_HOME/bin:$PATH
EOF
source /etc/profile
echo $JAVA_HOME

cd /usr/local
# 官网下的太慢,用我提供的OSS加速下载
# wget --no-check-certificate https://manongbiji.oss-cnbeijing.aliyuncs.com/ittailkshow/rocketmq/download/rocketmq-all-4.9.2-binrelease.zip
wget --no-check-certificate https://manongbiji.oss-cnbeijing.aliyuncs.com/ittailkshow/rocketmq/download/rocketmq-all-4.9.2-binrelease.zip

unzip rocketmq-all-4.9.2-bin-release.zip
cd /usr/local/rocketmq-4.9.2
sed -i 's/-Xms4g -Xmx4g -XX:MetaspaceSize=128m/-Xms1g -Xmx1g -
XX:MetaspaceSize=128m/g' ./bin/runserver.sh
firewall-cmd --zone=public --add-port=9876/tcp --permanent
firewall-cmd --reload
# sh ./bin/mqnamesrv
nohup sh ./bin/mqnamesrv > nqnamesrv.log &

部署2Master-2Slave

Broker-A:104主

yum -y install java-1.8.0-openjdk-devel.x86_64
sudo cat >> /etc/profile <<-'EOF'
export JAVA_HOME=/usr/lib/jvm/java-1.8.0-openjdk
export JRE_HOME=$JAVA_HOME/jre
export CLASSPATH=$JAVA_HOME/lib:$JRE_HOME/lib:$CLASSPATH
export PATH=$JAVA_HOME/bin:$JRE_HOME/bin:$PATH
EOF
source /etc/profile
echo $JAVA_HOME

cd /usr/local
#官网下的太慢,用我提供的OSS加速下载
#wget --no-check-certificate https://dlcdn.apache.org/rocketmq/4.9.2/rocketmqall-4.9.2-bin-release.zip
wget --no-check-certificate https://manongbiji.oss-cnbeijing.aliyuncs.com/ittailkshow/rocketmq/download/rocketmq-all-4.9.2-binrelease.zip
unzip rocketmq-all-4.9.2-bin-release.zip
cd /usr/local/rocketmq-4.9.2
sed -i 's/-Xms8g -Xmx8g/-Xms1g -Xmx1g/g' ./bin/runbroker.sh

cat > master-a.properties <<-'EOF'
#集群名称,同一个集群下的broker要求统一
brokerClusterName=DefaultCluster

#broker名称
brokerName=broker-a

#brokerId=0代表主节点,大于零代表从节点
brokerId=0

#删除日志文件时间点,默认凌晨 4 点
deleteWhen=04

#日志文件保留时间,默认 48 小时
fileReservedTime=48

#Broker 的角色
#- ASYNC_MASTER 异步复制Master
#- SYNC_MASTER 同步双写Master
#SLAVE 从属服务器
brokerRole=SYNC_MASTER

#刷盘方式
#- ASYNC_FLUSH 异步刷盘,性能好宕机会丢数
#- SYNC_FLUSH 同步刷盘,性能较差不会丢数
flushDiskType=SYNC_FLUSH

#末尾追加,NameServer节点列表,使用分号分割
namesrvAddr=192.168.31.103:9876;192.168.31.113:9876

autoCreateTopicEnable=false
EOF

firewall-cmd --zone=public --add-port=10911/tcp --permanent
firewall-cmd --reload

#sh ./bin/mqbroker -c ./single-master.properties
nohup sh ./bin/mqbroker -c ./master-a.properties > broker.log &

Broker-A:114从

yum -y install java-1.8.0-openjdk-devel.x86_64
sudo cat >> /etc/profile <<-'EOF'
export JAVA_HOME=/usr/lib/jvm/java-1.8.0-openjdk
export JRE_HOME=$JAVA_HOME/jre
export CLASSPATH=$JAVA_HOME/lib:$JRE_HOME/lib:$CLASSPATH
export PATH=$JAVA_HOME/bin:$JRE_HOME/bin:$PATH
EOF
source /etc/profile
echo $JAVA_HOME

cd /usr/local
#官网下的太慢,用我提供的OSS加速下载
#wget --no-check-certificate https://dlcdn.apache.org/rocketmq/4.9.2/rocketmqall-4.9.2-bin-release.zip
wget --no-check-certificate https://manongbiji.oss-cnbeijing.aliyuncs.com/ittailkshow/rocketmq/download/rocketmq-all-4.9.2-binrelease.zip
unzip rocketmq-all-4.9.2-bin-release.zip

cd /usr/local/rocketmq-4.9.2

sed -i 's/-Xms8g -Xmx8g/-Xms1g -Xmx1g/g' ./bin/runbroker.sh
cat > slave-a.properties <<-'EOF'
#集群名称,同一个集群下的broker要求统一
brokerClusterName=DefaultCluster

#broker名称
brokerName=broker-a

#brokerId=0代表主节点,大于零代表从节点
brokerId=1

#删除日志文件时间点,默认凌晨 4 点
deleteWhen=04

#日志文件保留时间,默认 48 小时
fileReservedTime=48

#Broker 的角色
#- ASYNC_MASTER 异步复制Master
#- SYNC_MASTER 同步双写Master
brokerRole=SLAVE

#刷盘方式
#- ASYNC_FLUSH 异步刷盘,性能好宕机会丢数
#- SYNC_FLUSH 同步刷盘,性能较差不会丢数
flushDiskType=SYNC_FLUSH

#末尾追加,NameServer节点列表,使用分号分割
namesrvAddr=192.168.31.103:9876;192.168.31.113:9876
autoCreateTopicEnable=false
EOF

firewall-cmd --zone=public --add-port=10911/tcp --permanent
firewall-cmd --reload
# sh ./bin/mqbroker -c ./slave-a.properties
nohup sh ./bin/mqbroker -c ./slave-a.properties > broker.log &

Broker-B:105主

yum -y install java-1.8.0-openjdk-devel.x86_64
sudo cat >> /etc/profile <<-'EOF'
export JAVA_HOME=/usr/lib/jvm/java-1.8.0-openjdk
export JRE_HOME=$JAVA_HOME/jre
export CLASSPATH=$JAVA_HOME/lib:$JRE_HOME/lib:$CLASSPATH
export PATH=$JAVA_HOME/bin:$JRE_HOME/bin:$PATH
EOF
source /etc/profile
echo $JAVA_HOME

cd /usr/local
# 官网下的太慢,用我提供的OSS加速下载
# wget --no-check-certificate https://dlcdn.apache.org/rocketmq/4.9.2/rocketmqall-4.9.2-bin-release.zip
wget --no-check-certificate https://manongbiji.oss-cnbeijing.aliyuncs.com/ittailkshow/rocketmq/download/rocketmq-all-4.9.2-binrelease.zip
unzip rocketmq-all-4.9.2-bin-release.zip
cd /usr/local/rocketmq-4.9.2
sed -i 's/-Xms8g -Xmx8g/-Xms1g -Xmx1g/g' ./bin/runbroker.sh

cat > master-b.properties <<-'EOF'
#集群名称,同一个集群下的broker要求统一
brokerClusterName=DefaultCluster

#broker名称
brokerName=broker-b

#brokerId=0代表主节点,大于零代表从节点
brokerId=0

#删除日志文件时间点,默认凌晨 4 点
deleteWhen=04

#日志文件保留时间,默认 48 小时
fileReservedTime=48

#Broker 的角色
#- ASYNC_MASTER 异步复制Master
#- SYNC_MASTER 同步双写Master
brokerRole=SYNC_MASTER

#刷盘方式
#- ASYNC_FLUSH 异步刷盘,性能好宕机会丢数
#- SYNC_FLUSH 同步刷盘,性能较差不会丢数
flushDiskType=SYNC_FLUSH

#末尾追加,NameServer节点列表,使用分号分割
namesrvAddr=192.168.31.103:9876;192.168.31.113:9876
autoCreateTopicEnable=false
EOF

firewall-cmd --zone=public --add-port=10911/tcp --permanent
firewall-cmd --reload

# sh ./bin/mqbroker -c ./master-b.properties
nohup sh ./bin/mqbroker -c ./master-b.properties > broker.log &

Broker-B:115从

yum -y install java-1.8.0-openjdk-devel.x86_64
sudo cat >> /etc/profile <<-'EOF'
export JAVA_HOME=/usr/lib/jvm/java-1.8.0-openjdk
export JRE_HOME=$JAVA_HOME/jre
export CLASSPATH=$JAVA_HOME/lib:$JRE_HOME/lib:$CLASSPATH
export PATH=$JAVA_HOME/bin:$JRE_HOME/bin:$PATH
EOF
source /etc/profile
echo $JAVA_HOME
cd /usr/local

# 官网下的太慢,用我提供的OSS加速下载
# wget --no-check-certificate https://dlcdn.apache.org/rocketmq/4.9.2/rocketmqall-4.9.2-bin-release.zip
wget --no-check-certificate https://manongbiji.oss-cnbeijing.aliyuncs.com/ittailkshow/rocketmq/download/rocketmq-all-4.9.2-binrelease.zip
unzip rocketmq-all-4.9.2-bin-release.zip
cd /usr/local/rocketmq-4.9.2

sed -i 's/-Xms8g -Xmx8g/-Xms1g -Xmx1g/g' ./bin/runbroker.sh

cat > slave-b.properties <<-'EOF'
#集群名称,同一个集群下的broker要求统一
brokerClusterName=DefaultCluster

#broker名称
brokerName=broker-b

#brokerId=0代表主节点,大于零代表从节点
brokerId=1

#删除日志文件时间点,默认凌晨 4 点
deleteWhen=04

#日志文件保留时间,默认 48 小时
fileReservedTime=48

#Broker 的角色
#- ASYNC_MASTER 异步复制Master
#- SYNC_MASTER 同步双写Master
brokerRole=SLAVE

#刷盘方式
#- ASYNC_FLUSH 异步刷盘,性能好宕机会丢数
#- SYNC_FLUSH 同步刷盘,性能较差不会丢数
flushDiskType=SYNC_FLUSH

#末尾追加,NameServer节点列表,使用分号分割
namesrvAddr=192.168.31.103:9876;192.168.31.113:9876
autoCreateTopicEnable=false
EOF

firewall-cmd --zone=public --add-port=10911/tcp --permanent
firewall-cmd --reload

# sh ./bin/mqbroker -c ./slave-b.properties
nohup sh ./bin/mqbroker -c ./slave-b.properties > broker.log &

验证集群有效

cd /usr/local/rocketmq-4.9.2/bin
sh mqadmin clusterList -n 192.168.31.113:9876
0

评论区