部署基于两个服务器,阿里云和腾讯云。阿里云作为broker-a,腾讯云作为broker-b。因为基于实操,与虚拟机不同,且因为服务器平台不同,有出现过不少小毛病。
请注意:阿里云,阿里云由于有安全组功能,对于不在安全组内的端口将会进行屏蔽,会影响rocketmq的启动,所以需要在阿里云的控制台中对应有的rocketmq端口添加安全组规则
http://rocketmq.apache.org/docs/quick-start/
官网有对其进行详细说明:
建议使用64位操作系统,Linux / Unix / Mac;
64位JDK 1.8+;
Maven 3.2.x.
可选项
Git
cd /usr/javawork
wget http://mirrors.hust.edu.cn/apache/maven/maven-3/3.3.9/binaries/apache-maven-3.3.9-bin.tar.gz
1.3.2 解压
tar -zxvf apache-maven-3.3.9-bin.tar.gz
1.3.3 设置环境变量
vi /etc/profile
文件末尾添加两行配置:
export M2_HOME=/usr/javawork/apache-maven-3.3.9
export PATH=$PATH:$M2_HOME/bin
退出vi执行命令使其生效:
source /etc/profile
1.3.4 添加alibaba的Maven仓库镜像(下载速度飞快)
vi /usr/javawork/apache-maven-3.3.9/conf/settings.xml
在项下添加镜像信息:
<mirror>
<id>alimavenid>
<name>aliyun mavenname>
<mirrorOf>centralmirrorOf>
<url>http://maven.aliyun.com/nexus/content/groups/public/url>
mirror>
yum install git
如果已下载RocketMQ源码包,Git可以无需安装。shell安装脚本中有git pull命令,如果未安装git,会提示command not found,但不影响后面的编译。 如果嫌烦,vi install.sh打开文件删掉 git pull这条命令即可。
yum install screen
screen 非必需,但安装后切换会话非常方便。官方文档中使用了这条命令,所以还是装上较好。 命令介绍:http://www.cnblogs.com/mchina/archive/2013/01/30/2880680.html
单击此处下载4.3.0源代码版本。您也可以从这里下载二进制版本。
下载二进制版本可以直接使用:
通过ftp上传到服务器其中的节点,通过unzip命令对压缩包进行解压
下载源代码版本需要经过编译构建:
对下载的源代码进行解压后,运行命令对其进行编译
mvn -Prelease-all -DskipTests clean install -U
进入目录下distribution/target可以见到apache-rocketmq.tar.gz和apache-rocketmq.zip.根据自己需要,可以选择其中一个压缩包上传到服务器进行解压。该步骤可以服务器运行,也可以在本地运行。
在服务器上通过git命令进行下载
git clone https://github.com/apache/rocketmq.git
采用实操,且因为服务器平台不同。将阿里云的服务器作为master1,腾讯云的服务器作为master2
序号 | IP | 角色 | 模式 |
---|---|---|---|
1 | 阿里云ip | nameServer1,brokerServer1 | Master1 |
2 | 腾讯云ip | nameServer2,brokerServer2 | Master2 |
创建存储路径 【 两台机器 】
与配置文件中的配置路径同步
mkdir /usr/javawork/rocketmq-all-4.3.0-bin-release/store
mkdir /usr/javawork/rocketmq-all-4.3.0-bin-release/store/commitlog
mkdir /usr/javawork/rocketmq-all-4.3.0-bin-release/store/consumequeue
mkdir/usr/javawork/rocketmq-all-4.3.0-bin-release/store/index
master1服务器进入rocketmq的根目录,执行以下命令
vim conf/2m-noslave/broker-a.properties
将信息配置成以下样子
#所属集群名字
brokerClusterName=rocketmq-cluster
#broker名字,注意此处不同的配置文件填写的不一样
brokerName=broker-a
#0 表示 Master,>0 表示 Slave
brokerId=0 #nameServer地址,分号分割
brokerIP1 = 阿里云IP
namesrvAddr=阿里云IP:9876;腾讯云IP:9876
#在发送消息时,自动创建服务器不存在的topic,默认创建的队列数
defaultTopicQueueNums=4
#是否允许 Broker 自动创建Topic,建议线下开启,线上关闭
autoCreateTopicEnable=true
#是否允许 Broker 自动创建订阅组,建议线下开启,线上关闭
autoCreateSubscriptionGroup=true
#Broker 对外服务的监听端口
listenPort=10911
#删除文件时间点,默认凌晨 4点
deleteWhen=04
#文件保留时间,默认 48 小时
fileReservedTime=120
#commitLog每个文件的大小默认1G
mapedFileSizeCommitLog=1073741824
#ConsumeQueue每个文件默认存30W条,根据业务情况调整
mapedFileSizeConsumeQueue=300000
#destroyMapedFileIntervalForcibly=120000
#redeleteHangedFileInterval=120000
#检测物理文件磁盘空间
diskMaxUsedSpaceRatio=88
#存储路径
storePathRootDir=/usr/javawork/rocketmq-all-4.3.0-bin-release/store
#commitLog 存储路径
storePathCommitLog=/usr/javawork/rocketmq-all-4.3.0-bin-release/store/commitlog
#消费队列存储路径存储路径
storePathConsumeQueue=/usr/javawork/rocketmq-all-4.3.0-bin-release/store/consumequeue
#消息索引存储路径
storePathIndex=/usr/javawork/rocketmq-all-4.3.0-bin-release/store/index
#checkpoint 文件存储路径
storeCheckpoint=/usr/javawork/rocketmq-all-4.3.0-bin-release/store/checkpoint
#Broker 的角色
#- ASYNC_MASTER 异步复制Master
#- SYNC_MASTER 同步双写Master
#- SLAVE brokerRole=ASYNC_MASTER
#刷盘方式
#- ASYNC_FLUSH 异步刷盘
#- SYNC_FLUSH 同步刷盘 flushDiskType=ASYNC_FLUSH
#checkTransactionMessageEnable=false
#abort 文件存储路径
abortFile=/usr/javawork/apache-rocketmq/store/abort
#限制的消息大小 maxMessageSize=65536
#flushCommitLogLeastPages=4
#flushConsumeQueueLeastPages=2
#flushCommitLogThoroughInterval=10000
#flushConsumeQueueThoroughInterval=60000
同样,master2服务器进入rocketmq的根目录,执行以下命令
vim conf/2m-noslave/broker-b.properties
配置文件信息只需要修改brokerName和brokerIP1
brokerName=broker-b
brokerIP1 = 腾讯云IP
在rocketmq的根目录下执行创建logs文件夹
mkdir -p logs
然后执行下列命令,目录路径根据实际情况进行更改
cd /usr/javawork/rocketmq-all-4.3.0-bin-release/conf && sed -i 's#${user.home}#/usr/javawork/rocketmq-all-4.3.0-bin-release#g' *.xml
虽然是在实操,但是运行的内存仍然超过我的低配服务器。所以需要修改启动脚本参数。两台机器都修改
进入rocketmq安装根目录,执行下列命令
vim bin/runbroker.sh
在打开的配置文件中修改
JAVA_OPT=”${JAVA_OPT} -server -Xms1g -Xmx1g -Xmn512m - XX:PermSize=128m -XX:MaxPermSize=320m” |
同样在rocketmq安装根目录,执行下列命令
vim bin/runserver.sh
在打开的配置文件中修改
JAVA_OPT=”${JAVA_OPT} -server -Xms1g -Xmx1g -Xmn512m - XX:PermSize=128m -XX:MaxPermSize=320m” |
分别在两台机器的根目录下输入
nohup sh bin/mqnamesrv &
如果有异常,可以通过打开根目录下的nohup,out进行异常信息的查看,请注意:该输出日志为附加输出。也可以使用命令查看是否有异常
tail -f ~/logs/rocketmqlogs/namesrv.log
如果你没有修改日志配置文件,该命令也作为查看是否启动成功的命令
如果你修改日志配置文件,那么logs目录下的rocketmqlogs将会是你的日志目录,在rocketmq根目录下执行下列命令查看日志
tail -f -n 500 logs/rocketmqlogs/namesrv.log
出现如下信息表示启动成功:
The Name Server boot success. serializeType=JSON
&代表着后台运行
在阿里云服务器master1上的根目录下输入
nohup sh bin/mqbroker -c /usr/javawork/rocketmq-all-4.3.0-bin-release/conf/2m-noslave/broker-a.properties >/dev/null 2>&1 &
如果有异常,可以通过打开根目录下的nohup,out进行异常信息的查看,请注意:该输出日志为附加输出。也可以使用命令查看是否有异常
tail -f ~/logs/rocketmqlogs/broker.log
如果你没有修改日志配置文件,该命令也作为查看是否启动成功的命令
如果你修改日志配置文件,那么logs目录下的rocketmqlogs将会是你的日志目录,在rocketmq根目录下执行下列命令查看日志
tail -f -n 500 logs/rocketmqlogs/broker.log
出现如下信息表示启动成功:
The Name Server boot success. serializeType=JSON
&代表着后台运行
同理,在腾讯云服务器master2上的根目录下输入
nohup sh bin/mqbroker -c /usr/javawork/rocketmq-all-4.3.0-bin-release/conf/2m-noslave/broker-b.properties >/dev/null 2>&1 &
除了使用tail实时查看日志,也可以直接输入jps命令查看是否启动成功
如果在使用过程中需要关闭rocketmq,可以使用以下命令
关闭namesrv服务:sh bin/mqshutdown namesrv
关闭broker服务 :sh bin/mqshutdown broker
RocketMQ Console是一个控制台网站,可以让程序员直观的看到关于消息队列的相关情况,免除了繁杂的管理员命令。由于RocketMQ已经转移到apache旗下,所以已经没有原生的控制台网站了,可以使用git上的实例进行管理。具体安装步骤如下:
https://www.cnblogs.com/quchunhui/p/7284752.html
https://blog.csdn.net/hqwang4/article/details/79134958
注意:如果安装在阿里云,请在安全组中设置指定款口号指定ip开放
无法启动 Broker
查看 Broker 运行日志:
tail -f ~/logs/rocketmqlogs/broker.log
测试程序访问异常
com.alibaba.rocketmq.client.exception.MQClientException: No route info of this topic, TopicTest1
请注意:示例中的IP和路径要根据自己的情况进行修改。服务器请尽量选用同个平台的服务器,以免发生各种异常现象