目录
1.系统环境准备
1.1系统要求
1.2主机规划
1.3基础环境配置
1.4防火墙配置
2.RocketMQ安装
2.1下载和安装
2.2环境变量配置
3.NameServer配置和启动
3.1NameServer配置
3.2NameServer启动脚本
3.3启动NameServer
4.Broker集群配置
4.1 Master1 配置 (broker-m1)
4.2 Master2 配置 (broker-m2)
4.3 Slave1 配置 (broker-s1)
4.4 Slave2 配置 (broker-s2)
5. Proxy配置
5.1 Proxy通用配置模板
5.2 各节点Proxy配置
5.3 Proxy 启动脚本
6.启动集群
6.1 Broker启动脚本
6.2 启动顺序
6.3 验证集群状态
7. 控制台部署
7.1安装控制台
7.2 启动控制台
8.系统服务配置
8.1创建Systemd服务
9.集群验证和测试
9.1功能测试
9.2性能测试
10. 运维监控
10.1健康检查脚本
10.2 日志清理脚本
1.系统环境准备
1.1系统要求
# 操作系统: RockyLinux 8.x
# Java: JDK 8+
# 内存: 至少4GB
# 磁盘: 至少50GB可用空间
# 防火墙: 需要开放相关端口
1.2主机规划
|
主机IP |
主机名 |
角色 |
服务端口 |
操作系统版本 |
|
10.9.254.20 |
console |
控制台 |
8080 |
RockyLinux8.10 |
|
10.9.254.21 |
namesrv1 |
NameServer 1 |
9876 |
RockyLinux8.10 |
|
10.9.254.22 |
namesrv2 |
NameServer 2 |
9876 |
RockyLinux8.10 |
|
10.9.254.37 |
broker-m1 |
Broker Master1 + Proxy1 |
10911, 10912, 8080 |
RockyLinux8.10 |
|
10.9.254.38 |
broker-m2 |
Broker Master2 + Proxy2 |
10911, 10912, 8080 |
RockyLinux8.10 |
|
10.9.254.39 |
broker-s1 |
Broker Slave1 + Proxy3 |
11911, 11912, 8080 |
RockyLinux8.10 |
|
10.9.254.40 |
broker-s2 |
Broker Slave2 + Proxy4 |
11911, 11912, 8080 |
RockyLinux8.10 |
1.3基础环境配置
# 所有节点执行
#1.更新系统
|
[root@localhost ~]# dnf update -y |
|
Installed: grub2-tools-efi-1:2.02-169.el8_10.rocky.0.1.x86_64 kernel-4.18.0-553.81.1.el8_10.x86_64 kernel-core-4.18.0-553.81.1.el8_10.x86_64 kernel-modules-4.18.0-553.81.1.el8_10.x86_64 libevent-2.1.8-5.el8.x86_64 libxkbcommon-0.9.1-1.el8.x86_64 python3-unbound-1.16.2-5.9.el8.x86_64 unbound-libs-1.16.2-5.9.el8.x86_64 xkeyboard-config-2.28-1.el8.noarch Complete! |
#2.安装必要工具
|
[root@localhost ~]# dnf install -y wget vim net-tools telnet lsof |
|
Installed: alsa-lib-1.2.10-2.el8.x86_64 atk-2.28.1-1.el8.x86_64 avahi-libs-0.7-27.el8_10.1.x86_64 cairo-1.15.12-6.el8.x86_64 copy-jdk-configs-4.0-2.el8.noarch cups-libs-1:2.2.6-63.el8_10.x86_64 dejavu-fonts-common-2.35-7.el8.noarch dejavu-sans-fonts-2.35-7.el8.noarch fontconfig-2.13.1-4.el8.x86_64 fontpackages-filesystem-1.44-22.el8.noarch fribidi-1.0.4-9.el8.x86_64 gdk-pixbuf2-2.36.12-7.el8_10.x86_64 gdk-pixbuf2-modules-2.36.12-7.el8_10.x86_64 graphite2-1.3.10-10.el8.x86_64 gtk-update-icon-cache-3.22.30-12.el8_10.x86_64 gtk2-2.24.32-5.el8.x86_64 harfbuzz-1.7.5-4.el8.x86_64 hicolor-icon-theme-0.17-2.el8.noarch jasper-libs-2.0.14-6.el8_10.x86_64 java-1.8.0-openjdk-1:1.8.0.472.b08-1.el8.x86_64 java-1.8.0-openjdk-devel-1:1.8.0.472.b08-1.el8.x86_64 java-1.8.0-openjdk-headless-1:1.8.0.472.b08-1.el8.x86_64 javapackages-filesystem-5.3.0-2.module+el8.3.0+125+5da1ae29.noarch jbigkit-libs-2.1-14.el8.x86_64 libX11-1.6.8-9.el8_10.x86_64 libX11-common-1.6.8-9.el8_10.noarch libXau-1.0.9-3.el8.x86_64 libXcomposite-0.4.4-14.el8.x86_64 libXcursor-1.1.15-3.el8.x86_64 libXdamage-1.1.4-14.el8.x86_64 libXext-1.3.4-1.el8.x86_64 libXfixes-5.0.3-7.el8.x86_64 libXft-2.3.3-1.el8.x86_64 libXi-1.7.10-1.el8.x86_64 libXinerama-1.1.4-1.el8.x86_64 libXrandr-1.5.2-1.el8.x86_64 libXrender-0.9.10-7.el8.x86_64 libXtst-1.2.3-7.el8.x86_64 libdatrie-0.2.9-7.el8.x86_64 libfontenc-1.1.3-8.el8.x86_64 libjpeg-turbo-1.5.3-14.el8_10.x86_64 libthai-0.1.27-2.el8.x86_64 libtiff-4.0.9-35.el8_10.x86_64 libxcb-1.13.1-1.el8.x86_64 lksctp-tools-1.0.18-3.el8.x86_64 lua-5.3.4-12.el8.x86_64 nspr-4.36.0-2.el8_10.x86_64 nss-3.112.0-4.el8_10.x86_64 nss-softokn-3.112.0-4.el8_10.x86_64 nss-softokn-freebl-3.112.0-4.el8_10.x86_64 nss-sysinit-3.112.0-4.el8_10.x86_64 nss-util-3.112.0-4.el8_10.x86_64 pango-1.42.4-8.el8.x86_64 pixman-0.38.4-4.el8.x86_64 telnet-1:0.17-76.el8.x86_64 ttmkfdir-3.0.9-54.el8.x86_64 tzdata-java-2025b-1.el8.noarch xorg-x11-font-utils-1:7.5-41.el8.x86_64 xorg-x11-fonts-Type1-7.5-19.el8.noarch Complete! |
#3.配置主机名和hosts(分别在对应节点执行)
# namesrv1
hostnamectl set-hostname namesrv1
# namesrv2
hostnamectl set-hostname namesrv2
# broker-m1
hostnamectl set-hostname broker-m1
# broker-m2
hostnamectl set-hostname broker-m2
# broker-s1
hostnamectl set-hostname broker-s1
# broker-s2
hostnamectl set-hostname broker-s2
#4.配置所有节点的hosts文件
|
[root@console ~]# vim /etc/hosts |
|
127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4 ::1 localhost localhost.localdomain localhost6 localhost6.localdomain6 10.9.254.20 console 10.9.254.21 namesrv1 10.9.254.22 namesrv2 10.9.254.37 broker-m1 10.9.254.38 broker-m2 10.9.254.39 broker-s1 10.9.254.40 broker-s2 |
#5.配置Java环境
|
[root@console ~]# wget https://download.oracle.com/java/11/latest/jdk-11.0.12_linux-x64_bin.tar.gz [root@console ~]# tar xf jdk-11.0.12_linux-x64_bin.tar.gz [root@console ~]# mv jdk-11.0.12 /usr/local/java [root@console ~]# vim /etc/profile.d/java.sh |
|
export JAVA_HOME=/usr/local/java export CLASSPATH=${JAVA_HOME}/lib:$CLASSPATH export PATH=${JAVA_HOME}/bin:$PATH |
|
[root@console ~]# source /etc/profile.d/java.sh [root@console ~]# java -version |
|
java version "11.0.12" 2021-07-20 LTS Java(TM) SE Runtime Environment 18.9 (build 11.0.12+8-LTS-237) Java HotSpot(TM) 64-Bit Server VM 18.9 (build 11.0.12+8-LTS-237, mixed mode) |
1.4防火墙配置
# 所有节点执行
# 开放RocketMQ相关端口
firewall-cmd –permanent –add-port=9876/tcp # NameServer
firewall-cmd –permanent –add-port=10911/tcp # Broker Master
firewall-cmd –permanent –add-port=10912/tcp # Broker HA
firewall-cmd –permanent –add-port=11911/tcp # Broker Slave
firewall-cmd –permanent –add-port=11912/tcp # Broker Slave HA
firewall-cmd –permanent –add-port=8080/tcp # Proxy & Console
firewall-cmd –permanent –add-port=10909/tcp # Fast Failure
firewall-cmd –reload
2.RocketMQ安装
2.1下载和安装
# 所有节点执行
|
[root@console ~]# cd /opt [root@console /opt]# wget https://archive.apache.org/dist/rocketmq/5.3.0/rocketmq-all-5.3.0-bin-release.zip [root@console /opt]# ll |
|
-rw-r–r– 1 root root 93024329 Jul 16 2024 rocketmq-all-5.3.0-bin-release.zip |
|
[root@console /opt]# dnf install -y unzip [root@console /opt]# unzip rocketmq-all-5.3.0-bin-release.zip [root@console /opt]# mv rocketmq-all-5.3.0-bin-release rocketmq [root@console /opt]# mkdir -p /opt/rocketmq/{logs,store,conf/2m2s-async,proxy} |
2.2环境变量配置
# 所有节点执行
|
[root@console /opt]# vim /etc/profile |
|
# RocketMQ Environment export ROCKETMQ_HOME=/opt/rocketmq export PATH=$PATH:$ROCKETMQ_HOME/bin |
|
[root@console /opt]# source /etc/profile |
3.NameServer配置和启动
#所有nameserver节点执行
3.1NameServer配置
|
[root@namesrv1 ~]# vim /opt/rocketmq/conf/namesrv.properties |
|
# 监听端口,默认9876 listenPort=9876 # KV配置持久化路径 kvConfigPath=/opt/rocketmq/store/kvConfig # 顺序消息主题配置持久化路径 orderMessageTopicPath=/opt/rocketmq/store/orderMessageTopic # 产品环境名称,用于监控 productEnvName=center # 集群名称 clusterName=DefaultCluster # Broker不在线时是否丢弃消息 notranslateHold=false # 是否支持Acting Master(在5.0+中用于DLedger模式) supportActingMaster=false # 是否开启SSL(如需要安全连接) enableSSL=false |
3.2NameServer启动脚本
|
[root@namesrv1 ~]# vim /opt/rocketmq/bin/start-namesrv.sh |
|
#!/bin/bash # RocketMQ Home export ROCKETMQ_HOME=/opt/rocketmq # JVM配置 export JAVA_OPT="${JAVA_OPT} -server -Xms1g -Xmx1g -Xmn512m" export JAVA_OPT="${JAVA_OPT} -XX:MetaspaceSize=128m -XX:MaxMetaspaceSize=320m" #export JAVA_OPT="${JAVA_OPT} -XX:+UseConcMarkSweepGC -XX:+UseCMSCompactAtFullCollection" export JAVA_OPT="${JAVA_OPT} -XX:CMSInitiatingOccupancyFraction=70 -XX:+CMSParallelRemarkEnabled" export JAVA_OPT="${JAVA_OPT} -XX:SoftRefLRUPolicyMSPerMB=0 -XX:+CMSClassUnloadingEnabled" export JAVA_OPT="${JAVA_OPT} -XX:SurvivorRatio=8 -XX:+DisableExplicitGC" #export JAVA_OPT="${JAVA_OPT} -verbose:gc -Xloggc:${ROCKETMQ_HOME}/logs/namesrv_gc.log" #export JAVA_OPT="${JAVA_OPT} -XX:+PrintGCDetails -XX:+PrintGCDateStamps" export JAVA_OPT="${JAVA_OPT} -Drocketmq.home.dir=${ROCKETMQ_HOME}" export JAVA_OPT="${JAVA_OPT} -Drocketmq.namesrv.addr=192.168.1.10:9876;192.168.1.11:9876" # 启动NameServer nohup sh ${ROCKETMQ_HOME}/bin/mqnamesrv -c ${ROCKETMQ_HOME}/conf/namesrv.properties > ${ROCKETMQ_HOME}/logs/namesrv.log 2>&1 & echo "NameServer starting…" sleep 3 tail -f ${ROCKETMQ_HOME}/logs/namesrv.log |
3.3启动NameServer
# 在两个NameServer节点分别执行
|
[root@namesrv1 ~]# chmod +x /opt/rocketmq/bin/start-namesrv.sh [root@namesrv1 ~]# /opt/rocketmq/bin/start-namesrv.sh |
|
NameServer starting… [0.001s][warning][gc] -Xloggc is deprecated. Will use -Xlog:gc:/opt/rocketmq/logs/namesrv_gc.log instead. load config properties file OK, /opt/rocketmq/conf/namesrv.properties The Name Server boot success. serializeType=JSON, address 0.0.0.0:9876 |
|
[root@namesrv1 ~]# netstat -ln | grep 9876 |
|
tcp6 0 0 :::9876 :::* LISTEN |
|
[root@namesrv1 ~]# ps -ef | grep namesrv |
|
root 53491 1 0 00:59 pts/0 00:00:00 sh /opt/rocketmq/bin/mqnamesrv -c /opt/rocketmq/conf/namesrv.properties root 53493 53491 0 00:59 pts/0 00:00:00 sh /opt/rocketmq/bin/runserver.sh -Drmq.logback.configurationFile=/opt/rocketmq/conf/rmq.namesrv.logback.xml org.apache.rocketmq.namesrv.NamesrvStartup -c /opt/rocketmq/conf/namesrv.properties root 53523 53493 2 00:59 pts/0 00:00:06 /usr/lib/jvm/java-1.8.0-openjdk-1.8.0.472.b08-1.el8.x86_64/bin/java -server -Xms1g -Xmx1g -Xmn512m -XX:MetaspaceSize=128m -XX:MaxMetaspaceSize=320m -XX:+UseConcMarkSweepGC -XX:+UseCMSCompactAtFullCollection -XX:CMSInitiatingOccupancyFraction=70 -XX:+CMSParallelRemarkEnabled -XX:SoftRefLRUPolicyMSPerMB=0 -XX:+CMSClassUnloadingEnabled -XX:SurvivorRatio=8 -XX:+DisableExplicitGC -verbose:gc -Xloggc:/opt/rocketmq/logs/namesrv_gc.log -XX:+PrintGCDetails -XX:+PrintGCDateStamps -Drocketmq.home.dir=/opt/rocketmq -Drocketmq.namesrv.addr=192.168.1.10:9876;192.168.1.11:9876 -server -Xms4g -Xmx4g -Xmn2g -XX:MetaspaceSize=128m -XX:MaxMetaspaceSize=320m -XX:+UseConcMarkSweepGC -XX:+UseCMSCompactAtFullCollection -XX:CMSInitiatingOccupancyFraction=70 -XX:+CMSParallelRemarkEnabled -XX:SoftRefLRUPolicyMSPerMB=0 -XX:+CMSClassUnloadingEnabled -XX:SurvivorRatio=8 -XX:-UseParNewGC -verbose:gc -Xloggc:/dev/shm/rmq_srv_gc_%p_%t.log -XX:+PrintGCDetails -XX:+PrintGCDateStamps -XX:+UseGCLogFileRotation -XX:NumberOfGCLogFiles=5 -XX:GCLogFileSize=30m -XX:-OmitStackTraceInFastThrow -XX:-UseLargePages -cp .:/opt/rocketmq/bin/../conf:/opt/rocketmq/bin/../lib/*: -Drmq.logback.configurationFile=/opt/rocketmq/conf/rmq.namesrv.logback.xml org.apache.rocketmq.namesrv.NamesrvStartup -c /opt/rocketmq/conf/namesrv.properties root 53576 53428 0 01:03 pts/0 00:00:00 grep –color=auto namesrv |
4.Broker集群配置
4.1 Master1 配置 (broker-m1)
|
[root@broker-m1 ~]# vim /opt/rocketmq/conf/2m-2s-async/broker-m1.properties |
|
# /opt/rocketmq/conf/2m2s-async/broker-m1.properties # Broker Master1 配置文件 # 集群名称,同一集群的broker必须相同 brokerClusterName=DefaultCluster # Broker名称,master和slave通过相同brokerName关联 brokerName=broker-a # Broker ID,0表示Master,非0表示Slave brokerId=0 # Broker角色 # – ASYNC_MASTER: 异步复制Master # – SYNC_MASTER: 同步双写Master # – SLAVE: 从节点 brokerRole=ASYNC_MASTER # 刷盘方式 # – ASYNC_FLUSH: 异步刷盘(性能好) # – SYNC_FLUSH: 同步刷盘(可靠性高) flushDiskType=ASYNC_FLUSH # 删除日志文件的时间点,默认凌晨4点 deleteWhen=04 # 日志文件保留时间,单位小时 fileReservedTime=72 # Broker服务监听端口 listenPort=10911 # 高可用服务监听端口 haListenPort=10912 # NameServer地址列表,分号分隔 namesrvAddr=10.9.254.21:9876;10.9.254.22:9876 # 存储根路径 storePathRootDir=/opt/rocketmq/store/broker-m1 # CommitLog存储路径 storePathCommitLog=/opt/rocketmq/store/broker-m1/commitlog # 消费队列存储路径 storePathConsumeQueue=/opt/rocketmq/store/broker-m1/consumequeue # 消息索引存储路径 storePathIndex=/opt/rocketmq/store/broker-m1/index # checkpoint文件路径 storeCheckpoint=/opt/rocketmq/store/broker-m1/checkpoint # abort文件路径 abortFile=/opt/rocketmq/store/broker-m1/abort # 单个消息最大大小,单位字节 maxMessageSize=65536 # Broker IP地址,建议显式配置 brokerIP1=10.9.254.37 # HA IP地址,用于主从同步 brokerIP2=10.9.254.37 # 是否自动创建Topic(生产环境建议关闭) autoCreateTopicEnable=true # 是否自动创建订阅组 autoCreateSubscriptionGroup=true # CommitLog文件大小,单位字节(1GB) mappedFileSizeCommitLog=1073741824 # 从节点超时时间,单位毫秒 slaveTimeout=3000 # HA心跳发送间隔 haSendHeartbeatInterval=5000 # HA清理间隔 haHousekeepingInterval=20000 # HA传输批次大小 haTransferBatchSize=32768 # 从节点是否可读 slaveReadEnable=true # 是否启用从节点落伍检查 checkSlaveLag=true # 从节点落伍阈值,超过此值会停止复制 maxSlaveLag=102400 # 快速失败监听端口 listenPortForClient=10909 # 是否开启DLedger模式(5.0+新特性) enableDLedger=false |
4.2 Master2 配置 (broker-m2)
|
[root@broker-m2 ~]# vim /opt/rocketmq/conf/2m-2s-async/broker-m2.properties |
|
# /opt/rocketmq/conf/2m2s-async/broker-m2.properties brokerClusterName=DefaultCluster brokerName=broker-b brokerId=0 brokerRole=ASYNC_MASTER flushDiskType=ASYNC_FLUSH deleteWhen=04 fileReservedTime=72 listenPort=10911 haListenPort=10912 namesrvAddr=10.9.254.21:9876;10.9.254.22:9876 storePathRootDir=/opt/rocketmq/store/broker-m2 storePathCommitLog=/opt/rocketmq/store/broker-m2/commitlog storePathConsumeQueue=/opt/rocketmq/store/broker-m2/consumequeue storePathIndex=/opt/rocketmq/store/broker-m2/index storeCheckpoint=/opt/rocketmq/store/broker-m2/checkpoint abortFile=/opt/rocketmq/store/broker-m2/abort maxMessageSize=65536 brokerIP1=10.9.254.38 brokerIP2=10.9.254.38 autoCreateTopicEnable=true autoCreateSubscriptionGroup=true mappedFileSizeCommitLog=1073741824 slaveTimeout=3000 haSendHeartbeatInterval=5000 haHousekeepingInterval=20000 haTransferBatchSize=32768 slaveReadEnable=true checkSlaveLag=true maxSlaveLag=102400 listenPortForClient=10909 enableDLedger=false |
4.3 Slave1 配置 (broker-s1)
|
[root@broker-s1 ~]# vim /opt/rocketmq/conf/2m-2s-async/broker-s1.properties |
|
brokerClusterName=DefaultCluster brokerName=broker-a brokerId=1 brokerRole=SLAVE flushDiskType=ASYNC_FLUSH deleteWhen=04 fileReservedTime=72 listenPort=11911 haListenPort=11912 namesrvAddr=10.9.254.21:9876;10.9.254.22:9876 storePathRootDir=/opt/rocketmq/store/broker-s1 storePathCommitLog=/opt/rocketmq/store/broker-s1/commitlog storePathConsumeQueue=/opt/rocketmq/store/broker-s1/consumequeue storePathIndex=/opt/rocketmq/store/broker-s1/index storeCheckpoint=/opt/rocketmq/store/broker-s1/checkpoint abortFile=/opt/rocketmq/store/broker-s1/abort maxMessageSize=65536 brokerIP1=10.9.254.39 brokerIP2=10.9.254.39 autoCreateTopicEnable=true autoCreateSubscriptionGroup=true mappedFileSizeCommitLog=1073741824 slaveTimeout=3000 haSendHeartbeatInterval=5000 haHousekeepingInterval=20000 haTransferBatchSize=32768 slaveReadEnable=true checkSlaveLag=true maxSlaveLag=102400 listenPortForClient=11909 enableDLedger=false |
4.4 Slave2 配置 (broker-s2)
|
[root@broker-s2 ~]# vim /opt/rocketmq/conf/2m-2s-async/broker-s2.properties |
|
# /opt/rocketmq/conf/2m2s-async/broker-s2.properties brokerClusterName=DefaultCluster brokerName=broker-b brokerId=1 brokerRole=SLAVE flushDiskType=ASYNC_FLUSH deleteWhen=04 fileReservedTime=72 listenPort=11911 haListenPort=11912 namesrvAddr=10.9.254.21:9876;10.9.254.22:9876 storePathRootDir=/opt/rocketmq/store/broker-s2 storePathCommitLog=/opt/rocketmq/store/broker-s2/commitlog storePathConsumeQueue=/opt/rocketmq/store/broker-s2/consumequeue storePathIndex=/opt/rocketmq/store/broker-s2/index storeCheckpoint=/opt/rocketmq/store/broker-s2/checkpoint abortFile=/opt/rocketmq/store/broker-s2/abort maxMessageSize=65536 brokerIP1=10.9.254.40 brokerIP2=10.9.254.40 autoCreateTopicEnable=true autoCreateSubscriptionGroup=true mappedFileSizeCommitLog=1073741824 slaveTimeout=3000 haSendHeartbeatInterval=5000 haHousekeepingInterval=20000 haTransferBatchSize=32768 slaveReadEnable=true checkSlaveLag=true maxSlaveLag=102400 listenPortForClient=11909 enableDLedger=false |
5. Proxy配置
5.1 Proxy通用配置模板
|
# /opt/rocketmq/proxy/proxy.conf # RocketMQ Proxy 配置文件 # Proxy模式 # – LOCAL: 本地模式 # – CLUSTER: 集群模式 proxyMode=CLUSTER # NameServer地址 namesrvAddr=10.9.254.21:9876;10.9.254.22:9876 # 绑定地址 bindAddress=0.0.0.0 # 监听端口 listenPort=8080 # Grpc线程池数量 grpcThreadPoolNums=16 # Grpc线程池队列容量 grpcThreadPoolQueueCapacity=10000 # 注册到NameServer的地址(每个节点修改为自己的IP) rmqProxyServerAddress=10.9.254.37:8080 # 心跳间隔,单位秒 heartbeatIntervalSeconds=10 # 路由信息同步间隔,单位秒 routeSyncIntervalSeconds=10 # 是否开启ACL aclEnable=false # ACL配置文件路径 aclConfigPath=/opt/rocketmq/proxy/acl # 日志级别 logLevel=INFO # 最大日志文件数 logMaxFiles=10 # 单个日志文件最大大小 logSingleFileMaxSize=104857600 # 日志文件存储路径 logFileStorePath=/opt/rocketmq/proxy/logs # 指标导出类型 # – DISABLE: 禁用 # – PROMETHEUS: Prometheus格式 # – LOG: 日志格式 metricsExporterType=DISABLE # 指标收集间隔 metricsCollectIntervalSeconds=60 # 是否开启TLS enableTls=false # TLS证书文件路径 tlsKeyPath=/opt/rocketmq/proxy/tls/server.key tlsCertPath=/opt/rocketmq/proxy/tls/server.crt # 消息轨迹启用 traceTopicEnable=false # 消息轨迹Topic名称 traceTopicName=RMQ_SYS_TRACE_TOPIC |
实际测试过程中,在RocketMQ 5.3.0中,Proxy的配置文件应该是JSON格式,而不是properties格式。官方文档提示properties格式。
|
{ "namesrvAddr": "10.9.254.21:9876;10.9.254.22:9876", "bindAddress": "0.0.0.0", "listenPort": 8080, "proxyMode": "CLUSTER", "rmqProxyServerAddress": "10.9.254.37:8080", "heartbeatIntervalSeconds": 10, "routeSyncIntervalSeconds": 10, "aclEnable": false, "logLevel": "INFO", "logMaxFiles": 10, "logSingleFileMaxSize": 104857600, "logFileStorePath": "/opt/rocketmq/proxy/logs", "metricsExporterType": "DISABLE", "metricsCollectIntervalSeconds": 60, "enableTls": false, "traceTopicEnable": false, "traceTopicName": "RMQ_SYS_TRACE_TOPIC" } |
5.2 各节点Proxy配置
#为每个Broker节点创建对应的Proxy配置:
#在broker-m1上
|
[root@broker-m1 ~]# vim /opt/rocketmq/proxy/proxy-m1.json |
|
{ "namesrvAddr": "10.9.254.21:9876;10.9.254.22:9876", "bindAddress": "0.0.0.0", "listenPort": 8080, "proxyMode": "CLUSTER", "rmqProxyServerAddress": "10.9.254.37:8080", "heartbeatIntervalSeconds": 10, "routeSyncIntervalSeconds": 10, "aclEnable": false, "logLevel": "INFO", "logMaxFiles": 10, "logSingleFileMaxSize": 104857600, "logFileStorePath": "/opt/rocketmq/proxy/logs", "metricsExporterType": "DISABLE", "metricsCollectIntervalSeconds": 60, "enableTls": false, "traceTopicEnable": false, "traceTopicName": "RMQ_SYS_TRACE_TOPIC" } |
# 在broker-m2上
|
[root@broker-m2 ~]# vim /opt/rocketmq/proxy/proxy-m2.json |
|
{ "namesrvAddr": "10.9.254.21:9876;10.9.254.22:9876", "bindAddress": "0.0.0.0", "listenPort": 8080, "proxyMode": "CLUSTER", "rmqProxyServerAddress": "10.9.254.38:8080", "heartbeatIntervalSeconds": 10, "routeSyncIntervalSeconds": 10, "aclEnable": false, "logLevel": "INFO", "logMaxFiles": 10, "logSingleFileMaxSize": 104857600, "logFileStorePath": "/opt/rocketmq/proxy/logs", "metricsExporterType": "DISABLE", "metricsCollectIntervalSeconds": 60, "enableTls": false, "traceTopicEnable": false, "traceTopicName": "RMQ_SYS_TRACE_TOPIC" } |
#在broker-s1上
|
[root@broker-s1 ~]# vim /opt/rocketmq/proxy/proxy-s1.json |
|
{ "namesrvAddr": "10.9.254.21:9876;10.9.254.22:9876", "bindAddress": "0.0.0.0", "listenPort": 8080, "proxyMode": "CLUSTER", "rmqProxyServerAddress": "10.9.254.39:8080", "heartbeatIntervalSeconds": 10, "routeSyncIntervalSeconds": 10, "aclEnable": false, "logLevel": "INFO", "logMaxFiles": 10, "logSingleFileMaxSize": 104857600, "logFileStorePath": "/opt/rocketmq/proxy/logs", "metricsExporterType": "DISABLE", "metricsCollectIntervalSeconds": 60, "enableTls": false, "traceTopicEnable": false, "traceTopicName": "RMQ_SYS_TRACE_TOPIC" } |
# 在broker-s2上
|
[root@broker-s2 ~]# vim /opt/rocketmq/proxy/proxy-s2.json |
|
{ "namesrvAddr": "10.9.254.21:9876;10.9.254.22:9876", "bindAddress": "0.0.0.0", "listenPort": 8080, "proxyMode": "CLUSTER", "rmqProxyServerAddress": "10.9.254.40:8080", "heartbeatIntervalSeconds": 10, "routeSyncIntervalSeconds": 10, "aclEnable": false, "logLevel": "INFO", "logMaxFiles": 10, "logSingleFileMaxSize": 104857600, "logFileStorePath": "/opt/rocketmq/proxy/logs", "metricsExporterType": "DISABLE", "metricsCollectIntervalSeconds": 60, "enableTls": false, "traceTopicEnable": false, "traceTopicName": "RMQ_SYS_TRACE_TOPIC" } |
5.3 Proxy 启动脚本
#所有broker节点
|
[root@broker-m1 ~]# vim /opt/rocketmq/bin/start-proxy.sh |
|
#!/bin/bash # 获取本机IP LOCAL_IP=$(hostname -I | awk '{print $1}') # RocketMQ Home export ROCKETMQ_HOME=/opt/rocketmq # JVM配置 export JAVA_OPT="${JAVA_OPT} -server -Xms1g -Xmx1g -Xmn512m" export JAVA_OPT="${JAVA_OPT} -XX:MetaspaceSize=128m -XX:MaxMetaspaceSize=320m" #export JAVA_OPT="${JAVA_OPT} -XX:+UseConcMarkSweepGC -XX:+UseCMSCompactAtFullCollection" export JAVA_OPT="${JAVA_OPT} -XX:CMSInitiatingOccupancyFraction=70 -XX:+CMSParallelRemarkEnabled" export JAVA_OPT="${JAVA_OPT} -XX:SoftRefLRUPolicyMSPerMB=0 -XX:+CMSClassUnloadingEnabled" export JAVA_OPT="${JAVA_OPT} -XX:SurvivorRatio=8 -XX:+DisableExplicitGC" #export JAVA_OPT="${JAVA_OPT} -verbose:gc -Xloggc:${ROCKETMQ_HOME}/logs/proxy_gc.log" #export JAVA_OPT="${JAVA_OPT} -XX:+PrintGCDetails -XX:+PrintGCDateStamps" export JAVA_OPT="${JAVA_OPT} -Drocketmq.home.dir=${ROCKETMQ_HOME}" # 根据主机名选择对应的Proxy配置 HOSTNAME=$(hostname) case $HOSTNAME in "broker-m1") CONF_FILE="/opt/rocketmq/proxy/proxy-m1.json" ;; "broker-m2") CONF_FILE="/opt/rocketmq/proxy/proxy-m2.json" ;; "broker-s1") CONF_FILE="/opt/rocketmq/proxy/proxy-s1.json" ;; "broker-s2") CONF_FILE="/opt/rocketmq/proxy/proxy-s2.json" ;; *) echo "Unknown hostname: $HOSTNAME" exit 1 ;; esac echo "Starting Proxy on $HOSTNAME with config: $CONF_FILE" # 启动Proxy nohup sh ${ROCKETMQ_HOME}/bin/mqproxy -pc $CONF_FILE > ${ROCKETMQ_HOME}/logs/proxy.log 2>&1 & echo "Proxy starting…" sleep 3 tail -n 50 ${ROCKETMQ_HOME}/logs/proxy.log |
6.启动集群
6.1 Broker启动脚本
#所有broker节点
|
[root@broker-m1 ~]# vim /opt/rocketmq/bin/start-broker.sh |
|
#!/bin/bash # RocketMQ Home export ROCKETMQ_HOME=/opt/rocketmq # JVM配置 export JAVA_OPT="${JAVA_OPT} -server -Xms4g -Xmx4g -Xmn2g" export JAVA_OPT="${JAVA_OPT} -XX:MetaspaceSize=128m -XX:MaxMetaspaceSize=320m" #export JAVA_OPT="${JAVA_OPT} -XX:+UseConcMarkSweepGC -XX:+UseCMSCompactAtFullCollection" export JAVA_OPT="${JAVA_OPT} -XX:CMSInitiatingOccupancyFraction=70 -XX:+CMSParallelRemarkEnabled" export JAVA_OPT="${JAVA_OPT} -XX:SoftRefLRUPolicyMSPerMB=0 -XX:+CMSClassUnloadingEnabled" export JAVA_OPT="${JAVA_OPT} -XX:SurvivorRatio=8 -XX:+DisableExplicitGC" #export JAVA_OPT="${JAVA_OPT} -verbose:gc -Xloggc:${ROCKETMQ_HOME}/logs/broker_gc.log" #export JAVA_OPT="${JAVA_OPT} -XX:+PrintGCDetails -XX:+PrintGCDateStamps" export JAVA_OPT="${JAVA_OPT} -Drocketmq.home.dir=${ROCKETMQ_HOME}" # 根据主机名选择对应的Broker配置 HOSTNAME=$(hostname) case $HOSTNAME in "broker-m1") CONF_FILE="/opt/rocketmq/conf/2m-2s-async/broker-m1.properties" ;; "broker-m2") CONF_FILE="/opt/rocketmq/conf/2m-2s-async/broker-m2.properties" ;; "broker-s1") CONF_FILE="/opt/rocketmq/conf/2m-2s-async/broker-s1.properties" ;; "broker-s2") CONF_FILE="/opt/rocketmq/conf/2m-2s-async/broker-s2.properties" ;; *) echo "Unknown hostname: $HOSTNAME" exit 1 ;; esac echo "Starting Broker on $HOSTNAME with config: $CONF_FILE" # 启动Broker nohup sh ${ROCKETMQ_HOME}/bin/mqbroker -c $CONF_FILE > ${ROCKETMQ_HOME}/logs/broker.log 2>&1 & echo "Broker starting…" sleep 5 tail -n 50 ${ROCKETMQ_HOME}/logs/broker.log |
6.2 启动顺序
# 1. 启动NameServer(在namesrv1和namesrv2节点执行)
|
[root@namesrv1 ~]# chmod +x /opt/rocketmq/bin/start-namesrv.sh [root@namesrv1 ~]# /opt/rocketmq/bin/start-namesrv.sh |
|
NameServer starting… load config properties file OK, /opt/rocketmq/conf/namesrv.properties The Name Server boot success. serializeType=JSON, address 0.0.0.0:9876 |
# 2. 启动Broker(在所有Broker节点执行)
|
[root@broker-m1 ~]# chmod +x /opt/rocketmq/bin/start-broker.sh [root@broker-m1 ~]# /opt/rocketmq/bin/start-broker.sh |
|
Starting Broker on broker-m2 with config: /opt/rocketmq/conf/2m-2s-async/broker-m2.properties Broker starting… |
# 3. 启动Proxy(在所有Broker节点执行)
|
[root@broker-m1 ~]# chmod +x /opt/rocketmq/bin/start-proxy.sh |
|
Starting Proxy on broker-m1 with config: /opt/rocketmq/proxy/proxy-m1.conf Proxy starting… |
6.3 验证集群状态
# 检查NameServer(2个nameserver节点执行)
|
[root@namesrv1 ~]# ps -ef | grep namesrv |
|
root 1350 1 0 09:21 ? 00:00:00 sh /opt/rocketmq/bin/mqnamesrv -c /opt/rocketmq/conf/namesrv.properties root 1352 1350 0 09:21 ? 00:00:00 sh /opt/rocketmq/bin/runserver.sh -Drmq.logback.configurationFile=/opt/rocketmq/conf/rmq.namesrv.logback.xml org.apache.rocketmq.namesrv.NamesrvStartup -c /opt/rocketmq/conf/namesrv.properties root 1383 1352 1 09:21 ? 00:00:16 /usr/local/java/bin/java -server -Xms1g -Xmx1g -Xmn512m -XX:MetaspaceSize=128m -XX:MaxMetaspaceSize=320m -XX:CMSInitiatingOccupancyFraction=70 -XX:+CMSParallelRemarkEnabled -XX:SoftRefLRUPolicyMSPerMB=0 -XX:+CMSClassUnloadingEnabled -XX:SurvivorRatio=8 -XX:+DisableExplicitGC -Drocketmq.home.dir=/opt/rocketmq -Drocketmq.namesrv.addr=192.168.1.10:9876;192.168.1.11:9876 -server -Xms4g -Xmx4g -XX:MetaspaceSize=128m -XX:MaxMetaspaceSize=320m -XX:+UseG1GC -XX:G1HeapRegionSize=16m -XX:G1ReservePercent=25 -XX:InitiatingHeapOccupancyPercent=30 -XX:SoftRefLRUPolicyMSPerMB=0 -Xlog:gc*:file=/dev/shm/rmq_srv_gc_%p_%t.log:time,tags:filecount=5,filesize=30M -XX:-OmitStackTraceInFastThrow -XX:-UseLargePages -cp .:/opt/rocketmq/bin/../conf:/opt/rocketmq/bin/../lib/*:/usr/local/java/lib: -Drmq.logback.configurationFile=/opt/rocketmq/conf/rmq.namesrv.logback.xml org.apache.rocketmq.namesrv.NamesrvStartup -c /opt/rocketmq/conf/namesrv.properties root 1530 1470 0 09:41 pts/0 00:00:00 grep –color=auto namesrv |
|
[root@namesrv1 ~]# netstat -ln | grep 9876 |
|
tcp6 0 0 :::9876 :::* LISTEN |
|
[root@namesrv1 ~]# jps |
|
1383 NamesrvStartup 1533 Jps |
# 检查broker(4个broker节点执行)
|
[root@broker-m1 ~]# ps -ef | grep broker |
|
root 1317 1 0 09:18 pts/0 00:00:00 sh /opt/rocketmq/bin/mqbroker -c /opt/rocketmq/conf/2m-2s-async/broker-m1.properties root 1319 1317 0 09:18 pts/0 00:00:00 sh /opt/rocketmq/bin/runbroker.sh -Drmq.logback.configurationFile=/opt/rocketmq/conf/rmq.broker.logback.xml org.apache.rocketmq.broker.BrokerStartup -c /opt/rocketmq/conf/2m-2s-async/broker-m1.properties root 1353 1319 26 09:18 pts/0 00:06:37 /usr/local/java/bin/java -server -Xms4g -Xmx4g -Xmn2g -XX:MetaspaceSize=128m -XX:MaxMetaspaceSize=320m -XX:CMSInitiatingOccupancyFraction=70 -XX:+CMSParallelRemarkEnabled -XX:SoftRefLRUPolicyMSPerMB=0 -XX:+CMSClassUnloadingEnabled -XX:SurvivorRatio=8 -XX:+DisableExplicitGC -Drocketmq.home.dir=/opt/rocketmq -server -Xms8g -Xmx8g -XX:+UseG1GC -XX:G1HeapRegionSize=16m -XX:G1ReservePercent=25 -XX:InitiatingHeapOccupancyPercent=30 -XX:SoftRefLRUPolicyMSPerMB=0 -XX:+UseG1GC -XX:G1HeapRegionSize=16m -XX:G1ReservePercent=25 -XX:InitiatingHeapOccupancyPercent=30 -XX:SoftRefLRUPolicyMSPerMB=0 -Xlog:gc*:file=/dev/shm/rmq_srv_gc_%p_%t.log:time,tags:filecount=5,filesize=30M -XX:-OmitStackTraceInFastThrow -XX:+AlwaysPreTouch -XX:MaxDirectMemorySize=15g -XX:-UseLargePages -XX:-UseBiasedLocking -cp .:/opt/rocketmq/bin/../conf:/opt/rocketmq/bin/../lib/*:/usr/local/java/lib: -Drmq.logback.configurationFile=/opt/rocketmq/conf/rmq.broker.logback.xml org.apache.rocketmq.broker.BrokerStartup -c /opt/rocketmq/conf/2m-2s-async/broker-m1.properties root 1733 1091 0 09:43 pts/0 00:00:00 grep –color=auto broker |
|
[root@broker-m1 ~]# netstat -ln | grep 10911 |
|
tcp6 0 0 :::10911 :::* LISTEN |
|
[root@broker-m1 ~]# netstat -ln | grep 10912 |
|
tcp6 0 0 :::10912 :::* LISTEN |
|
[root@broker-m1 ~]# jps |
|
1353 BrokerStartup 1738 Jps |
# 检查proxy(4个broker节点执行)
|
[root@broker-m1 ~]# ps -ef | grep proxy |
|
root 3092 1 0 11:16 pts/0 00:00:00 sh /opt/rocketmq/bin/mqproxy -pc /opt/rocketmq/proxy/proxy-m1.json root 3094 3092 0 11:16 pts/0 00:00:00 sh /opt/rocketmq/bin/runserver.sh -Drmq.logback.configurationFile=/opt/rocketmq/conf/rmq.proxy.logback.xml org.apache.rocketmq.proxy.ProxyStartup -pc /opt/rocketmq/proxy/proxy-m1.json root 3125 3094 33 11:16 pts/0 00:00:17 /usr/local/java/bin/java -server -Xms1g -Xmx1g -Xmn512m -XX:MetaspaceSize=128m -XX:MaxMetaspaceSize=320m -XX:CMSInitiatingOccupancyFraction=70 -XX:+CMSParallelRemarkEnabled -XX:SoftRefLRUPolicyMSPerMB=0 -XX:+CMSClassUnloadingEnabled -XX:SurvivorRatio=8 -XX:+DisableExplicitGC -Drocketmq.home.dir=/opt/rocketmq -server -Xms4g -Xmx4g -XX:MetaspaceSize=128m -XX:MaxMetaspaceSize=320m -XX:+UseG1GC -XX:G1HeapRegionSize=16m -XX:G1ReservePercent=25 -XX:InitiatingHeapOccupancyPercent=30 -XX:SoftRefLRUPolicyMSPerMB=0 -Xlog:gc*:file=/dev/shm/rmq_srv_gc_%p_%t.log:time,tags:filecount=5,filesize=30M -XX:-OmitStackTraceInFastThrow -XX:-UseLargePages -cp .:/opt/rocketmq/bin/../conf:/opt/rocketmq/bin/../lib/*:/usr/local/java/lib: -Drmq.logback.configurationFile=/opt/rocketmq/conf/rmq.proxy.logback.xml org.apache.rocketmq.proxy.ProxyStartup -pc /opt/rocketmq/proxy/proxy-m1.json root 3271 1091 0 11:17 pts/0 00:00:00 grep –color=auto proxy |
|
[root@broker-m1 ~]# netstat -ln | grep 8080 |
|
tcp6 0 0 :::8080 :::* LISTEN |
|
[root@broker-m1 ~]# jps |
|
3125 ProxyStartup 1353 BrokerStartup 3275 Jps |
# 使用管理命令检查集群
|
[root@namesrv1 ~]# cd /opt/rocketmq/bin [root@namesrv1 /opt/rocketmq/bin]# export NAMESRV_ADDR="10.9.254.21:9876;10.9.254.22:9876" [root@namesrv1 /opt/rocketmq/bin]# export JAVA_HOME=/usr/local/java [root@namesrv1 /opt/rocketmq/bin]# ./mqadmin clusterList -n 10.9.254.21:9876 |
|
#Cluster Name #Broker Name #BID #Addr #Version #InTPS(LOAD) #OutTPS(LOAD) #Timer(Progress) #PCWait(ms) #Hour #SPACE #ACTIVATED DefaultCluster broker-a 0 10.9.254.37:10911 V5_3_0 0.00(0,0ms) 0.00(0,0ms) 0-0(0.0w, 0.0, 0.0) 0 489581.12 0.0600 true DefaultCluster broker-a 1 10.9.254.39:11911 V5_3_0 0.00(0,0ms) 0.00(0,0ms) 1-0(0.0w, 0.0, 0.0) 0 489581.12 0.0700 false DefaultCluster broker-b 0 10.9.254.38:10911 V5_3_0 0.00(0,0ms) 0.00(0,0ms) 0-0(0.0w, 0.0, 0.0) 0 489581.12 0.0700 true DefaultCluster broker-b 1 10.9.254.40:11911 V5_3_0 0.00(0,0ms) 0.00(0,0ms) 1-0(0.0w, 0.0, 0.0) 0 489581.12 0.0700 false |
# 查看Broker状态
|
[root@namesrv1 /opt/rocketmq/bin]# ./mqadmin brokerStatus -n 10.9.254.21:9876 -b 10.9.254.37:10911 |
|
EndTransactionQueueSize : 0 EndTransactionThreadPoolQueueCapacity: 100000 bootTimestamp : 1762478492247 brokerActive : true brokerVersion : 473 brokerVersionDesc : V5_3_0 commitLogDirCapacity : Total : 83.0 GiB, Free : 78.6 GiB. commitLogDiskRatio : 0.06 commitLogDiskRatio_/opt/rocketmq/store/broker-m1/commitlog: 0.06 commitLogMaxOffset : 0 commitLogMinOffset : -1 consumeQueueDiskRatio : 0.06 dispatchBehindBytes : 0 dispatchMaxBuffer : 0 earliestMessageTimeStamp : -1 getFoundTps : 0.0 0.0 0.0 getMessageEntireTimeMax : 292 getMissTps : 47.695230476952304 41.69374593810928 40.461217326561545 getTotalTps : 47.695230476952304 41.69374593810928 40.461217326561545 getTransferredTps : 0.0 0.0 0.0 litePullThreadPoolQueueCapacity : 100000 litePullThreadPoolQueueHeadWaitTimeMills: 0 litePullThreadPoolQueueSize : 0 msgGetTotalTodayMorning : 0 msgGetTotalTodayNow : 0 msgGetTotalYesterdayMorning : 0 msgPutTotalTodayMorning : 0 msgPutTotalTodayNow : 0 msgPutTotalYesterdayMorning : 0 pageCacheLockTimeMills : 0 pullThreadPoolQueueCapacity : 100000 pullThreadPoolQueueHeadWaitTimeMills: 0 pullThreadPoolQueueSize : 0 putLatency99 : 0.00 putLatency999 : 0.00 putMessageAverageSize : 0.0 putMessageDistributeTime : [ putMessageEntireTimeMax : 0 putMessageFailedTimes : 0 putMessageSizeTotal : 0 putMessageTimesTotal : 1 putTps : 0.0 0.0 0.0 queryThreadPoolQueueCapacity : 20000 queryThreadPoolQueueHeadWaitTimeMills: 0 queryThreadPoolQueueSize : 0 remainHowManyDataToFlush : 0 B remainTransientStoreBufferNumbs : 2147483647 runtime : [ 0 days, 3 hours, 48 minutes, 49 seconds ] sendThreadPoolQueueCapacity : 10000 sendThreadPoolQueueHeadWaitTimeMills: 0 sendThreadPoolQueueSize : 0 startAcceptSendRequestTimeStamp : 0 timerCongestNum : 0 timerDequeueTps : 0.0 timerEnqueueTps : 0.0 timerOffsetBehind : 0 timerReadBehind : 0 |
# 查看Topic列表
|
[root@namesrv1 /opt/rocketmq/bin]# ./mqadmin topicList -n 10.9.254.21:9876 |
|
RMQ_SYS_TRANS_HALF_TOPIC BenchmarkTest OFFSET_MOVED_EVENT TBW102 rmq_sys_REVIVE_LOG_DefaultCluster SELF_TEST_TOPIC DefaultHeartBeatSyncerTopic DefaultCluster %RETRY%CID_DefaultHeartBeatSyncerTopic SCHEDULE_TOPIC_XXXX DefaultCluster_REPLY_TOPIC rmq_sys_SYNC_BROKER_MEMBER_broker-b rmq_sys_SYNC_BROKER_MEMBER_broker-a RMQ_SYS_TRANS_OP_HALF_TOPIC broker-b broker-a |
7. 控制台部署
https://rocketmq.apache.org/download/
7.1安装控制台
# 在console节点执行
|
[root@console /usr/local/rocketmq-console]# ll |
|
-rw-r–r– 1 root root 29608541 Nov 8 2025 rocketmq-console-ng-1.0.0.jar |
|
[root@console /usr/local/rocketmq-console]# nohup java -jar rocketmq-console-ng-1.0.0.jar –server.port=8080 '–rocketmq.config.namesrvAddr=10.9.254.21:9876;10.9.254.22:9876;' & |
|
[1] 57149 |
|
[root@console /usr/local/rocketmq-console]# netstat -ntlp |
|
Active Internet connections (only servers) Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 10006/sshd tcp6 0 0 :::8080 :::* LISTEN 57149/java tcp6 0 0 :::22 :::* LISTEN 10006/sshd |
7.2 启动控制台
http://10.9.254.20:8080/

8.系统服务配置
8.1创建Systemd服务
# NameServer服务 (在NameServer节点)
|
[root@namesrv1 ~]# vim /etc/systemd/system/rocketmq-namesrv.service |
|
[Unit] Description=RocketMQ NameServer After=network.target [Service] Type=forking User=root Environment=ROCKETMQ_HOME=/opt/rocketmq Environment=JAVA_HOME=/usr/local/java ExecStart=/opt/rocketmq/bin/start-namesrv.sh ExecStop=/bin/pkill -f namesrv Restart=always [Install] WantedBy=multi-user.target |
# Broker服务 (在Broker节点)
|
[root@broker-m1 ~]# vim /etc/systemd/system/rocketmq-broker.service |
|
[Unit] Description=RocketMQ Broker After=network.target rocketmq-namesrv.service [Service] Type=forking User=root Environment=ROCKETMQ_HOME=/opt/rocketmq Environment=JAVA_HOME=/usr/local/java ExecStart=/opt/rocketmq/bin/start-broker.sh ExecStop=/bin/pkill -f broker Restart=always [Install] WantedBy=multi-user.target |
# Proxy服务 (在Broker节点)
|
[root@broker-m1 ~]# vim /etc/systemd/system/rocketmq-proxy.service |
|
[Unit] Description=RocketMQ Proxy After=network.target rocketmq-broker.service [Service] Type=forking User=root Environment=ROCKETMQ_HOME=/opt/rocketmq Environment=JAVA_HOME=/usr/local/java ExecStart=/opt/rocketmq/bin/start-proxy.sh ExecStop=/bin/pkill -f proxy Restart=always [Install] WantedBy=multi-user.target |
# 重新加载systemd
|
[root@broker-m1 ~]# systemctl daemon-reload [root@broker-m1 ~]# systemctl enable rocketmq-broker |
|
Created symlink /etc/systemd/system/multi-user.target.wants/rocketmq-broker.service → /etc/systemd/system/rocketmq-broker.service. |
|
[root@broker-m1 ~]# systemctl enable rocketmq-proxy |
|
Created symlink /etc/systemd/system/multi-user.target.wants/rocketmq-proxy.service → /etc/systemd/system/rocketmq-proxy.service. |
|
[root@namesrv1 ~]# systemctl daemon-reload [root@namesrv1 ~]# systemctl enable rocketmq-namesrv |
|
Created symlink /etc/systemd/system/multi-user.target.wants/rocketmq-namesrv.service → /etc/systemd/system/rocketmq-namesrv.service. |
9.集群验证和测试
9.1功能测试
# 生产消息测试
|
[root@namesrv1 ~]# cd /opt/rocketmq/bin [root@namesrv1 /opt/rocketmq/bin]# |
# 创建测试Topic
|
[root@namesrv1 /opt/rocketmq/bin]# ./mqadmin updateTopic -n 10.9.254.21:9876 -c DefaultCluster -t TestTopic |
|
create topic to 10.9.254.38:10911 success. create topic to 10.9.254.37:10911 success. TopicConfig [topicName=TestTopic, readQueueNums=8, writeQueueNums=8, perm=RW-, topicFilterType=SINGLE_TAG, topicSysFlag=0, order=false, attributes={}] |
# 生产消息
|
[root@namesrv1 /opt/rocketmq/bin]# ./mqadmin sendMessage -n 10.9.254.21:9876 -t TestTopic -p "Hello RocketMQ Cluster" |
|
#Broker Name #QID #Send Result #MsgId broker-a 0 SEND_OK 0A09FE150B864B85612C22F516D50000 |
# 消费消息
|
[root@namesrv1 /opt/rocketmq/bin]# ./mqadmin consumeMessage -n 10.9.254.21:9876 -t TestTopic -g TestGroup |
|
MessageQueue [topic=TestTopic, brokerName=broker-b, queueId=2] print msg finished. status=NO_NEW_MSG, offset=0 MessageQueue [topic=TestTopic, brokerName=broker-a, queueId=2] print msg finished. status=NO_NEW_MSG, offset=0 MessageQueue [topic=TestTopic, brokerName=broker-b, queueId=1] print msg finished. status=NO_NEW_MSG, offset=0 MessageQueue [topic=TestTopic, brokerName=broker-a, queueId=3] print msg finished. status=NO_NEW_MSG, offset=0 MessageQueue [topic=TestTopic, brokerName=broker-a, queueId=4] print msg finished. status=NO_NEW_MSG, offset=0 MessageQueue [topic=TestTopic, brokerName=broker-a, queueId=5] print msg finished. status=NO_NEW_MSG, offset=0 MessageQueue [topic=TestTopic, brokerName=broker-a, queueId=6] print msg finished. status=NO_NEW_MSG, offset=0 MessageQueue [topic=TestTopic, brokerName=broker-a, queueId=7] print msg finished. status=NO_NEW_MSG, offset=0 MessageQueue [topic=TestTopic, brokerName=broker-b, queueId=7] print msg finished. status=NO_NEW_MSG, offset=0 MessageQueue [topic=TestTopic, brokerName=broker-b, queueId=6] print msg finished. status=NO_NEW_MSG, offset=0 MessageQueue [topic=TestTopic, brokerName=broker-b, queueId=0] print msg finished. status=NO_NEW_MSG, offset=0 MessageQueue [topic=TestTopic, brokerName=broker-b, queueId=5] print msg finished. status=NO_NEW_MSG, offset=0 MessageQueue [topic=TestTopic, brokerName=broker-b, queueId=4] print msg finished. status=NO_NEW_MSG, offset=0 Consume ok MSGID: 0A09FE150B864B85612C22F516D50000 MessageExt [brokerName=broker-a, queueId=0, storeSize=236, queueOffset=0, sysFlag=0, bornTimestamp=1762512887511, bornHost=/10.9.254.21:54672, storeTimestamp=1762512887625, storeHost=/10.9.254.37:10911, msgId=0A09FE2500002A9F0000000000000000, commitLogOffset=0, bodyCRC=58910814, reconsumeTimes=0, preparedTransactionOffset=0, toString()=Message{topic='TestTopic', flag=0, properties={MSG_REGION=DefaultRegion, UNIQ_KEY=0A09FE150B864B85612C22F516D50000, CLUSTER=DefaultCluster, MIN_OFFSET=0, WAIT=true, TRACE_ON=true, MAX_OFFSET=1}, body=[72, 101, 108, 108, 111, 32, 82, 111, 99, 107, 101, 116, 77, 81, 32, 67, 108, 117, 115, 116, 101, 114], transactionId='null'}] BODY: Hello RocketMQ Cluster MessageQueue [topic=TestTopic, brokerName=broker-a, queueId=0] print msg finished. status=NO_NEW_MSG, offset=1 MessageQueue [topic=TestTopic, brokerName=broker-b, queueId=3] print msg finished. status=NO_NEW_MSG, offset=0 MessageQueue [topic=TestTopic, brokerName=broker-a, queueId=1] print msg finished. status=NO_NEW_MSG, offset=0 |

9.2性能测试
# 生产者性能测试
|
[root@namesrv1 /opt/rocketmq/bin]# sh tools.sh org.apache.rocketmq.example.benchmark.Producer -t TestTopic -n 10.9.254.21:9876 -w 16 -s 1024 -c 100000 |
|
topic: TestTopic, threadCount: 16, messageSize: 1024, keyEnable: false, propertySize: 0, tagCount: 0, traceEnable: false, aclEnable: false, messageQuantity: 0, delayEnable: false, delayLevel: 1, asyncEnable: false compressEnable: false, reportInterval: 10000 Current Time: 2025-11-07 19:12:37,843 | Send TPS: 7027 | Max RT(ms): 585 | Average RT(ms): 2.367 | Send Failed: 0 | Response Failed: 0 Current Time: 2025-11-07 19:12:47,843 | Send TPS: 7035 | Max RT(ms): 859 | Average RT(ms): 2.263 | Send Failed: 0 | Response Failed: 0 Current Time: 2025-11-07 19:12:57,843 | Send TPS: 7919 | Max RT(ms): 884 | Average RT(ms): 2.040 | Send Failed: 0 | Response Failed: 0 Current Time: 2025-11-07 19:13:07,843 | Send TPS: 4908 | Max RT(ms): 1538 | Average RT(ms): 3.235 | Send Failed: 0 | Response Failed: 0 Current Time: 2025-11-07 19:13:17,843 | Send TPS: 8727 | Max RT(ms): 1538 | Average RT(ms): 1.832 | Send Failed: 0 | Response Failed: 0 Current Time: 2025-11-07 19:13:27,843 | Send TPS: 9075 | Max RT(ms): 1538 | Average RT(ms): 1.800 | Send Failed: 0 | Response Failed: 0 Current Time: 2025-11-07 19:13:37,843 | Send TPS: 6412 | Max RT(ms): 1538 | Average RT(ms): 2.495 | Send Failed: 0 | Response Failed: 0 Current Time: 2025-11-07 19:13:47,843 | Send TPS: 3063 | Max RT(ms): 1906 | Average RT(ms): 5.202 | Send Failed: 0 | Response Failed: 0 Current Time: 2025-11-07 19:13:57,843 | Send TPS: 5636 | Max RT(ms): 1906 | Average RT(ms): 2.808 | Send Failed: 0 | Response Failed: 0 Current Time: 2025-11-07 19:14:07,843 | Send TPS: 6680 | Max RT(ms): 1906 | Average RT(ms): 2.397 | Send Failed: 0 | Response Failed: 0 Current Time: 2025-11-07 19:14:17,843 | Send TPS: 4756 | Max RT(ms): 1906 | Average RT(ms): 3.045 | Send Failed: 0 | Response Failed: 0 Current Time: 2025-11-07 19:14:27,843 | Send TPS: 4643 | Max RT(ms): 2005 | Average RT(ms): 4.136 | Send Failed: 0 | Response Failed: 0 Current Time: 2025-11-07 19:14:37,843 | Send TPS: 4926 | Max RT(ms): 2005 | Average RT(ms): 3.270 | Send Failed: 0 | Response Failed: 0 Current Time: 2025-11-07 19:14:47,843 | Send TPS: 6090 | Max RT(ms): 2005 | Average RT(ms): 2.627 | Send Failed: 0 | Response Failed: 0 Current Time: 2025-11-07 19:14:57,843 | Send TPS: 2751 | Max RT(ms): 2005 | Average RT(ms): 4.882 | Send Failed: 0 | Response Failed: 0 Current Time: 2025-11-07 19:15:07,843 | Send TPS: 6576 | Max RT(ms): 2005 | Average RT(ms): 2.416 | Send Failed: 0 | Response Failed: 0 Current Time: 2025-11-07 19:15:17,843 | Send TPS: 1466 | Max RT(ms): 2436 | Average RT(ms): 11.669 | Send Failed: 0 | Response Failed: 0 Current Time: 2025-11-07 19:15:27,843 | Send TPS: 5640 | Max RT(ms): 2436 | Average RT(ms): 2.837 | Send Failed: 0 | Response Failed: 0 Current Time: 2025-11-07 19:15:37,843 | Send TPS: 4756 | Max RT(ms): 2436 | Average RT(ms): 3.364 | Send Failed: 0 | Response Failed: 0 Current Time: 2025-11-07 19:15:47,843 | Send TPS: 4349 | Max RT(ms): 2436 | Average RT(ms): 3.601 | Send Failed: 0 | Response Failed: 0 Current Time: 2025-11-07 19:15:57,843 | Send TPS: 3169 | Max RT(ms): 2436 | Average RT(ms): 5.110 | Send Failed: 0 | Response Failed: 0 |

|
[root@namesrv1 /opt/rocketmq/bin]# sh tools.sh org.apache.rocketmq.example.benchmark.Consumer -t TestTopic -n 10.9.254.21:9876 -g TestGroup -w 16 |
|
Consumer Started. Current Time: 2025-11-07 19:28:43,912 | Consume TPS: 16465 | AVG(B2C) RT(ms): 960284.352 | AVG(S2C) RT(ms): 960284.070 | MAX(B2C) RT(ms): 2029726 | MAX(S2C) RT(ms): 2029612 | Consume Fail: 0 |

10. 运维监控
10.1健康检查脚本
|
[root@namesrv1 /opt/rocketmq/bin]# vim /opt/rocketmq/bin/health-check.sh |
|
#!/bin/bash echo "=== RocketMQ Cluster Health Check ===" echo "Time: $(date)" # 检查NameServer echo -e "\\nNameServer Status:" for ns in 10.9.254.21 10.9.254.22; do if nc -z $ns 9876; then echo " $ns:9876 – ✓ RUNNING" else echo " $ns:9876 – ✗ STOPPED" fi done # 检查Broker echo -e "\\nBroker Status:" ./mqadmin clusterList -n 10.9.254.21:9876 # 检查磁盘空间 echo -e "\\nDisk Usage:" df -h /opt/rocketmq/store # 检查内存使用 echo -e "\\nMemory Usage:" free -h echo -e "\\nHealth check completed." |
|
[root@namesrv1 /opt/rocketmq/bin]# chmod +x /opt/rocketmq/bin/health-check.sh [root@namesrv1 /opt/rocketmq/bin]# ./health-check.sh |
|
=== RocketMQ Cluster Health Check === Time: Fri Nov 7 19:35:29 CST 2025 NameServer Status: 10.9.254.21:9876 – ✓ RUNNING 10.9.254.22:9876 – ✓ RUNNING Broker Status: #Cluster Name #Broker Name #BID #Addr #Version #InTPS(LOAD) #OutTPS(LOAD) #Timer(Progress) #PCWait(ms) #Hour #SPACE #ACTIVATED DefaultCluster broker-a 0 10.9.254.37:10911 V5_3_0 0.00(0,0ms) 0.00(0,0ms) 0-0(0.0w, 0.0, 0.0) 0 0.68 0.0800 true DefaultCluster broker-a 1 10.9.254.39:11911 V5_3_0 0.00(0,0ms) 0.00(0,0ms) 1-0(0.0w, 0.0, 0.0) 0 0.68 0.0900 false DefaultCluster broker-b 0 10.9.254.38:10911 V5_3_0 0.00(0,0ms) 0.00(0,0ms) 1-0(0.0w, 0.0, 0.0) 0 0.38 0.0900 true DefaultCluster broker-b 1 10.9.254.40:11911 V5_3_0 0.00(0,0ms) 0.00(0,0ms) 2-0(0.0w, 0.0, 0.0) 0 0.38 0.0900 false Disk Usage: Filesystem Size Used Avail Use% Mounted on /dev/mapper/rl-root 83G 5.2G 78G 7% / Memory Usage: total used free shared buff/cache available Mem: 7.8Gi 675Mi 6.5Gi 16Mi 588Mi 6.9Gi Swap: 15Gi 0B 15Gi Health check completed. |
10.2 日志清理脚本
|
[root@namesrv1 /opt/rocketmq/bin]# vim /opt/rocketmq/bin/log-cleanup.sh |
|
#!/bin/bash # 清理7天前的日志 find /opt/rocketmq/logs -name "*.log.*" -mtime +7 -exec rm -f {} \\; # 清理空日志文件 find /opt/rocketmq/logs -name "*.log" -size 0 -exec rm -f {} \\; # 清理30天前的GC日志 find /opt/rocketmq/logs -name "*_gc.log.*" -mtime +30 -exec rm -f {} \\; echo "Log cleanup completed at $(date)" |
|
[root@namesrv1 /opt/rocketmq/bin]# chmod +x /opt/rocketmq/bin/log-cleanup.sh [root@namesrv1 /opt/rocketmq/bin]# ./log-cleanup.sh |
|
Log cleanup completed at Fri Nov 7 19:37:53 CST 2025 |
