rocketmq5.3-在rockylinux8.10上部署双主双从异步复制集群
目录
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 启动控制台

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)