部署基于两个服务器,阿里云和腾讯云。阿里云作为broker-a,腾讯云作为broker-b。因为基于实操,与虚拟机不同,且因为服务器平台不同,有出现过不少小毛病。
请注意:阿里云,阿里云由于有安全组功能,对于不在安全组内的端口将会进行屏蔽,会影响rocketmq的启动,所以需要在阿里云的控制台中对应有的rocketmq端口添加安全组规则
1.软件准备
http://rocketmq.apache.org/docs/quick-start/
官网有对其进行详细说明:
-
建议使用64位操作系统,Linux / Unix / Mac;
-
64位JDK 1.8+;
-
Maven 3.2.x.
可选项
-
Git
- Screen
1.2安装JDK 关于JDK的安装可以查看下列帖子。关于JDK的版本必须是64位的,如果服务器JDK当前版本不是64位了,在运行nameserver的时候将会报异常 https://blog.csdn.net/qq_25881261/article/details/79698252
1.3安装maven 1.3.1 下载
<span style="color:#000000"><code>cd /usr/javawork
wget http://mirrors<span style="color:#009900">.hust</span><span style="color:#009900">.edu</span><span style="color:#009900">.cn</span>/apache/maven/maven-<span style="color:#006666">3</span>/<span style="color:#006666">3.3</span><span style="color:#006666">.9</span>/binaries/apache-maven-<span style="color:#006666">3.3</span><span style="color:#006666">.9</span>-bin<span style="color:#009900">.tar</span><span style="color:#009900">.gz</span></code></span>
- 1
- 2
- 3
1.3.2 解压
<span style="color:#000000"><code>tar -zxvf apache-maven<span style="color:#4f4f4f">-</span><span style="color:#006666">3.3</span><span style="color:#006666">.9</span>-bin<span style="color:#4f4f4f">.</span>tar<span style="color:#4f4f4f">.</span>gz</code></span>
- 1
1.3.3 设置环境变量
<span style="color:#000000"><code>vi /etc/profile</code></span>
- 1
文件末尾添加两行配置:
<span style="color:#000000"><code><span style="color:#000088">export</span> M2_HOME=/usr/javawork/apache-maven-<span style="color:#006666">3.3</span>.<span style="color:#006666">9</span>
<span style="color:#000088">export</span> PATH=<span style="color:#009900">$PATH</span>:<span style="color:#009900">$M2_HOME</span>/bin</code></span>
- 1
- 2
退出vi执行命令使其生效:
<span style="color:#000000"><code><span style="color:#4f4f4f">source</span> /etc/profile</code></span>
- 1
1.3.4 添加alibaba的Maven仓库镜像(下载速度飞快)
<span style="color:#000000"><code>vi /usr/javawork/apache-maven<span style="color:#4f4f4f">-</span><span style="color:#006666">3.3</span><span style="color:#006666">.9</span>/conf/settings<span style="color:#4f4f4f">.</span><span style="color:#4f4f4f">xml</span></code></span>
- 1
在项下添加镜像信息:
<span style="color:#000000"><code><span style="color:#006666"><<span style="color:#4f4f4f">mirror</span>></span>
<span style="color:#006666"><<span style="color:#4f4f4f">id</span>></span>alimaven<span style="color:#006666"></<span style="color:#4f4f4f">id</span>></span>
<span style="color:#006666"><<span style="color:#4f4f4f">name</span>></span>aliyun maven<span style="color:#006666"></<span style="color:#4f4f4f">name</span>></span>
<span style="color:#006666"><<span style="color:#4f4f4f">mirrorOf</span>></span>central<span style="color:#006666"></<span style="color:#4f4f4f">mirrorOf</span>></span>
<span style="color:#006666"><<span style="color:#4f4f4f">url</span>></span>http://maven.aliyun.com/nexus/content/groups/public/<span style="color:#006666"></<span style="color:#4f4f4f">url</span>></span>
<span style="color:#006666"></<span style="color:#4f4f4f">mirror</span>></span></code></span>
- 1
- 2
- 3
- 4
- 5
- 6
1.4 安装Git
<span style="color:#000000"><code>yum <span style="color:#000088">install</span> git</code></span>
- 1
如果已下载RocketMQ源码包,Git可以无需安装。shell安装脚本中有git pull命令,如果未安装git,会提示command not found,但不影响后面的编译。 如果嫌烦,vi install.sh打开文件删掉 git pull这条命令即可。
1.5 安装screen
<span style="color:#000000"><code>yum <span style="color:#000088">install</span> screen</code></span>
- 1
screen 非必需,但安装后切换会话非常方便。官方文档中使用了这条命令,所以还是装上较好。 命令介绍:http://www.cnblogs.com/mchina/archive/2013/01/30/2880680.html
安装RocketMQ
方式1:
单击此处下载4.3.0源代码版本。您也可以从这里下载二进制版本。
下载二进制版本可以直接使用:
通过ftp上传到服务器其中的节点,通过unzip命令对压缩包进行解压
下载源代码版本需要经过编译构建:
对下载的源代码进行解压后,运行命令对其进行编译
<span style="color:#000000"><code>mvn -Prelease-all -DskipTests clean install -U</code></span>
- 1
进入目录下distribution/target可以见到apache-rocketmq.tar.gz和apache-rocketmq.zip.根据自己需要,可以选择其中一个压缩包上传到服务器进行解压。该步骤可以服务器运行,也可以在本地运行。
方式2:
在服务器上通过git命令进行下载
<span style="color:#000000"><code>git <span style="color:#000088">clone</span> https:<span style="color:#880000">//github.com/apache/rocketmq.git</span></code></span>
- 1
部署RocketMQ
服务器环境
采用实操,且因为服务器平台不同。将阿里云的服务器作为master1,腾讯云的服务器作为master2
序号 | IP | 角色 | 模式 |
---|---|---|---|
1 | 阿里云ip | nameServer1,brokerServer1 | Master1 |
2 | 腾讯云ip | nameServer2,brokerServer2 | Master2 |
创建配置相关需要的文件夹
创建存储路径 【 两台机器 】
与配置文件中的配置路径同步
<span style="color:#000000"><code>mkdir /usr/javawork/rocketmq-all<span style="color:#4f4f4f">-</span><span style="color:#006666">4.3</span><span style="color:#006666">.0</span>-bin-release/store
mkdir /usr/javawork/rocketmq-all<span style="color:#4f4f4f">-</span><span style="color:#006666">4.3</span><span style="color:#006666">.0</span>-bin-release/store/commitlog
mkdir /usr/javawork/rocketmq-all<span style="color:#4f4f4f">-</span><span style="color:#006666">4.3</span><span style="color:#006666">.0</span>-bin-release/store/consumequeue
mkdir/usr/javawork/rocketmq-all<span style="color:#4f4f4f">-</span><span style="color:#006666">4.3</span><span style="color:#006666">.0</span>-bin-release/store/index</code></span>
- 1
- 2
- 3
- 4
修改配置文件
master1服务器进入rocketmq的根目录,执行以下命令
<span style="color:#000000"><code>vim conf/<span style="color:#006666">2</span>m-noslave/broker-a<span style="color:#4f4f4f">.</span>properties</code></span>
- 1
将信息配置成以下样子
<span style="color:#000000"><code><span style="color:#009900">#所属集群名字 </span>
brokerClusterName=rocketmq-cluster
<span style="color:#009900">#broker名字,注意此处不同的配置文件填写的不一样 </span>
brokerName=broker-a
<span style="color:#009900">#0 表示 Master,>0 表示 Slave</span>
brokerId=<span style="color:#006666">0</span> #nameServer地址,分号分割
brokerIP1 = 阿里云IP
namesrvAddr=阿里云IP:<span style="color:#006666">9876</span>;腾讯云IP:<span style="color:#006666">9876</span>
<span style="color:#009900">#在发送消息时,自动创建服务器不存在的topic,默认创建的队列数 </span>
defaultTopicQueueNums=<span style="color:#006666">4</span>
<span style="color:#009900">#是否允许 Broker 自动创建Topic,建议线下开启,线上关闭 </span>
autoCreateTopicEnable=<span style="color:#006666">true</span>
<span style="color:#009900">#是否允许 Broker 自动创建订阅组,建议线下开启,线上关闭 </span>
autoCreateSubscriptionGroup=<span style="color:#006666">true</span>
<span style="color:#009900">#Broker 对外服务的监听端口 </span>
listenPort=<span style="color:#006666">10911</span>
<span style="color:#009900">#删除文件时间点,默认凌晨 4点</span>
deleteWhen=<span style="color:#006666">04</span>
<span style="color:#009900">#文件保留时间,默认 48 小时 </span>
fileReservedTime=<span style="color:#006666">120</span>
<span style="color:#009900">#commitLog每个文件的大小默认1G </span>
mapedFileSizeCommitLog=<span style="color:#006666">1073741824</span>
<span style="color:#009900">#ConsumeQueue每个文件默认存30W条,根据业务情况调整</span>
mapedFileSizeConsumeQueue=<span style="color:#006666">300000</span>
<span style="color:#009900">#destroyMapedFileIntervalForcibly=120000</span>
<span style="color:#009900">#redeleteHangedFileInterval=120000</span>
<span style="color:#009900">#检测物理文件磁盘空间</span>
diskMaxUsedSpaceRatio=<span style="color:#006666">88</span>
<span style="color:#009900">#存储路径</span>
storePathRootDir=/usr/javawork/rocketmq-all-<span style="color:#006666">4.3</span><span style="color:#006666">.0</span>-bin-release/store
<span style="color:#009900">#commitLog 存储路径 </span>
storePathCommitLog=/usr/javawork/rocketmq-all-<span style="color:#006666">4.3</span><span style="color:#006666">.0</span>-bin-release/store/commitlog
<span style="color:#009900">#消费队列存储路径存储路径</span>
storePathConsumeQueue=/usr/javawork/rocketmq-all-<span style="color:#006666">4.3</span><span style="color:#006666">.0</span>-bin-release/store/consumequeue
<span style="color:#009900">#消息索引存储路径</span>
storePathIndex=/usr/javawork/rocketmq-all-<span style="color:#006666">4.3</span><span style="color:#006666">.0</span>-bin-release/store/index
<span style="color:#009900">#checkpoint 文件存储路径</span>
storeCheckpoint=/usr/javawork/rocketmq-all-<span style="color:#006666">4.3</span><span style="color:#006666">.0</span>-bin-release/store/checkpoint
<span style="color:#009900">#Broker 的角色</span>
<span style="color:#009900">#- ASYNC_MASTER 异步复制Master</span>
<span style="color:#009900">#- SYNC_MASTER 同步双写Master</span>
<span style="color:#009900">#- SLAVE brokerRole=ASYNC_MASTER</span>
<span style="color:#009900">#刷盘方式</span>
<span style="color:#009900">#- ASYNC_FLUSH 异步刷盘</span>
<span style="color:#009900">#- SYNC_FLUSH 同步刷盘 flushDiskType=ASYNC_FLUSH</span>
<span style="color:#009900">#checkTransactionMessageEnable=false</span>
<span style="color:#009900">#abort 文件存储路径</span>
abortFile=/usr/javawork/apache-rocketmq/store/abort
<span style="color:#009900">#限制的消息大小 maxMessageSize=65536</span>
<span style="color:#009900">#flushCommitLogLeastPages=4</span>
<span style="color:#009900">#flushConsumeQueueLeastPages=2</span>
<span style="color:#009900">#flushCommitLogThoroughInterval=10000</span>
<span style="color:#009900">#flushConsumeQueueThoroughInterval=60000</span>
</code></span>
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
- 44
- 45
- 46
- 47
- 48
- 49
- 50
- 51
- 52
- 53
- 54
- 55
- 56
- 57
- 58
- 59
- 60
- 61
- 62
- 63
- 64
- 65
- 66
- 67
- 68
- 69
- 70
- 71
- 72
- 73
- 74
- 75
- 76
- 77
- 78
- 79
- 80
- 81
- 82
- 83
- 84
- 85
- 86
- 87
- 88
- 89
同样,master2服务器进入rocketmq的根目录,执行以下命令
<span style="color:#000000"><code>vim conf/<span style="color:#006666">2</span>m-noslave/broker-b<span style="color:#4f4f4f">.</span>properties</code></span>
- 1
配置文件信息只需要修改brokerName和brokerIP1
<span style="color:#000000"><code>brokerName=broker-b
brokerIP1 = 腾讯云IP</code></span>
- 1
- 2
修改日志配置文件
在rocketmq的根目录下执行创建logs文件夹
<span style="color:#000000"><code><span style="color:#000088">mkdir</span> -p logs</code></span>
- 1
然后执行下列命令,目录路径根据实际情况进行更改
<span style="color:#000000"><code>cd /usr/javawork/rocketmq-all<span style="color:#4f4f4f">-</span><span style="color:#006666">4.3</span><span style="color:#006666">.0</span>-bin-release/conf <span style="color:#4f4f4f">&&</span> sed -i <span style="color:#009900">'s#${user.home}#/usr/javawork/rocketmq-all-4.3.0-bin-release#g'</span> <span style="color:#4f4f4f">*</span><span style="color:#4f4f4f">.</span><span style="color:#4f4f4f">xml</span></code></span>
- 1
修改启动脚本参数
虽然是在实操,但是运行的内存仍然超过我的低配服务器。所以需要修改启动脚本参数。两台机器都修改
进入rocketmq安装根目录,执行下列命令
<span style="color:#000000"><code>vim bin/runbroker<span style="color:#009900">.sh</span></code></span>
- 1
在打开的配置文件中修改
JAVA_OPT=”${JAVA_OPT} -server -Xms1g -Xmx1g -Xmn512m - XX:PermSize=128m -XX:MaxPermSize=320m” |
同样在rocketmq安装根目录,执行下列命令
<span style="color:#000000"><code>vim bin/runserver<span style="color:#009900">.sh</span></code></span>
- 1
在打开的配置文件中修改
JAVA_OPT=”${JAVA_OPT} -server -Xms1g -Xmx1g -Xmn512m - XX:PermSize=128m -XX:MaxPermSize=320m” |
启动RocketMQ
启动NameServer
分别在两台机器的根目录下输入
<span style="color:#000000"><code>nohup sh bin/mqnamesrv &</code></span>
- 1
如果有异常,可以通过打开根目录下的nohup,out进行异常信息的查看,请注意:该输出日志为附加输出。也可以使用命令查看是否有异常
<span style="color:#000000"><code>tail -f ~/logs/rocketmqlogs/namesrv<span style="color:#4f4f4f">.</span><span style="color:#000088">log</span></code></span>
- 1
如果你没有修改日志配置文件,该命令也作为查看是否启动成功的命令
如果你修改日志配置文件,那么logs目录下的rocketmqlogs将会是你的日志目录,在rocketmq根目录下执行下列命令查看日志
<span style="color:#000000"><code>tail -f -n <span style="color:#006666">500</span> logs/rocketmqlogs/namesrv<span style="color:#4f4f4f">.</span><span style="color:#000088">log</span></code></span>
- 1
出现如下信息表示启动成功:
The Name Server boot success. serializeType=JSON
&代表着后台运行
启动Broker
在阿里云服务器master1上的根目录下输入
<span style="color:#000000"><code>nohup sh bin/mqbroker -c /usr/javawork/rocketmq-all<span style="color:#4f4f4f">-</span><span style="color:#006666">4.3</span><span style="color:#006666">.0</span>-bin-release/conf/<span style="color:#006666">2</span>m-noslave/broker-a<span style="color:#4f4f4f">.</span>properties <span style="color:#4f4f4f">></span>/dev/<span style="color:#4f4f4f">null</span> <span style="color:#006666">2</span><span style="color:#4f4f4f">>&</span><span style="color:#006666">1</span> <span style="color:#4f4f4f">&</span></code></span>
- 1
如果有异常,可以通过打开根目录下的nohup,out进行异常信息的查看,请注意:该输出日志为附加输出。也可以使用命令查看是否有异常
<span style="color:#000000"><code>tail -f ~/logs/rocketmqlogs/broker<span style="color:#4f4f4f">.</span><span style="color:#000088">log</span></code></span>
- 1
如果你没有修改日志配置文件,该命令也作为查看是否启动成功的命令
如果你修改日志配置文件,那么logs目录下的rocketmqlogs将会是你的日志目录,在rocketmq根目录下执行下列命令查看日志
<span style="color:#000000"><code>tail -f -n <span style="color:#006666">500</span> logs/rocketmqlogs/broker<span style="color:#4f4f4f">.</span><span style="color:#000088">log</span></code></span>
- 1
出现如下信息表示启动成功:
The Name Server boot success. serializeType=JSON
&代表着后台运行
同理,在腾讯云服务器master2上的根目录下输入
<span style="color:#000000"><code>nohup sh bin/mqbroker -c /usr/javawork/rocketmq-all<span style="color:#4f4f4f">-</span><span style="color:#006666">4.3</span><span style="color:#006666">.0</span>-bin-release/conf/<span style="color:#006666">2</span>m-noslave/broker-b<span style="color:#4f4f4f">.</span>properties <span style="color:#4f4f4f">></span>/dev/<span style="color:#4f4f4f">null</span> <span style="color:#006666">2</span><span style="color:#4f4f4f">>&</span><span style="color:#006666">1</span> <span style="color:#4f4f4f">&</span></code></span>
- 1
除了使用tail实时查看日志,也可以直接输入jps命令查看是否启动成功
关闭broker和namesrv
如果在使用过程中需要关闭rocketmq,可以使用以下命令
<span style="color:#000000"><code>关闭namesrv服务:sh bin/mqshutdown namesrv
关闭broker服务 :sh bin/mqshutdown broker</code></span>
- 1
- 2
- 3
安装RocketMQ Console
RocketMQ Console是一个控制台网站,可以让程序员直观的看到关于消息队列的相关情况,免除了繁杂的管理员命令。由于RocketMQ已经转移到apache旗下,所以已经没有原生的控制台网站了,可以使用git上的实例进行管理。具体安装步骤如下:
https://www.cnblogs.com/quchunhui/p/7284752.html
https://blog.csdn.net/hqwang4/article/details/79134958
注意:如果安装在阿里云,请在安全组中设置指定款口号指定ip开放
出现问题:
无法启动 Broker
查看 Broker 运行日志:
<span style="color:#000000"><code>tail -f ~/logs/rocketmqlogs/broker<span style="color:#4f4f4f">.</span><span style="color:#000088">log</span></code></span>
- 1
- 检查 JDK 版本是否为 64bit 1.6+,否则会报“connect to failed”。
- 开发环境 Broker 运行的机器内存不小于 2g; runbroker.sh 的 Java 参数最低: -Xms2g
-Xmx2g -Xmn512m;否则很容易报“java.lang.OutOfMemoryError: Java heap space”。生产
环境按照官方文档说法是内存越大越好。
测试程序访问异常
com.alibaba.rocketmq.client.exception.MQClientException: No route info of this topic, TopicTest1
- 启动 Broker 时是否加载了配置文件并指定 NameServer。
- NameServer 和 Broker 所在主机的防火墙是否允许访问。
- broker 配置文件是否为“autoCreateTopicEnable=true”,有网友说即使这个选项为 true,
也无法自动创建超过 4 个 Topic,需要手动创建,经测试并未发现此问题,估计新版已修复 Bug。
请注意:示例中的IP和路径要根据自己的情况进行修改。服务器请尽量选用同个平台的服务器,以免发生各种异常现象
http://www.cgpwyj.cn/
http://www.peacemind.com.cn/
http://www.tasknet.com.cn/
http://www.metroworld.com.cn/
http://www.cngodo.cn/
http://www.gzrdbp.cn/
http://www.dnapt.cn/
http://www.zgxxyp.cn/
http://www.sjjdvr.cn/
http://www.sujinkeji.cn/
http://www.zsjxbd.cn/
http://www.yesgas.cn/
http://www.quickpass.sh.cn/
http://www.jspcrm.cn/
http://www.yjdwpt.cn/
http://www.henanwulian.cn/
http://www.hhrshh.cn/
http://www.gpgold.cn/
http://www.jingzhuiyou.cn/