RocketMQ集群部署
  GdS7BEfTyHLK 2023年11月02日 37 0

部署架构

说明

(1)Producer:生产者

(2)Consumer:消费者

(3)NameServer:RockerMQ的注册中心,多个实例组成集群,但相互独立,没有信息交换。每个Broker都向所有NameServer实例注册。

(4)Broker:负责存储消息、转发消息。

部署模式

RocketMQ作为消息中间件,其主要功能为消息的Publish/Subscribe。而Broker担任的消息转发和存储功能,其部署方式有很多种:

模式 优点 缺点 说明
单Master 配置简单 不可靠,该机器重启或宕机,将导致整个服务不可用
多Master 配置简单,性能最高 可能会有少量消息丢失,单台机器重启或宕机期间,该机器下未被消费的消息在机器恢复前不可订阅,影响消息实时性
异步多Master多Slave 性能同多Master几乎一样,实时性高,主备间切换对应用透明,不需人工干预 Master宕机或磁盘损坏时会有少量消息丢失 每个Master配一个Slave,有多对Master-Slave,集群采用异步复制方式,主备有短暂消息延迟,毫秒级
同步多Master多Slave 服务可用性与数据可用性非常高 性能比异步集群略低,当前版本主宕备不能自动切换为主 每个Master配一个Slave,有多对Master-Slave,集群采用同步双写方式,主备都写成功,向应用返回成功

部署环境

共三台机器,每台上分别布有一台主从。

主机IP 角色 备注
10.x.0.11 nameserver、broker-a-master、broker-b-slave rocketmq0001
10.x.0.12 nameserver、broker-b-master、broker-c-slave rocketmq0002
10.x.0.10 nameserver、broker-c-master、broker-a-slave rocketmq0003

安装 JDK

三台服务器都要操作

## 创建服务账号
useradd -d /home/rocketmq -m -s /bin/bash rocketmq
su - rocketmq
## 获取安装包
scp -r root@10.0.x.66:/root/soft-packages/jdk/jdk-8u333-linux-x64.tar.gz ~/
## 解压缩
tar zxvf /home/rocketmq/jdk-8u333-linux-x64.tar.gz
## 增加jdk的环境变量
# cat .bash_profile
export ROCKETMQ_HOME=/home/rocketmq/rocketmq-4.9.3
export JAVA_HOME=/home/rocketmq/jdk1.8.0_333
export CLASSPATH=%JAVA_HOME%/lib/tools.jar:$JAVA_HOME%lib/dt.jar
PATH=$JAVA_HOME/bin:$ROCKETMQ_HOME/bin:$PATH
export PATH
## 配置生效
source ~/.bash_profile

部署 RocketMQ

rocketmq安装包

## 获取安装包
scp -r root@10.0.x.66:/root/soft-packages/rocketmq/rocketmq-all-4.9.3-bin-release.zip /home/rocketmq
## 解压缩
unzip /home/rocketmq/rocketmq-all-4.9.3-bin-release.zip

新建目录

3m-3s-sync — 配置文件目录

logs — 日志目录

data — 数据目录

su - rocketmq
mkdir -pv rocketmq-4.9.3/conf/3m-3s-sync data logs

修改JVM内存参数

修改nameserver节点和broker节点的JVM参数。

修改nameserver节点JVM参数

修改启动JVM内存,修改/home/rocketmq/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"

修改broker节点JVM参数

修改JVM内存,修改/home/rocketmq/rocketmq-4.9.3/bin/runbroker.sh

## 原:
JAVA_OPT="${JAVA_OPT} -server -Xms8g -Xmx8g -Xmn4g"
## 改成:
JAVA_OPT="${JAVA_OPT} -server -Xms1g -Xmx1g -Xmn512m"

修改第一台节点配置文件(10.x.0.11)

一主一从,broker-a-master 和 broker-b-slave。

配置broker-a配置文件

# cat /home/rocketmq/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.x.0.11:9876;10.x.0.12:9876;10.x.0.10: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

