以下所有的服务器地址为当前所使用的服务器IP地址。
以下所有的路径需要改为当前所安装的路径。
1.环境准备
两台linux服务器(CentOS7)
openJDK 1.8
maven非必须
ssh工具 finalshell
部署结构如下:
2.搭建步骤
2.1 首先两台服务器都需要下载rocketMq。包为rocketmq-all-4.6.1-bin-release.zip,下载好后使用unzip命令进行解压,并重命名为rocketMq
2.2 然后两台linux服务器都需要配置环境变量,包括java、rocketMQ。
2.3rocketmq提供多种管理方式,命令行和界面等,
apache提供一个开源的扩展项目: https://github.com/apache/rocketmq-externals 里面包含一个子项目rocketmq-console,配置下,打个包就可以用了。
最好将rocketmq-console和rocketMq放在同一个目录下。
最后的目录结构为下图所示:
2.4 进入节点一下的rocketMq下的conf文件夹
选择采用主从异步的方式,所以再进入2m-2s-async文件夹;角色broker-a.properties、broker-b-s.properties
vimbroker-a.properties:
#所属集群名字
brokerClusterName=sns-rocket-mq-cluster
#broker名字,注意此处不同的配置文件填写的不一样
brokerName=10.16.148.58
#brokerId 0 表示 Master,>0 表示 Slave
brokerId=0
# Broker 对外服务的监听端口
listenPort=10911
#nameServer地址,分号分割
namesrvAddr=10.16.148.58:9876;10.16.148.59:9876
# 删除文件时间点,默认凌晨 4点
deleteWhen=04
#文件保留时间,默认 48 小时
fileReservedTime=72
#Broker role有3种:SYNC MASTER、ASYNC MASTER、SLAVE。关键词SYNC和ASYNC表示Master和Slave之间同步消息的机制,SYNC即同步更新,指当Slave和Master消息同步完成后,再返回发送成功的状态。ASYNC即异步更新,master与slave有短暂消息延迟,毫秒级。本文在此使用了异步复制集群模式,线上环境推荐使用同步双写模式,即SYNC_MASTER
brokerRole=ASYNC_MASTER
# 刷盘方式 ASYNC_FLUSH 异步刷盘
flushDiskType=ASYNC_FLUSH
#存储路径
storePathRootDir=../rocketmq/store/rootdir-a
storePathCommitLog=../rocketmq/store/commitlog-a
# 是否允许 Broker 自动创建Topic
autoCreateTopicEnable=true
# 是否允许 Broker 自动创建订阅组
autoCreateSubscriptionGroup=true
再vim broker-b-s.properties
brokerClusterName=sns-rocket-mq-cluster
brokerName=127.0.0.1
listenPort=10921
namesrvAddr=127.0.0.1:9876;127.0.0.2:9876
brokerId=1
deleteWhen=04
fileReservedTime=72
brokerRole=SLAVE
storePathRootDir=../rocketmq/store/rootdir-b-s
storePathCommitLog=../rocketmq/store/commitlog-b-s
autoCreateTopicEnable=true
autoCreateSubscriptionGroup=true
flushDiskType=ASYNC_FLUSH
2.5 进入节点二下的rocketMq下的conf文件夹;角色broker-b.properties、broker-a-s.properties
vim broker-b.properties;
brokerClusterName=sns-rocket-mq-cluster
brokerName=127.0.0.1
brokerIP1=127.0.0.1
brokerId=0
listenPort=10911
namesrvAddr=127.0.0.1:9876;10.127.0.0.1:9876
deleteWhen=04
fileReservedTime=72
brokerRole=ASYNC_MASTER
storePathRootDir=../rocketmq/store/rootdir-b
storePathCommitLog=../rocketmq/store/commitlog-b
autoCreateTopicEnable=true
autoCreateSubscriptionGroup=true
flushDiskType=ASYNC_FLUSH
再vim broker-a-s.properties
brokerClusterName=sns-rocket-mq-cluster
brokerName=127.0.0.1
listenPort=10921
namesrvAddr=127.0.0.1:9876;10.127.0.0.1:9876
brokerId=1
deleteWhen=04
fileReservedTime=72
brokerRole=SLAVE
storePathRootDir=../rocketmq/store/rootdir-a-s
storePathCommitLog=../rocketmq/store/commitlog-a-s
autoCreateTopicEnable=true
autoCreateSubscriptionGroup=true
flushDiskType=ASYNC_FLUSH
自此,配置文件已修改完成。store文件夹以及它下面的文件夹都需要在两台服务器上手动创建一下。
并且需要创建一个日志文件夹。mkdir -p ../rocketmq/logs
2.6 调JVM启动参数
调一下JVM,包括nameserver 和 broker。限于自己机器的配置,参数调小一下。但Rocketmq最少的堆是1g,否则无法启动。两台机器执行相同的操作。
在rocketMq/bin/runbroker.sh中:
2.7 编写mqnamesrv脚本
两台机器都需要mqnamesrv的启动脚本,分别配置就好。
两台机器都需要新建一个startNameSrv.sh;
#! /bin/sh
nohup sh /apps/idm/rocketMq/bin/mqnamesrv >> /apps/idm/rocketMq/logs/mqnamesrv.log 2>&1 &
2.8 编写broker启动脚本
节点一机器只需启动broker-a和broker-b-s。
新建一个startBroker-a.sh启动脚本;
#! /bin/sh
nohup sh ../rocketMq/bin/mqbroker -c ../rocketMq/conf/2m-2s-async/broker-a.properties > ../rocketMq/logs/broker-a.log 2>&1 &
新建一个startBroker-b-s.sh启动脚本
#! /bin/sh
nohup sh ../rocketMq/bin/mqbroker -c ../rocketMq/conf/2m-2s-async/broker-b-s.properties > ../rocketMq/logs/broker-b-s.log 2>&1 &
节点二机器只需启动broker-b和broker-a-s。
新建一个startBroker-b.sh启动脚本;
#! /bin/sh
nohup sh ../rocketMq/bin/mqbroker -c ../rocketMq/conf/2m-2s-async/broker-b.properties > ../rocketMq/logs/broker-b.log 2>&1 &
新建一个startBroker-a-s.sh启动脚本
#! /bin/sh
nohup sh ../rocketMq/bin/mqbroker -c ../rocketMq/conf/2m-2s-async/broker-a-s.properties > ../rocketMq/logs/broker-a-s.log 2>&1 &
好了,启动脚本已经编写完成。接下来就是run的阶段了。
2.9 启动
先分别在两台机器上启动nameserver,再启动broker,两台机器的启动顺序:
启动nameserver---启动broker master---启动broker slave,done。
启动完成后,可以同时jps命令看一下启动情况:
一个namesrv,两个broker。
可以再通过mqadmin clusterList --namesrvAddr=127.0.0.1:9876命令看一下服务器状态:
2.10 部署启动rocketmq管控台
进入2.3步骤中所下载的mq-Console文件夹,编辑application.yml文件,将两台服务器的地址填入
然后再新建一个start_MqConsole.sh文件:
#! /bin/sh
nohup /apps/software/jdk8u242-b08/bin/java -jar ../mq-Console/rocketmq-console-ng-1.0.1.jar --server.port=28080 --spring.config.location=../mq-Console/application.yml >> ../mq-Console/console.log &
然后启动它!!!
然后再访问它
大功告成!!!
2.10 关闭服务
关闭namesrv服务
mqshutdown namesrv
关闭broker服务
mqshutdown broker
2.11 期间遇到的坑
broker始终启动不起来;后来通过查阅资料发现将store文件夹中的内容全部删除即可。