本系列文章主要介绍 RocketMQ 的相关知识,并通过示例代码介绍 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),找到对应的 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 二进制包,链接为: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

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

RocketMQ开发指导之二——RocketMQ部署相关推荐

  1. RocketMQ学习笔记(二)

    第六章 RocketMQ生产者核心配置和核心知识讲解 第1集 消息队列RocketMQ4.X生产者核心配置讲解 简介:消息队列RocketMQ4.X核心配置讲解 生产者常见核心配置 compressM ...

  2. RocketMQ开发规范

    前言 消息队列 RocketMQ 版是基于 Apache RocketMQ 构建的低延迟.高并发.高可用.高可靠的分布式消息中间件.消息队列 RocketMQ 版既可为分布式应用系统提供异步解耦和削峰 ...

  3. RocketMQ 简单梳理 及 集群部署笔记【转】

    一.RocketMQ 基础知识介绍 Apache RocketMQ是阿里开源的一款高性能.高吞吐量.队列模型的消息中间件的分布式消息中间件. 上图是一个典型的消息中间件收发消息的模型,RocketMQ ...

  4. RocketMQ 简单梳理 及 集群部署笔记

    一.RocketMQ 基础知识介绍 Apache RocketMQ是阿里开源的一款高性能.高吞吐量.队列模型的消息中间件的分布式消息中间件. 上图是一个典型的消息中间件收发消息的模型,RocketMQ ...

  5. 边缘计算网关linux开发,边缘计算网关(BMG800系列)二次开发指导手册

    边缘计算网关二次开发指导手册 库函数接口介绍 (适用于:BMG800系列) 目录 1. 获取温湿度(硬件设备为sht10) 2. 获取大气压(硬件设备为bmp180) 3. 读取ADC值(硬件设备为m ...

  6. RocketMQ源码分析之RocketMQ事务消息实现原理上篇(二阶段提交)

    在阅读本文前,若您对RocketMQ技术感兴趣,请加入 RocketMQ技术交流群 根据上文的描述,发送事务消息的入口为: TransactionMQProducer#sendMessageInTra ...

  7. RocketMQ实战与原理---安装、部署及简单应用

    RocketMQ实战与原理 第一章  安装.部署及简单应用 1. 安装 1.1 下载RocketMQ 2. 部署 2.1 部署nameserver 2.2 部署broker 2.3 新增Topic 3 ...

  8. Vista Media Center 开发之深入浅出 (二) --Vista Media Center 程序的新建及部署

    原文: http://www.cnblogs.com/wangmiao/articles/1306292.html Vista Media Center 开发之深入浅出 (二) ----- Vista ...

  9. 区块链开发(二)部署和运行第一个以太坊智能合约

    区块链开发(二)部署并运行第一个以太坊智能合约 李赫2016年8月22日 本文首发8BTC 网络上不少部署智能合约的文章,但是都有一个共同的特点,就是采用命令行的方式来部署,先是建立SOLC的编译环境 ...

  10. 涂鸦智能CBU二次开发指导手册入门版——智能灯

    涂鸦智能灯例程是一个非常好的源码,其中包括了GPIO操作完成的引脚控制,模拟IIC,输出PWM,tuyaOS日志控制模块等,所以如果可以拿下智能灯例程,那么关于模块IIC通讯,电机控制等方面的设计要求 ...

最新文章

  1. Only the original thread that created a view hierarchy can touch its views.
  2. notepad 查找php函数,Notepad++中常用的技巧总结
  3. [Java] HashMap遍历的两种方式
  4. Google DeepMind围棋程序AlphaGo的分析
  5. 试用去水印_教你一键视频去水印,支持抖音、快手、小红书、哔哩哔哩等几十个平台...
  6. 学习deercao的正则笔记
  7. sklearn分类器:朴素贝叶斯
  8. PHP递归删除目录及目录下的文件
  9. ICE专题:编译环境构建
  10. 帆软超级链接对象、插入子报表、网页框传参的个人使用心得
  11. Web Worker API
  12. Coredump-N, segfault at 0 ip 0000000000000000 sp; 被kernel 抓到
  13. 系统篇: ext4 文件系统
  14. windows无法打开添加打印机_PDF-XChange Lite(pdf虚拟打印机)正式版下载-PDF-XChange Lite(pdf虚拟打印机)v8.0.342.0最新版下载...
  15. 音频(四) - 音频压缩(Speex使用Opus简介)
  16. 打砖块游戏-第12届蓝桥杯Scratch省赛1真题第5题
  17. 互联网让中国零售业弯道超车:近创新比黑科技重要
  18. php的left join,Left Join
  19. 超详细markdown语法和typora教程
  20. 【bug】data functions should return an object

热门文章

  1. node-gyp 出错
  2. 如果出现网络请求3840的这种错误
  3. C#强制关闭Excel进程(通过COM使用Excel时)
  4. 201521123026《Java程序设计》第2周学习总结
  5. PL/SQL数据类型
  6. Google搜索命令语法大全
  7. PHP获取当前文件路径,上层目录路径
  8. find的详细用法及其例子
  9. Ruby on Rails -跑起来吧hello World!
  10. credential for git