RocketMQ开发指导之二——RocketMQ部署

版权声明:本文为博主原创文章,商业转载请联系作者获得授权,非商业转载请注明出处。 https://blog.csdn.net/liitdar/article/details/87928544

本文为 RocketMQ 开发指导系列第二篇文章,主要介绍 RocketMQ 的部署方法,本文中 RocketMQ 采用“多Master多Slave(同步双写)”模式。

1 概述

1.1 操作系统及软件信息

本文中部署 RocketMQ 时,使用的操作系统和软件的信息如下:

软件名称 版本信息
操作系统 CentOS Linux release 7.3.1611, 64bit
JDK jdk1.8-1.8.0_201-fcs
MAVEN maven-3.6.0
GIT git version 1.8.3.1

1.2 服务器信息

本文中部署的 RocketMQ 包括2个 NameServer、2个 Master 和2个 Slave,所以在资源允许的条件下,需要6台服务器来进行部署工作的。受资源所限,本文中将使用2台服务器来进行部署。服务器的信息及用途如下:

服务器名称 服务器IP 用途
node1 192.168.213.128 NameServer-1、Master-1、Slave-1
node2 192.168.213.129 NameServer-2、Master-2、Slave-2

2 RocketMQ部署

2.1 安装JDK

执行下列操作,在服务器上安装 JDK。

