欢迎光临
我们一直在努力

rocketmq5.3-在rockylinux8.10上部署双主双从异步复制集群

目录

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

赞(0)
未经允许不得转载:171主机测评 » rocketmq5.3-在rockylinux8.10上部署双主双从异步复制集群
分享到: 更多 (0)

评论 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址