1. 简介rocketMQ
RocektMQ是阿里巴巴在2012年开源的一个纯java、分布式、队列模型的第三代消息中间件,不仅在传统高频交易链路有着低延迟的出色表现,在实时计算等大数据领域也有着不错的吞吐。
2016年11月11号,双十一大促见证了RocketMQ低延迟存储架构的成功试水,99.996%的延迟落在了10ms以内,极个别由于GC引发的停顿在50ms以内,其高性能、低延时和高可靠的特性承载了近年来双十一17万笔/秒的交易峰值,在整个生产链路上都有着稳定和出色的表现。其在同年捐赠给Apache后正式进入孵化期。并于2017年9月RocketMQ正式从Apache社区正式毕业,成为Apache顶级项目。
1.1 集群部署概述
RocketMQ部署结构图:
各部分说明:
(1)Producer:生产者
(2)Consumer:消费者
(3)NameServer:RockerMQ的注册中心,多个实例组成集群,但相互独立,没有信息交换。每个Broker都向所有NameServer实例注册。
(4)Broker:负责存储消息、转发消息。
1.2 RocketMQ集群部署模式
RocketMQ作为消息中间件,其主要功能为消息的Publish/Subscribe。而Broker担任的消息转发和存储功能,其部署方式有很多种:
- 单Master
优点:除了配置简单没什么优点。
缺点:不可靠,该机器重启或宕机,将导致整个服务不可用。 - 多Master
优点:配置简单,性能最高。
缺点:可能会有少量消息丢失,单台机器重启或宕机期间,该机器下未被消费的消息在机器恢复前不可订阅,影响消息实时性。 - 异步多Master多Slave
每个Master配一个Slave,有多对Master-Slave,集群采用异步复制方式,主备有短暂消息延迟,毫秒级。
优点:性能同多Master几乎一样,实时性高,主备间切换对应用透明,不需人工干预。
缺点:Master宕机或磁盘损坏时会有少量消息丢失。 - 同步多Master多Slave
每个Master配一个Slave,有多对Master-Slave,集群采用同步双写方式,主备都写成功,向应用返回成功。
优点:服务可用性与数据可用性非常高。
缺点:性能比异步集群略低,当前版本主宕备不能自动切换为主。
2. 部署
此处就RocketMQ的多Master多Slave的模式在Linux服务器部署案例进行详细的说明,如系统部署结构图所示。
2.1 本次部署环境
共三台机器,每台上分别布有一台主从。
主机ip | 角色 |
---|---|
10.130.77.43 | nameserver、broker-a-master、broker-b-slave |
10.130.77.20 | nameserver、broker-b-master、broker-c-slave |
10.130.77.45 | nameserver、broker-c-master、broker-a-slave |
2.2 安装包下载
官方下载地址:https://rocketmq.apache.org/
2.3 JDK
需依赖jdk
2.4 新建用户,解压安装包
三台服务器都需要操作
useradd rocketmq
su - rocketmq
rz -E rocketmq-all-4.9.3-bin-release.zip jdk-8u144-linux-x64.tar.gz
unzip rocketmq-all-4.9.3-bin-release.zip
tar -zxf jdk-8u144-linux-x64.tar.gz
修改jdk环境变量
vim ~/.bash_profile
export ROCKETMQ_HOME=/home/rocketmq
export JAVA_HOME=/home/rocketmq/jdk1.8.0_144
export CLASSPATH=%JAVA_HOME%/lib/tools.jar:$JAVA_HOME%lib/dt.jar
PATH=$JAVA_HOME/bin:$ROCKETMQ_HOME/bin:$PATH
source ~/.bash_profile
2.5 新建相关目录
三台机器都需要操作
3m-3s-sync — 配置文件目录
logs — 日志目录
data — 数据目录
cd ~
mkdir -pv rocketmq-4.9.3/conf/3m-3s-sync data logs
2.6 修改JVM内存参数
(1)修改nameserver节点JVM参数
修改启动JVM内存
修改rocketmq-4.9.3/bin/runserver.sh
原:
JAVA_OPT="${JAVA_OPT} -server -Xms4g -Xmx4g -Xmn2g -XX:MetaspaceSize=128m -XX:MaxMetaspaceSize=320m"
改成:
JAVA_OPT="${JAVA_OPT} -server -Xms512m -Xmx512m -Xmn256m -XX:MetaspaceSize=128m -XX:MaxMetaspaceSize=320m"
(2)修改broker节点JVM参数
修改JVM内存
修改rocketmq-4.9.3/bin/runbroker.sh
原:
JAVA_OPT="${JAVA_OPT} -server -Xms8g -Xmx8g -Xmn4g"
改成:
JAVA_OPT="${JAVA_OPT} -server -Xms1g -Xmx1g -Xmn512m"
2.7 修改第一台节点配置文件
(1)配置broker-a配置文件
vim rocketmq-4.9.3/conf/3m-3s-sync/broker-a.properties
#所属集群名称
brokerClusterName=rocketmq-cluster
##broker名字,注意此处不同的配置文件填写的不一样
brokerName=broker-a
#0 表示 Master ,>0 表示 Slave
brokerId=0
#nameServer地址,多个用分号分割
namesrvAddr=10.130.77.43:9876;10.130.77.20:9876;10.130.77.45:9876
#在发送消息时,自动创建服务器不存在的topic,默认创建的队列数
defaultTopicQueueNums=4
#是否允许 Broker 自动创建Topic,建议线下开启,线上关闭
autoCreateTopicEnable=false
#是否允许 Broker 自动创建订阅组,建议线下开启,线上关闭
autoCreateSubscriptionGroup=false
#Broker 对外服务的监听端口
listenPort=10911
haListenPort=10912
#删除文件时间点,默认凌晨 4点
deleteWhen=04
#文件保留时间,默认 48 小时
fileReservedTime=720
#commitLog每个文件的大小默认1G
mapedFileSizeCommitLog=1073741824
# consumeQueue每个文件默认存30w条,根据自身业务进行调整
mapedFileSizeConsumeQueue=300000
destroyMapedFileInterval=120000
redeleteHangedFileInterval=120000
# 检查物理文件磁盘空间
diskMaxUsedSpaceRatio=75
#存储路径
storePathRootDir=/home/rocketmq/data/rocketmq/store/broker-a
#commitlog 存储路径
storePathCommitLog=/home/rocketmq/data/rocketmq/store/broker-a/commitlog
#消费队列存储路径存储路径
storePathConsumeQueue=/home/rocketmq/data/rocketmq/store/consumequeue
#消息索引存储路径
storePathIndex=/home/rocketmq/data/rocketmq/store/index
#checkpoint 文件存储路径
storeCheckpoint=/home/rocketmq/data/rocketmq/store/checkpoint
#abort 文件存储路径
abortFile=/home/rocketmq/data/rocketmq/store/abort
#限制的消息大小
maxMessageSize=65536
flushCommitLogLeastPages=4
flushConsumeQueueLeastPages=2
flushCommitLogThoroughInterval=10000
flushConsumeQueueThoroughInterval=60000
checkTransactionMessageEnable=false
#发消息线程池数量
sendMessageThreadPoolNums=128
#拉消息线程池数量
pullMessageThreadPoolNums=128
#Broker 的角色
#- ASYNC_MASTER 异步复制Master
#- SYNC_MASTER 同步双写Master
#- SLAVE
brokerRole=SYNC_MASTER
#刷盘方式
#- ASYNC_FLUSH 异步刷盘
#- SYNC_FLUSH 同步刷盘
flushDiskType=SYNC_FLUSH
注:
a)相关存储路径,在首次启动时会自动创建,主从两台主机就配置相同路径
b)注意不同点配置
brokerName:主从两台主机,配置相同
brokerId:主从两台主机,主配置0,从配置>0,这里配置1,(如果多个从,则依次递增)
brokerRole:主配置SYNC_MASTER,从配置SLAVE
listenPort:监听端口,但是broker启动会在此基础上供监听三个端口,分别是:listenPort-2、listenPort、listenPort+1。
(2)配置broker-b-s.properties配置文件
vim rocketmq-4.9.3/conf/3m-3s-sync/broker-b-s.properties
########### Broker ###########
#所属集群名称
brokerClusterName=rocketmq-cluster
#broker名字
brokerName=broker-b
#0>表示master,>0表示slave
brokerId=1
listenPort=10900
#nameServer地址
namesrvAddr=10.130.77.43:9876;10.130.77.20:9876;10.130.77.45:9876
########### Topic ###########
#默认的Topic队列数,默认是4
defaultTopicQueueNums=4
# 是否允许broker自动创建topic,建议线下开启,线上关闭
autoCreateTopicEnable=false
# 是否允许broker自动创建订阅组,建议线下开始,线上关闭
autoCreateSubscriptionGroup=false
########### CommitLog ###########
#存储路径
storePathRootDir=/home/rocketmq/data/rocketmq/store/broker-b-s
#commitLog 存储路径
storePathCommitLog=/home/rocketmq/data/rocketmq/store/broker-b-s/commitlog
deleteWhen=04
fileReservedTime=360
mapedFileSizeCommitLog=1073741824
# consumeQueue每个文件默认存30w条,根据自身业务进行调整
mapedFileSizeConsumeQueue=300000
destroyMapedFileInterval=120000
redeleteHangedFileInterval=120000
# 检查物理文件磁盘空间
diskMaxUsedSpaceRatio=80
maxMessageSize=65536
flushCommitLogLeastPages=4
flushConsumeQueueLeastPages=2
flushCommitLogThoroughInterval=10000
flushConsumeQueueThoroughInterval=60000
#broker角色,ASYNC_MASTER=异步复制Master,SYNC_MASTER=同步双写Master,SLAVE=slave节点
brokerRole=SLAVE
#刷盘方式,ASYNC_FLUSH=异步刷盘,SYNC_FLUSH=同步刷盘
flushDiskType=SYNC_FLUSH
checkTransactionMessageEnable=false
# 发消息线程池数量
sendMessageTreadPoolNums=128
# 拉消息线程池数量
pullMessageTreadPoolNums=128
2.7 修改第二台节点配置文件
(1)配置broker-b.properties
vim rocketmq-4.9.3/conf/3m-3s-sync/broker-b.properties
#所属集群名称
brokerClusterName=rocketmq-cluster
##broker名字,注意此处不同的配置文件填写的不一样
brokerName=broker-b
#0 表示 Master ,>0 表示 Slave
brokerId=0
#nameServer地址,多个用分号分割
namesrvAddr=10.130.77.43:9876;10.130.77.20:9876;10.130.77.45:9876
#在发送消息时,自动创建服务器不存在的topic,默认创建的队列数
defaultTopicQueueNums=4
#是否允许 Broker 自动创建Topic,建议线下开启,线上关闭
autoCreateTopicEnable=false
#是否允许 Broker 自动创建订阅组,建议线下开启,线上关闭
autoCreateSubscriptionGroup=false
#Broker 对外服务的监听端口
listenPort=10911
haListenPort=10912
#删除文件时间点,默认凌晨 4点
deleteWhen=04
#文件保留时间,默认 48 小时
fileReservedTime=720
#commitLog每个文件的大小默认1G
mapedFileSizeCommitLog=1073741824
# consumeQueue每个文件默认存30w条,根据自身业务进行调整
mapedFileSizeConsumeQueue=300000
destroyMapedFileInterval=120000
redeleteHangedFileInterval=120000
# 检查物理文件磁盘空间
diskMaxUsedSpaceRatio=75
#存储路径
storePathRootDir=/home/rocketmq/data/rocketmq/store/broker-b
#commitlog 存储路径
storePathCommitLog=/home/rocketmq/data/rocketmq/store/broker-b/commitlog
#消费队列存储路径存储路径
storePathConsumeQueue=/home/rocketmq/data/rocketmq/store/consumequeue
#消息索引存储路径
storePathIndex=/home/rocketmq/data/rocketmq/store/index
#checkpoint 文件存储路径
storeCheckpoint=/home/rocketmq/data/rocketmq/store/checkpoint
#abort 文件存储路径
abortFile=/home/rocketmq/data/rocketmq/store/abort
#限制的消息大小
maxMessageSize=65536
flushCommitLogLeastPages=4
flushConsumeQueueLeastPages=2
flushCommitLogThoroughInterval=10000
flushConsumeQueueThoroughInterval=60000
checkTransactionMessageEnable=false
#发消息线程池数量
sendMessageThreadPoolNums=128
#拉消息线程池数量
pullMessageThreadPoolNums=128
#Broker 的角色
#- ASYNC_MASTER 异步复制Master
#- SYNC_MASTER 同步双写Master
#- SLAVE
brokerRole=SYNC_MASTER
#刷盘方式
#- ASYNC_FLUSH 异步刷盘
#- SYNC_FLUSH 同步刷盘
flushDiskType=SYNC_FLUSH
(2)配置broker-c-s.properties配置文件
vim rocketmq-4.9.3/conf/3m-3s-sync/broker-c-s.properties
########### Broker ###########
#所属集群名称
brokerClusterName=rocketmq-cluster
#broker名字
brokerName=broker-c
#0>表示master,>0表示slave
brokerId=1
listenPort=10900
#nameServer地址
namesrvAddr=10.130.77.43:9876;10.130.77.20:9876;10.130.77.45:9876
########### Topic ###########
#默认的Topic队列数,默认是4
defaultTopicQueueNums=4
# 是否允许broker自动创建topic,建议线下开启,线上关闭
autoCreateTopicEnable=false
# 是否允许broker自动创建订阅组,建议线下开始,线上关闭
autoCreateSubscriptionGroup=false
########### CommitLog ###########
#存储路径
storePathRootDir=/home/rocketmq/data/rocketmq/store/broker-c-s
#commitLog 存储路径
storePathCommitLog=/home/rocketmq/data/rocketmq/store/broker-c-s/commitlog
deleteWhen=04
fileReservedTime=360
mapedFileSizeCommitLog=1073741824
# consumeQueue每个文件默认存30w条,根据自身业务进行调整
mapedFileSizeConsumeQueue=300000
destroyMapedFileInterval=120000
redeleteHangedFileInterval=120000
# 检查物理文件磁盘空间
diskMaxUsedSpaceRatio=80
maxMessageSize=65536
flushCommitLogLeastPages=4
flushConsumeQueueLeastPages=2
flushCommitLogThoroughInterval=10000
flushConsumeQueueThoroughInterval=60000
#broker角色,ASYNC_MASTER=异步复制Master,SYNC_MASTER=同步双写Master,SLAVE=slave节点
brokerRole=SLAVE
#刷盘方式,ASYNC_FLUSH=异步刷盘,SYNC_FLUSH=同步刷盘
flushDiskType=SYNC_FLUSH
checkTransactionMessageEnable=false
# 发消息线程池数量
sendMessageTreadPoolNums=128
# 拉消息线程池数量
pullMessageTreadPoolNums=128
2.8 修改第三台节点配置文件
(1)配置broker-c.properties
vim rocketmq-4.9.3/conf/3m-3s-sync/broker-c.properties
#所属集群名称
brokerClusterName=rocketmq-cluster
##broker名字,注意此处不同的配置文件填写的不一样
brokerName=broker-b
#0 表示 Master ,>0 表示 Slave
brokerId=0
#nameServer地址,多个用分号分割
namesrvAddr=10.130.77.43:9876;10.130.77.20:9876;10.130.77.45:9876
#在发送消息时,自动创建服务器不存在的topic,默认创建的队列数
defaultTopicQueueNums=4
#是否允许 Broker 自动创建Topic,建议线下开启,线上关闭
autoCreateTopicEnable=false
#是否允许 Broker 自动创建订阅组,建议线下开启,线上关闭
autoCreateSubscriptionGroup=false
#Broker 对外服务的监听端口
listenPort=10911
haListenPort=10912
#删除文件时间点,默认凌晨 4点
deleteWhen=04
#文件保留时间,默认 48 小时
fileReservedTime=720
#commitLog每个文件的大小默认1G
mapedFileSizeCommitLog=1073741824
# consumeQueue每个文件默认存30w条,根据自身业务进行调整
mapedFileSizeConsumeQueue=300000
destroyMapedFileInterval=120000
redeleteHangedFileInterval=120000
# 检查物理文件磁盘空间
diskMaxUsedSpaceRatio=75
#存储路径
storePathRootDir=/home/rocketmq/data/rocketmq/store/broker-c
#commitlog 存储路径
storePathCommitLog=/home/rocketmq/data/rocketmq/store/broker-c/commitlog
#消费队列存储路径存储路径
storePathConsumeQueue=/home/rocketmq/data/rocketmq/store/consumequeue
#消息索引存储路径
storePathIndex=/home/rocketmq/data/rocketmq/store/index
#checkpoint 文件存储路径
storeCheckpoint=/home/rocketmq/data/rocketmq/store/checkpoint
#abort 文件存储路径
abortFile=/home/rocketmq/data/rocketmq/store/abort
#限制的消息大小
maxMessageSize=65536
flushCommitLogLeastPages=4
flushConsumeQueueLeastPages=2
flushCommitLogThoroughInterval=10000
flushConsumeQueueThoroughInterval=60000
checkTransactionMessageEnable=false
#发消息线程池数量
sendMessageThreadPoolNums=128
#拉消息线程池数量
pullMessageThreadPoolNums=128
#Broker 的角色
#- ASYNC_MASTER 异步复制Master
#- SYNC_MASTER 同步双写Master
#- SLAVE
brokerRole=SYNC_MASTER
#刷盘方式
#- ASYNC_FLUSH 异步刷盘
#- SYNC_FLUSH 同步刷盘
flushDiskType=SYNC_FLUSH
(2)配置broker-a-s.properties配置文件
vim rocketmq-4.9.3/conf/3m-3s-sync/broker-a-s.properties
########### Broker ###########
#所属集群名称
brokerClusterName=rocketmq-cluster
#broker名字
brokerName=broker-c
#0>表示master,>0表示slave
brokerId=1
listenPort=10900
#nameServer地址
namesrvAddr=10.130.77.43:9876;10.130.77.20:9876;10.130.77.45:9876
########### Topic ###########
#默认的Topic队列数,默认是4
defaultTopicQueueNums=4
# 是否允许broker自动创建topic,建议线下开启,线上关闭
autoCreateTopicEnable=false
# 是否允许broker自动创建订阅组,建议线下开始,线上关闭
autoCreateSubscriptionGroup=false
########### CommitLog ###########
#存储路径
storePathRootDir=/home/rocketmq/data/rocketmq/store/broker-a-s
#commitLog 存储路径
storePathCommitLog=/home/rocketmq/data/rocketmq/store/broker-a-s/commitlog
deleteWhen=04
fileReservedTime=360
mapedFileSizeCommitLog=1073741824
# consumeQueue每个文件默认存30w条,根据自身业务进行调整
mapedFileSizeConsumeQueue=300000
destroyMapedFileInterval=120000
redeleteHangedFileInterval=120000
# 检查物理文件磁盘空间
diskMaxUsedSpaceRatio=80
maxMessageSize=65536
flushCommitLogLeastPages=4
flushConsumeQueueLeastPages=2
flushCommitLogThoroughInterval=10000
flushConsumeQueueThoroughInterval=60000
#broker角色,ASYNC_MASTER=异步复制Master,SYNC_MASTER=同步双写Master,SLAVE=slave节点
brokerRole=SLAVE
#刷盘方式,ASYNC_FLUSH=异步刷盘,SYNC_FLUSH=同步刷盘
flushDiskType=SYNC_FLUSH
checkTransactionMessageEnable=false
# 发消息线程池数量
sendMessageTreadPoolNums=128
# 拉消息线程池数量
pullMessageTreadPoolNums=128
评论区