侧边栏壁纸
博主头像
zyixin

当你觉得为时已晚的时候,恰恰是最早的时候

  • 累计撰写 66 篇文章
  • 累计创建 0 个标签
  • 累计收到 1 条评论

目 录CONTENT

文章目录

rocketMQ集群部署

zyixin
2023-02-14 / 0 评论 / 0 点赞 / 5,136 阅读 / 3,494 字
温馨提示:
本文最后更新于 2023-02-15,若内容或图片失效,请留言反馈。部分素材来自网络,若不小心影响到您的利益,请联系我们删除。

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担任的消息转发和存储功能,其部署方式有很多种:

  1. 单Master
    优点:除了配置简单没什么优点。
    缺点:不可靠,该机器重启或宕机,将导致整个服务不可用。
  2. 多Master
    优点:配置简单,性能最高。
    缺点:可能会有少量消息丢失,单台机器重启或宕机期间,该机器下未被消费的消息在机器恢复前不可订阅,影响消息实时性。
  3. 异步多Master多Slave
    每个Master配一个Slave,有多对Master-Slave,集群采用异步复制方式,主备有短暂消息延迟,毫秒级。
    优点:性能同多Master几乎一样,实时性高,主备间切换对应用透明,不需人工干预。
    缺点:Master宕机或磁盘损坏时会有少量消息丢失。
  4. 同步多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
0

评论区