RocketMQ4.7.1集群搭建
rocketMQ 4.7.1 安装过程(2主2从同步)
安装环境
CentOS 7.5+
JDK 1.8+
服务器规划
机器A broker-a(Master) + NameServer
机器B broker-a(Slaver) + NameServer
机器C broker-b(Master) + NameServer
机器D broker-b(Slaver) + NameServer
步骤
如下操作如果没有特殊说明分别在4台机器上都进⾏相同操作
1.在每台机器安装JDK环境
在4台机器上分别安装jdk1.8,配置基础环境
- 将jdk-8u161-linux-x64.tar.gz安装包上传至服务器,下载地址:
https://www.oracle.com/java/technologies/javase/javase-jdk8-downloads.html
- 解压(如果权限不足需要root权限)
sudo tar zxvf jdk-8u161-linux-x64.tar.gz -C /opt/jdk1.8.0_161
- 配置变量
1)单用户变量
cd
vim .bashrc
export JAVA_HOME=/opt/jdk1.8.0_161/
export CLASSPATH=.:$CLASSPATH:$JAVA_HOME/lib:$JRE_HOME/lib
export PATH=$PATH:$JAVA_HOME/bin:$JRE_HOME/bin
source .bashrc
2)全局变量
sudo vim /etc/profile
export JAVA_HOME=/opt/jdk1.8.0_161/
export CLASSPATH=.:$CLASSPATH:$JAVA_HOME/lib:$JRE_HOME/lib
export PATH=$PATH:$JAVA_HOME/bin:$JRE_HOME/bin
sudo source /etc/profile
openjdk环境变量配置:
export JAVA_HOME=/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.312.b07-2.el8_5.x86_64
export JRE_HOME=$JAVA_HOME/jre
export PATH=$PATH:$JAVA_HOME/bin:$JRE_HOME/bin
export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar:$JRE_HOME/lib
2.root⽤户下创建应⽤⽤户
在每台机器上创建运⾏rocketMQ的⽤户rmq
useradd rmq
passwd rmq
密码:umpay2010
3.使⽤应⽤⽤户进⾏操作rmq
后续所有操作(除配置环境变量外)使⽤新创建的⽤户执⾏
mkdir -pv /opt/app/rmq
chown rmq:rmq /opt/app/rmq -R
上传rocketMQ安装包到4台服务器并解压⾄/opt/app/rmq
su rmq
cd
unzip rocketmq-all-4.7.1-bin-release.zip -d /opt/app/rmq/
mv /opt/app/rmq/rocketmq-all-4.7.1-bin-release/* /opt/app/rmq/
rm -r /opt/app/rmq/rocketmq-all-4.7.1-bin-release
5.使用rmq用户添加MQ环境变量
vim .bashrc (cd 到家目录)
#RockerMQ
export ROCKETMQ_HOME=/opt/app/rmq/
export PATH=$ROCKETMQ_HOME/bin:$PATH
#生效环境变量
source .bashrc
给脚本添加执⾏权限和创建目录
#使用rmq用户授予执行权限
chmod a+x /opt/app/rmq/bin/*
#使用rmq用户创建MQ日志目录
mkdir -pv /opt/app/rmq/store/commitlog
mkdir -pv /opt/app/rmq/namesrv/
#创建启动日志目录
mkdir -pv /opt/app/rmq/logs/
6.调整脚本中的参数(根据服务器资源修改内存配置)
vim /opt/app/rmq/bin/runserver.sh
vim /opt/app/rmq/bin/runbroker.sh
7.⽣成nameServer的配置⽂件
mqnamesrv -p > /opt/app/rmq/conf/mqnamesrv.conf
修改 mqnamesrv.conf 的 rocketmqHome 为 /opt/app/rmq
修改 mqnamesrv.conf 的 listenPort 为 9876
修改:
kvConfigPath=/opt/app/rmq/namesrv/kvConfig.json
configStorePath=/opt/app/rmq/namesrv/namesrv.properties
8.⽣成broker的配置⽂件
mqbroker -p > /opt/app/rmq/conf/mqbroker.conf
注意修改mqbroker.conf 的 namesrvAddr 字段为 Rmq 集群的地址Rmq 集群的地址namesrvAddr=master-jin:9876;
node1-jin:9876 修改 mqbroker.conf 的 brokerIP1、brokerIP2 为本机IP地址
9.启动mqnameserver(必须先启动NameServer,再启动
Broker)
NameServer是⽆状态的,不会相互同步数据
在四台机器每台上安装NameServer,borker配置namesrvAddr为四台机器,⽤英⽂封号分割
#启动NameServer
nohup mqnamesrv -c /opt/app/rmq/conf/mqnamesrv.conf > /opt/app/rmq/logs/namesrv.log 2>&1 &
观察⽇志⽇如下:
Java HotSpot(TM) 64-Bit Server VM warning: Using the DefNew young collector with the CMS collector is deprecated and will likely be removed in a future release
Java HotSpot(TM) 64-Bit Server VM warning: UseCMSCompactAtFullCollection is deprecated and will likely be removed in a future release.
load config properties file OK, /opt/app/rmq/conf/mqnamesrv.conf
The Name Server boot success. serializeType=JSON
10.启动mqbroker(以下内容在不同机器区别操作)
- 机器A,第⼀个Master
- 调整配置⽂件/opt/app/rmq/conf/mqbroker.conf
brokerClusterName=DefaultCluster
namesrvAddr=10.10.183.210:9876;10.10.183.211:9876;10.10.183.212:9876;10.10.183.213:
9876
brokerName=broker-a # broker master与slaver之间保持⼀致
brokerId=0 # master必须为0. slaver不为0
deleteWhen=04
fileReservedTime=48
brokerRole=SYNC_MASTER # 同步master
flushDiskType=ASYNC_FLUSH
storePathRootDir=/opt/app/rmq/store
storePathCommitLog=/opt/app/rmq/store/commitlog
启动:
nohup mqbroker autoCreateTopicEnable=true -c /opt/app/rmq/conf/mqbroker.conf >/opt/app/rmq/logs/broker.log 2>&1 &
- 机器B,第⼀个Slave
- 调整配置⽂件/opt/app/rmq/conf/mqbroker.conf
brokerClusterName=DefaultCluster
namesrvAddr=10.10.183.210:9876;10.10.183.211:9876;10.10.183.212:9876;10.10.183.
213:9876
brokerName=broker-a # broker master与slaver之间保持⼀致
brokerId=1 # master必须为0. slaver不为0
deleteWhen=04
fileReservedTime=48
brokerRole=SLAVE # slave
flushDiskType=ASYNC_FLUSH
storePathRootDir=/opt/app/rmq/store
storePathCommitLog=/opt/app/rmq/store/commitlog
启动:
nohup mqbroker autoCreateTopicEnable=true -c /opt/app/rmq/conf/mqbroker.conf >/opt/app/rmq/logs/broker.log 2>&1 &
- 机器C,启动第⼆个Master
- 调整配置⽂件/opt/app/rmq/conf/mqbroker.conf
brokerClusterName=DefaultCluster
namesrvAddr=10.10.183.210:9876;10.10.183.211:9876;10.10.183.212:9876;10.10.183.
213:9876
brokerName=broker-b # broker master与slaver之间保持⼀致
brokerId=0 # master必须为0. slaver不为0
deleteWhen=04
fileReservedTime=48
brokerRole=SYNC_MASTER # 同步master
flushDiskType=ASYNC_FLUSH
storePathRootDir=/opt/app/rmq/store
storePathCommitLog=/opt/app/rmq/store/commitlog
启动:
nohup mqbroker autoCreateTopicEnable=true -c /opt/app/rmq/conf/mqbroker.conf >/opt/app/rmq/logs/broker.log 2>&1 &
- 机器D,第⼆个Slave
- 调整配置⽂件/opt/app/rmq/conf/mqbroker.conf
brokerClusterName=DefaultCluster
namesrvAddr=10.10.183.210:9876;10.10.183.211:9876;10.10.183.212:9876;10.10.183.
213:9876
brokerName=broker-b # broker master与slaver之间保持⼀致
brokerId=1 # master必须为0. slaver不为0
deleteWhen=04
fileReservedTime=48
brokerRole=SLAVE # slave
flushDiskType=ASYNC_FLUSH
storePathRootDir=/opt/app/rmq/store
storePathCommitLog=/opt/app/rmq/store/commitlog
启动:
nohup mqbroker autoCreateTopicEnable=true -c /opt/app/rmq/conf/mqbroker.conf >/opt/app/rmq/logs/broker.log 2>&1 &
- 观察⽇志如下
load config properties file OK, /opt/app/rmq/conf/mqbroker.conf
11.验证是否部署成功
在四台机器中的其中⼀台执⾏下列操作,以验证是否部署成功
如果能正常创建topic、并且成功发送消息、消费消息。则认为部署成功
- 查看集群是否搭建成功
sh /opt/app/rmq/bin/mqadmin clusterList -n 10.10.183.227:9876
RocketMQLog:WARN No appenders could be found for logger (io.netty.util.internal.PlatformDependent0).
RocketMQLog:WARN Please initialize the logger system properly.
#Cluster Name #Broker Name #BID #Addr #Version #InTPS(LOAD) #OutTPS(LOAD) #PCWait(ms) #Hour #SPACE
DefaultCluster broker-a 0 10.10.183.226:10911 V4_7_1 0.00(0,0ms) 0.00(0,0ms) 0 450758.13 0.1923
DefaultCluster broker-a 1 10.10.183.227:10911 V4_7_1 0.00(0,0ms) 0.00(0,0ms) 0 450758.13 0.0352
DefaultCluster broker-b 0 10.10.183.229:10911 V4_7_1 0.00(0,0ms) 0.00(0,0ms) 0 450758.13 0.0491
DefaultCluster broker-b 1 10.10.183.230:10911 V4_7_1 0.00(0,0ms) 0.00(0,0ms) 0 450758.13 0.1421
- 创建topic
mqadmin updateTopic -n localhost:9876 -b localhost:10911 -t test_topic
RocketMQLog:WARN No appenders could be found for logger
(io.netty.util.internal.PlatformDependent0).
RocketMQLog:WARN Please initialize the logger system properly.
create topic to localhost:10911 success.
TopicConfig [topicName=test_topic, readQueueNums=8, writeQueueNums=8, perm=RW-,
topicFilterType=SINGLE_TAG, topicSysFlag=0, order=false]
- 查看topic
mqadmin topicList -n localhost:9876
RocketMQLog:WARN No appenders could be found for logger (io.netty.util.internal.PlatformDependent0).
RocketMQLog:WARN Please initialize the logger system properly.
SCHEDULE_TOPIC_XXXX
RMQ_SYS_TRANS_HALF_TOPIC
DefaultCluster_REPLY_TOPIC
test_topic
broker-b
BenchmarkTest
OFFSET_MOVED_EVENT
broker-a
TBW102
SELF_TEST_TOPIC
DefaultCluster
- 发送消息
mqadmin sendMessage -n localhost:9876 -t test_topic -p test_body
RocketMQLog:WARN No appenders could be found for logger (io.netty.util.internal.PlatformDependent0).
RocketMQLog:WARN Please initialize the logger system properly.
#Broker Name #QID #Send Result #MsgId
broker-a 6 SEND_OK 0A0AB7E21A1E135FBAA40F0E3AD90000
- 消费消息
mqadmin consumeMessage -n localhost:9876 -t test_topic
RocketMQLog:WARN No appenders could be found for logger (io.netty.util.internal.PlatformDependent0).
RocketMQLog:WARN Please initialize the logger system properly.
MessageQueue [topic=test_topic, brokerName=broker-a, queueId=0] print msg finished. status=NO_NEW_MSG, offset=0
MessageQueue [topic=test_topic, brokerName=broker-a, queueId=2] print msg finished. status=NO_NEW_MSG, offset=0
MessageQueue [topic=test_topic, brokerName=broker-a, queueId=1] print msg finished. status=NO_NEW_MSG, offset=0
MessageQueue [topic=test_topic, brokerName=broker-a, queueId=4] print msg finished. status=NO_NEW_MSG, offset=0
MessageQueue [topic=test_topic, brokerName=broker-a, queueId=3] print msg finished. status=NO_NEW_MSG, offset=0
Consume ok
MSGID: 0A0AB7E21A1E135FBAA40F0E3AD90000 MessageExt [brokerName=broker-a, queueId=6, storeSize=185, queueOffset=0, sysFlag=0, bornTimestamp=1622729390809, bornHost=/10.10.183.226:33016, storeTimestamp=1622729390824, storeHost=/10.10.183.226:10911, msgId=0A0AB7E200002A9F0000000000000000, commitLogOffset=0, bodyCRC=1590763901, reconsumeTimes=0, preparedTransactionOffset=0, toString()=Message{topic='test_topic', flag=0, properties={MIN_OFFSET=0, MAX_OFFSET=1, UNIQ_KEY=0A0AB7E21A1E135FBAA40F0E3AD90000, CLUSTER=DefaultCluster, WAIT=true}, body=[116, 101, 115, 116, 95, 98, 111, 100, 121], transactionId='null'}] BODY: test_body
MessageQueue [topic=test_topic, brokerName=broker-a, queueId=6] print msg finished. status=NO_NEW_MSG, offset=1
MessageQueue [topic=test_topic, brokerName=broker-a, queueId=5] print msg finished. status=NO_NEW_MSG, offset=0
MessageQueue [topic=test_topic, brokerName=broker-a, queueId=7] print msg finished. status=NO_NEW_MSG, offset=0
关闭命令
mqshutdown broker
mqshutdown namesrv
再次启动
nohup mqnamesrv -c /opt/app/rmq/conf/mqnamesrv.conf > /opt/app/rmq/logs/namesrv.log 2>&1 &
nohup mqbroker autoCreateTopicEnable=true -c /opt/app/rmq/conf/mqbroker.conf >/opt/app/rmq/logs/broker.log 2>&1 &
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· AI技术革命,工作效率10个最佳AI工具