说明

(1)相关存储路径,在首次启动时会自动创建。

(2)brokerName:主从两台主机,配置不相同。

(3)brokerId:主从两台主机,主配置0,从配置>0,这里配置1,(如果多个从,则依次递增)。

(4)brokerRole:主配置SYNC_MASTER,从配置SLAVE

(5)listenPort:监听端口,但是broker启动会在此基础上供监听三个端口,分别是:listenPort-2listenPortlistenPort+1

配置broker-b-s.properties配置文件

# cat /home/rocketmq/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.x.0.11:9876;10.x.0.12:9876;10.x.0.10: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

修改第二台节点配置文件(10.x.0.12)

一主一从,broker-b-master 和 broker-c-slave。

配置broker-b.properties

# cat /home/rocketmq/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.x.0.11:9876;10.x.0.12:9876;10.x.0.10: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

配置broker-c-s.properties配置文件

# cat /home/rocketmq/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.x.0.11:9876;10.x.0.12:9876;10.x.0.10: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

修改第三台节点配置文件(10.x.0.10)

一主一从,broker-c-master 和 broker-a-slave。

配置broker-c.properties

## cat /home/rocketmq/rocketmq-4.9.3/conf/3m-3s-sync/broker-c.properties

#所属集群名称
brokerClusterName=rocketmq-cluster
##broker名字,注意此处不同的配置文件填写的不一样
brokerName=broker-c
#0 表示 Master ,>0 表示 Slave
brokerId=0
#nameServer地址,多个用分号分割
namesrvAddr=10.x.0.11:9876;10.x.0.12:9876;10.x.0.10: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

配置broker-a-s.properties配置文件

## cat /home/rocketmq/rocketmq-4.9.3/conf/3m-3s-sync/broker-a-s.properties

########### Broker ###########
#所属集群名称
brokerClusterName=rocketmq-cluster
#broker名字
brokerName=broker-a
#0>表示master,>0表示slave
brokerId=1
listenPort=10900

#nameServer地址
namesrvAddr=10.x.0.11:9876;10.x.0.12:9876;10.x.0.10: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

启动RocketMQ

su - rocketmq

## 三台
nohup /home/rocketmq/rocketmq-4.9.3/bin/mqnamesrv &
## rocketmq0001
nohup sh  /home/rocketmq/rocketmq-4.9.3/bin/mqbroker  -c /home/rocketmq/rocketmq-4.9.3/conf/3m-3s-sync/broker-a.properties &
## rocketmq0001
nohup sh  /home/rocketmq/rocketmq-4.9.3/bin/mqbroker  -c /home/rocketmq/rocketmq-4.9.3/conf/3m-3s-sync/broker-b-s.properties &
## rocketmq0002
nohup sh  /home/rocketmq/rocketmq-4.9.3/bin/mqbroker  -c /home/rocketmq/rocketmq-4.9.3/conf/3m-3s-sync/broker-b.properties &
## rocketmq0002
nohup sh  /home/rocketmq/rocketmq-4.9.3/bin/mqbroker  -c /home/rocketmq/rocketmq-4.9.3/conf/3m-3s-sync/broker-c-s.properties &
## rocketmq0003
nohup sh  /home/rocketmq/rocketmq-4.9.3/bin/mqbroker  -c /home/rocketmq/rocketmq-4.9.3/conf/3m-3s-sync/broker-c.properties &
## rocketmq0003
nohup sh  /home/rocketmq/rocketmq-4.9.3/bin/mqbroker  -c /home/rocketmq/rocketmq-4.9.3/conf/3m-3s-sync/broker-a-s.properties &

参考文档

【版权声明】本文内容来自摩杜云社区用户原创、第三方投稿、转载,内容版权归原作者所有。本网站的目的在于传递更多信息,不拥有版权,亦不承担相应法律责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@moduyun.com

  1. 分享:
最后一次编辑于 2023年11月08日 0

暂无评论

推荐阅读