RocketMQ介绍(二)——RocketMQ部署

本文详细介绍如何在多台服务器上部署RocketMQ,采用多Master多Slave模式,并覆盖JDK、Maven等软件安装,RocketMQ配置及启动过程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

本系列文章主要介绍RocketMQ的相关知识,并通过示例代码介绍RocketMQ的使用方法。

本文为系列文章的第二篇,主要介绍RocketMQ的部署方法。

说明:本文中RocketMQ采用“多Master多Slave(同步双写)”模式。

1 概述

1.1 操作系统及软件信息

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

软件名称版本信息
操作系统CentOS Linux release 7.3.1611, 64bit
JDKjdk1.8-1.8.0_201-fcs
MAVENmaven-3.6.0
GITgit version 1.8.3.1

1.2 服务器信息

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

服务器名称服务器IP用途
node1192.168.213.128NameServer-1、Master-1、Slave-1
node2192.168.213.129NameServer-2、Master-2、Slave-2

2 RocketMQ部署

2.1 安装JDK

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

1. 在Oracle官网的下载页面(Java Downloads | Oracle),找到对应的JDK软件包,然后下载。在本文的示例中,需要下载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二进制包,链接为:Maven – Download Apache Maven

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源码包,链接为:Apache Download Mirrors

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

关于RocketMQ编程示例的具体内容,请参考本系列文章的第三篇

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

liitdar

赠人玫瑰,手有余香,君与吾共勉

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值