1. 在 oracle 官网的下载页面(https://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html),找到对应的软件包,然后下载。在本文的示例中,我们需要下载 Linux x64 版本的 jdk 软件包,如下图:

2. 下载了上图所示的 jdk 软件包后,上传到服务器上,并使用 rpm 命令安装,如下:

[root@node1 /opt]# rpm -ivh jdk-8u201-linux-x64.rpm
warning: jdk-8u201-linux-x64.rpm: Header V3 RSA/SHA256 Signature, key ID ec551f03: NOKEY
Preparing...                          ################################# [100%]
Updating / installing...
   1:jdk1.8-2000:1.8.0_201-fcs        ################################# [100%]
Unpacking JAR files...
	tools.jar...
	plugin.jar...
	javaws.jar...
	deploy.jar...
	rt.jar...
	jsse.jar...
	charsets.jar...
	localedata.jar...
[root@node1 /opt]# 

3. 通过修改 .bash_profile 文件中新增如下内容,配置 JAVA 环境变量:

# Config for JDK
export JAVA_HOME=/usr/java/jdk1.8.0_201-amd64
export PATH=$JAVA_HOME/bin:$PATH

4. 运行如下命令,查看 jdk 是否安装成功:

[root@node1 ~]# java -version
java version "1.8.0_201"
Java(TM) SE Runtime Environment (build 1.8.0_201-b09)
Java HotSpot(TM) 64-Bit Server VM (build 25.201-b09, mixed mode)
[root@node1 ~]# 

出现上述查询结果,说明 jdk 安装成功了。

2.2 安装Maven

执行下列操作,在服务器上安装 Maven。

1. 在官网中下载 Maven 二进制包,链接为:https://maven.apache.org/download.cgi

2. 将下载的 Maven 二进制包上传到服务器上,并解压,如下:

[root@node1 /opt]# tar xvzf apache-maven-3.6.0-bin.tar.gz

3. 通过修改 .bash_profile 文件中新增如下内容(将解压后的 apache-maven 的 bin 文件夹路径添加到 PATH 环境变量中),配置 Maven 环境变量:

# Config for maven
export PATH=/opt/apache-maven-3.6.0/bin:$PATH

4. 运行如下命令,查看 maven 是否安装成功:

[root@node1 ~]# mvn -v
Apache Maven 3.6.0 (97c98ec64a1fdfee7767ce5ffb20918da4f719f3; 2018-10-25T02:41:47+08:00)
Maven home: /opt/apache-maven-3.6.0
Java version: 1.8.0_201, vendor: Oracle Corporation, runtime: /usr/java/jdk1.8.0_201-amd64/jre
Default locale: en_US, platform encoding: UTF-8
OS name: "linux", version: "3.10.0-514.el7.x86_64", arch: "amd64", family: "unix"
[root@node1 ~]# 

出现上述查询结果,说明 maven 安装成功了。

2.3 安装RocketMQ

执行以下操作,在服务器上安装 RocketMQ:

1. 获取 rocketmq 源码包,链接为:https://www.apache.org/dyn/closer.cgi?path=rocketmq/4.4.0/rocketmq-all-4.4.0-source-release.zip

2. 将 rocketmq 源码包上传到服务器上,并解压,如下:

[root@node1 ~]# cd /opt/
[root@node1 /opt]# unzip rocketmq-all-4.4.0-source-release.zip

3. 进入解压后的 rocketmq 文件夹中,运行 mvn 命令,构建 rocketmq 的二进制内容,如下:

[root@node1 /opt/rocketmq-all-4.4.0]# mvn -Prelease-all -DskipTests clean install -U

如果上述命令执行成功,则说明 rocketmq 安装完成了,rocketmq 的安装在文件夹 /opt/rocketmq-all-4.4.0/distribution/target/apache-rocketmq 之下。

2.4 配置RocketMQ

在完成了 RocketMQ 的安装之后,还需要对其进行配置。

2.4.1 配置NameServer

在 rocketmq 安装目录的 conf 文件夹下创建 NameServer 的配置文件,如下:

【node1服务器】:

[root@node1 /opt/rocketmq-all-4.4.0/distribution/target/apache-rocketmq/conf]# cat namesvc-1.properties 
# 监听端口
listenPort=9876
[root@node1 /opt/rocketmq-all-4.4.0/distribution/target/apache-rocketmq/conf]# 

【node2服务器】:

[root@node2 /opt/rocketmq-all-4.4.0/distribution/target/apache-rocketmq/conf]# cat namesvc-2.properties
# 监听端口
listenPort=9876
[root@node2 /opt/rocketmq-all-4.4.0/distribution/target/apache-rocketmq/conf]# 

2.4.2 配置Broker

在 rocketmq 安装目录的 conf 文件夹下,默认会提供几种常见模式的 broker 配置文件,由于本文部署的是“多Master多Slave(同步双写)”模式,对应的配置文件在 conf/2m-2s-sync 下,所以我们需要修改该目录下的配置文件。

说明:本文中所使用异步刷盘的持久化方式。

【node1服务器】:

node1服务器上的 Broker Master 的配置文件(broker-a.properties)内容如下:

# Licensed to the Apache Software Foundation (ASF) under one or more
# contributor license agreements.  See the NOTICE file distributed with
# this work for additional information regarding copyright ownership.
# The ASF licenses this file to You under the Apache License, Version 2.0
# (the "License"); you may not use this file except in compliance with
# the License.  You may obtain a copy of the License at
#
#     http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.

# 所属集群名字
brokerClusterName=DefaultCluster
# Broker名字。不同的Broker填写的不一样
brokerName=broker-a
# 0表示Master,>0表示Slave
brokerId=0
# 删除文件时间点,默认凌晨4点
deleteWhen=04
# 文件保留时间,默认48小时
fileReservedTime=48
# Broker角色,同步双写Master
brokerRole=SYNC_MASTER
# 刷盘方式(持久化),异步刷盘
flushDiskType=ASYNC_FLUSH
# NameServer地址,使用分号分割
namesrvAddr=192.168.213.128:9876;192.168.213.129:9876
# Broker对外服务的监听端口
listenPort=10911
# 是否允许Broker自动创建Topic,建议线下开启,线上关闭
#autoCreateTopicEnable=true
# 在发送消息时,自动创建服务器不存在的Topic,默认创建的队列数
#defaultTopicQueueNums=4
# 是否允许Broker自动创建订阅组,建议线下开启,线上关闭
#autoCreateSubscriptionGroup=true
# ConsumeQueue每个文件默认存30W条,根据业务情况调整
mapedFileSizeConsumeQueue=300000
# 存储路径
storePathRootDir=/opt/rocketmq-all-4.4.0/distribution/target/apache-rocketmq/workdir/a/store
# CommitLog存储路径
storePathCommitLog=/opt/rocketmq-all-4.4.0/distribution/target/apache-rocketmq/workdir/a/commitlog
# 消费队列存储路径
storePathConsumeQueue=/opt/rocketmq-all-4.4.0/distribution/target/apache-rocketmq/workdir/a/consumequeue
# 消息索引存储路径
storePathIndex=/opt/rocketmq-all-4.4.0/distribution/target/apache-rocketmq/workdir/a/index
# Checkpoint文件存储路径
storeCheckpoint=/opt/rocketmq-all-4.4.0/distribution/target/apache-rocketmq/a/checkpoint
# abort文件存储路径
abortFile=/opt/rocketmq-all-4.4.0/distribution/target/apache-rocketmq/workdir/a/abort
# 限制的消息大小
maxMessageSize=65536
# CommitLog每个文件的大小默认1G
#mapedFileSizeCommitLog=1073741824
#destroyMapedFileIntervalForcibly=120000
#redeleteHangedFileInterval=120000
# 检测物理文件磁盘空间
#diskMaxUsedSpaceRatio=88
#flushCommitLogLeastPages=4
#flushConsumeQueueLeastPages=2
#flushCommitLogThoroughInterval=10000
#flushConsumeQueueThoroughInterval=60000
#checkTransactionMessageEnable=false
# 发消息线程池数量
#sendMessageThreadPoolNums=128
# 拉消息线程池数量
#pullMessageThreadPoolNums=128

说明:brokerRole 的几个可选参数值为 ASYNC_MASTER(异步复制Master)、SYNC_MASTER(同步双写Master)及 SLAVE。

node1服务器上的 Broker Slave 的配置文件(broker-a-s.properties)与 Broker Master 大体相同,几个不同点如下:

# 0表示Master,>0表示Slave
brokerId=1
# Broker角色,同步双写Slave
brokerRole=SLAVE
# Broker对外服务的监听端口
listenPort=10921
# 存储路径
storePathRootDir=/opt/rocketmq-all-4.4.0/distribution/target/apache-rocketmq/workdir/a-s/store
# CommitLog存储路径
storePathCommitLog=/opt/rocketmq-all-4.4.0/distribution/target/apache-rocketmq/workdir/a-s/commitlog
# 消费队列存储路径
storePathConsumeQueue=/opt/rocketmq-all-4.4.0/distribution/target/apache-rocketmq/workdir/a-s/consumequeue
# 消息索引存储路径
storePathIndex=/opt/rocketmq-all-4.4.0/distribution/target/apache-rocketmq/workdir/a-s/index
# Checkpoint文件存储路径
storeCheckpoint=/opt/rocketmq-all-4.4.0/distribution/target/apache-rocketmq/a-s/checkpoint
# abort文件存储路径
abortFile=/opt/rocketmq-all-4.4.0/distribution/target/apache-rocketmq/workdir/a-s/abort

【node2服务器】:

node2服务器上的 Broker Master 的配置文件(broker-b.properties)与 node1 的大体相同,几个不同点如下:

# Broker名字。不同的Broker填写的不一样
brokerName=broker-b
# 存储路径
storePathRootDir=/opt/rocketmq-all-4.4.0/distribution/target/apache-rocketmq/workdir/b/store
# CommitLog存储路径
storePathCommitLog=/opt/rocketmq-all-4.4.0/distribution/target/apache-rocketmq/workdir/b/commitlog
# 消费队列存储路径
storePathConsumeQueue=/opt/rocketmq-all-4.4.0/distribution/target/apache-rocketmq/workdir/b/consumequeue
# 消息索引存储路径
storePathIndex=/opt/rocketmq-all-4.4.0/distribution/target/apache-rocketmq/workdir/b/index
# Checkpoint文件存储路径
storeCheckpoint=/opt/rocketmq-all-4.4.0/distribution/target/apache-rocketmq/b/checkpoint
# abort文件存储路径
abortFile=/opt/rocketmq-all-4.4.0/distribution/target/apache-rocketmq/workdir/b/abort

node2服务器上的 Broker Slave 的配置文件(broker-b-s.properties)与 Broker Master 的大体相同,几个不同点如下:

# 0表示Master,>0表示Slave
brokerId=1
# Broker角色,同步双写Slave
brokerRole=SLAVE
# Broker对外服务的监听端口
listenPort=10921
# 存储路径
storePathRootDir=/opt/rocketmq-all-4.4.0/distribution/target/apache-rocketmq/workdir/b-s/store
# CommitLog存储路径
storePathCommitLog=/opt/rocketmq-all-4.4.0/distribution/target/apache-rocketmq/workdir/b-s/commitlog
# 消费队列存储路径
storePathConsumeQueue=/opt/rocketmq-all-4.4.0/distribution/target/apache-rocketmq/workdir/b-s/consumequeue
# 消息索引存储路径
storePathIndex=/opt/rocketmq-all-4.4.0/distribution/target/apache-rocketmq/workdir/b-s/index
# Checkpoint文件存储路径
storeCheckpoint=/opt/rocketmq-all-4.4.0/distribution/target/apache-rocketmq/b-s/checkpoint
# abort文件存储路径
abortFile=/opt/rocketmq-all-4.4.0/distribution/target/apache-rocketmq/workdir/b-s/abort

2.4.3 修改NameServer服务配置

根据服务器的实际情况(如内存大小),修改 NameServer 服务的 JVM 配置。NameServer 服务的 JVM 配置在 rocketmq 的安装目录下的 bin/runserver.sh 中,修改该文件的如下内容:

JAVA_OPT="${JAVA_OPT} -server -Xms200m -Xmx200m -Xmn100m -XX:MetaspaceSize=128m -XX:MaxMetaspaceSize=320m"

说明:本文中将 JVM 堆的初始化值和最大值统一设置为200m,并将新生代大小设置为100m,主要是因为本文中用到的虚拟机内存容量不大,实际上在线上是可以配置为默认的4G堆内存的。

2.4.4 修改Broker服务配置

根据服务器的实际情况(如内存大小),修改 Broker 服务的 JVM 配置。Broker 服务的 JVM 配置在 rocketmq 的安装目录下的 bin/runbroker.sh 中,修改该文件的如下内容:

JAVA_OPT="${JAVA_OPT} -server -Xms300m -Xmx300m -Xmn200m"

2.5 启动服务

完成了 RocketMQ 的安装和配置之后,就可以启动 NameServer 和 Broker 了。

2.5.1 启动NameServer

首先启动 NameServer 服务。在 rocketmq 的安装目录下,运行如下命令:

【node1服务器】:

nohup sh bin/mqnamesrv -c conf/namesvc-1.properties &

【node2服务器】:

nohup sh bin/mqnamesrv -c conf/namesvc-2.properties &

2.5.2 启动Broker

NameServer 服务启动成功后,在 rocketmq 的安装目录下,运行如下命令,启动 Broker:

【node1服务器(Broker Master)】:

nohup sh bin/mqbroker -c conf/2m-2s-sync/broker-a.properties &

【node1服务器(Broker Slave)】:

nohup sh bin/mqbroker -c conf/2m-2s-sync/broker-a-s.properties &

【node2服务器(Broker Master)】:

nohup sh bin/mqbroker -c conf/2m-2s-sync/broker-b.properties &

【node2服务器(Broker Slave)】:

nohup sh bin/mqbroker -c conf/2m-2s-sync/broker-b-s.properties &

2.6 日志分析

默认情况下,NameServer 和 Broker 的日志存放在 ~/logs/rocketmqlogs/ 文件夹下,可以通过修改 conf 下的配置文件 logback_namesrv.xml 和 logback_broker.xml 改变日志的存放位置。

2.7 安装控制台

执行下列操作,安装 rocketmq 的控制台。

1. 获取 rocketmq 的控制台源码包(rocketmq-console),命令如下:

wget https://github.com/apache/rocketmq-externals/archive/rocketmq-console-1.0.0.tar.gz

2. 解压 rocketmq 控制台源码包,进入解压后的目录中,并执行如下命令安装 rocketmq-console:

mvn clean package -Dmaven.test.skip=true

3. 运行如下命令,启动 rocketmq 控制台:

java -jar target/rocketmq-console-ng-1.0.0.jar --server.port=12581 --rocketmq.config.namesrvAddr='192.168.213.128:9876;192.168.213.129:9876'

4. 在浏览器中输入 rocketmq-console 的部署服务器地址(如 http://192.168.213.128:12581/#/),即可打开 rocketmq 的控制台,如下图:

2.8 发送/接收消息

可以使用 rocketmq 自带的工具 tool.sh,测试 rocketmq 的发送和接收消息功能。

在发送/接收消息之前,我们需要设置 NameServer 的位置信息,RocketMQ 提供了多种方式供我们选择,简单起见,在这里我们使用环境变量 NAMESRV_ADDR。如下:

export NAMESRV_ADDR='192.168.213.128:9876;192.168.213.129:9876'

完成上述设置后,我们可以使用以下命令测试发送消息(充当生产者角色):

sh bin/tools.sh org.apache.rocketmq.example.quickstart.Producer

上述命令的部分运行结果如下:

从上面的运行结果可以看出,生产者的消息有的发往 broker-a、有的发往 broker-b 了,这说明 RocketMQ 自动实现了发送消息的负载均衡

然后使用如下命令测试接收消息(充当消费者角色):

sh bin/tools.sh org.apache.rocketmq.example.quickstart.Consumer

2.9 常用命令

1. 使用 mqshutdown 脚本停止 NameServer 或 Broker,命令如下:

sh bin/mqshutdown broker | namesrv

猜你喜欢

转载自blog.csdn.net/liitdar/article/details/87928544