RocketMQ集群搭建

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档


一、前言

一个完整的RocketMQ集群中,有如下几个角色:

  • Producer:消息的发送者。举例:发信者
  • Consumer:消息接收者。举例:收信者
  • Broker:暂存和传输消息。举例:邮局
  • NameServer:管理Broker;举例:各个邮局的管理机构
  • Topic:区分消息的种类;一个发送者可以发送消息给一个或者多个Topic;
    一个消息的接收者可以订阅一个或者多个Topic消息。
  • Message Queue:相当于是Topic的分区,用于并行发送和接收消息。

二、RocketMQ集群搭建

1.实验环境

1.1 准备三台虚拟机,硬盘空间建议大于4G。配置机器名。

# vi /etc/hosts 
192.168.242.129 worker1 
192.168.242.128 worker2 
192.168.242.130 worker3
# 关闭防火墙
systemctl stop firewalld.service
firewall-cmd --state

RocketMQ包:rocketmq-all-4.9.3-bin-release.zip
1.2 配置RocketMq环境变量:

vi ~/.bash_profile

Alt

2.为了更方便理解,以下图为准:

在这里插入图片描述

2.1 配置第一组broker-a

在worker2上先配置borker-a的master节点。先配置2m-2s-async/brokera.properties

 #所属集群名字,名字一样的节点就在同一个集群内
brokerClusterName=rocketmq-cluster

#broker名字,名字一样的节点就是一组主从节点。
brokerName=broker-a

#brokerid,0就表示是Master,>0的都是表示Slave
brokerId=0

#nameServer地址,分号分割
namesrvAddr=worker1:9876;worker2:9876;worker3:9876

#在发送消息时,自动创建服务器不存在的topic,默认创建的队列数
defaultTopicQueueNums=4

#是否允许Broker自动创建Topic,建议线下开启,线上关闭
autoCreateTopicEnable=true

#是否允许Broker自动创建订阅组,建议线下开启,线上关闭
autoCreateSubscriptionGroup=true

#Broker对外服务的监听端口
listenPort=10911

#删除文件时间点,默认凌晨4点
deleteWhen=04

#文件保留时间,默认48小时
fileReservedTime=120

#commitLog每个文件的大小默认1G
mapedFileSizeCommitLog=1073741824

#ConsumeQueue每个文件默认存30W条,根据业务情况调整
mapedFileSizeConsumeQueue=300000
#destroyMapedFileIntervalForcibly=120000
#redeleteHangedFileInterval=120000

#检测物理文件磁盘空间
diskMaxUsedSpaceRatio=88

#存储路径
storePathRootDir=/app/rocketmq/store

#commitLog存储路径
storePathCommitLog=/app/rocketmq/store/commitlog

#消费队列存储路径存储路径
storePathConsumeQueue=/app/rocketmq/store/consumequeue

#消息索引存储路径
storePathIndex=/app/rocketmq/store/index

#checkpoint文件存储路径
storeCheckpoint=/app/rocketmq/store/checkpoint

#abort文件存储路径
abortFile=/app/rocketmq/store/abort

#限制的消息大小
maxMessageSize=65536
#flushCommitLogLeastPages=4
#flushConsumeQueueLeastPages=2
#flushCommitLogThoroughInterval=10000
#flushConsumeQueueThoroughInterval=60000

#Broker的角色
#-ASYNC_MASTER异步复制Master
#-SYNC_MASTER同步双写Master
#-SLAVE
brokerRole=ASYNC_MASTER

#刷盘方式
#-ASYNC_FLUSH 异步刷盘
#-SYNC_FLUSH 同步刷盘
flushDiskType=ASYNC_FLUSH
#checkTransactionMessageEnable=false
#发消息线程池数量
#sendMessageThreadPoolNums=128
#拉消息线程池数量
#pullMessageThreadPoolNums=128

worker3上。修改2m-2s-async/broker-a-s.properties

#所属集群名字,名字一样的节点就在同一个集群内
brokerClusterName=rocketmq-cluster

#broker名字,名字一样的节点就是一组主从节点。
brokerName=broker-a
#brokerid,0就表示是Master,>0的都是表示Slave
brokerId=1

#nameServer地址,分号分割
namesrvAddr=worker1:9876;worker2:9876;worker3:9876

#在发送消息时,自动创建服务器不存在的topic,默认创建的队列数
defaultTopicQueueNums=4

#是否允许Broker自动创建Topic,建议线下开启,线上关闭
autoCreateTopicEnable=true

#是否允许Broker自动创建订阅组,建议线下开启,线上关闭
autoCreateSubscriptionGroup=true

#Broker对外服务的监听端口
listenPort=11011

#删除文件时间点,默认凌晨4点
deleteWhen=04

#文件保留时间,默认48小时
fileReservedTime=120

#commitLog每个文件的大小默认1G
mapedFileSizeCommitLog=1073741824

#ConsumeQueue每个文件默认存30W条,根据业务情况调整
mapedFileSizeConsumeQueue=300000
#destroyMapedFileIntervalForcibly=120000
#redeleteHangedFileInterval=120000

#检测物理文件磁盘空间
diskMaxUsedSpaceRatio=88

#存储路径
storePathRootDir=/app/rocketmq/storeSlave

#commitLog存储路径
storePathCommitLog=/app/rocketmq/storeSlave/commitlog

#消费队列存储路径存储路径
storePathConsumeQueue=/app/rocketmq/storeSlave/consumequeue

#消息索引存储路径
storePathIndex=/app/rocketmq/storeSlave/index

#checkpoint文件存储路径
storeCheckpoint=/app/rocketmq/storeSlave/checkpoint

#abort文件存储路径
abortFile=/app/rocketmq/storeSlave/abort

#限制的消息大小
maxMessageSize=65536
#flushCommitLogLeastPages=4
#flushConsumeQueueLeastPages=2
#flushCommitLogThoroughInterval=10000
#flushConsumeQueueThoroughInterval=60000
#Broker的角色
#-ASYNC_MASTER 异步复制 Master
#-SYNC_MASTER同步双写Master
#-SLAVE
brokerRole=SLAVE

#刷盘方式
#-ASYNC_FLUSH 异步刷盘
#-SYNC_FLUSH 同步刷盘
flushDiskType=ASYNC_FLUSH
#checkTransactionMessageEnable=false

#发消息线程池数量
#sendMessageThreadPoolNums=128
#拉消息线程池数量
#pullMessageThreadPoolNums=128

2.2 配置第二组Broker-b

在worker3上,所以需要配置worker3上的config/2m-2sasync/broker-b.properties

#所属集群名字,名字一样的节点就在同一个集群内
brokerClusterName=rocketmq-cluster

#broker名字,名字一样的节点就是一组主从节点。
brokerName=broker-b

#brokerid,0就表示是Master,>0的都是表示Slave
brokerId=0

#nameServer地址,分号分割
namesrvAddr=worker1:9876;worker2:9876;worker3:9876

#在发送消息时,自动创建服务器不存在的topic,默认创建的队列数
defaultTopicQueueNums=4

#是否允许Broker自动创建Topic,建议线下开启,线上关闭
autoCreateTopicEnable=true

#是否允许Broker自动创建订阅组,建议线下开启,线上关闭
autoCreateSubscriptionGroup=true

#Broker对外服务的监听端口
listenPort=10911

#删除文件时间点,默认凌晨4点
deleteWhen=04

#文件保留时间,默认48小时
fileReservedTime=120

#commitLog每个文件的大小默认1G
mapedFileSizeCommitLog=1073741824

#ConsumeQueue每个文件默认存30W条,根据业务情况调整
mapedFileSizeConsumeQueue=300000
#destroyMapedFileIntervalForcibly=120000
#redeleteHangedFileInterval=120000

#检测物理文件磁盘空间
diskMaxUsedSpaceRatio=88

#存储路径store
PathRootDir=/app/rocketmq/store

#commitLog存储路径
storePathCommitLog=/app/rocketmq/store/commitlog

#消费队列存储路径存储路径
storePathConsumeQueue=/app/rocketmq/store/consumequeue

#消息索引存储路径
storePathIndex=/app/rocketmq/store/index

#checkpoint文件存储路径
storeCheckpoint=/app/rocketmq/store/checkpoint

#abort文件存储路径
abortFile=/app/rocketmq/store/abort

#限制的消息大小
maxMessageSize=65536
#flushCommitLogLeastPages=4
#flushConsumeQueueLeastPages=2
#flushCommitLogThoroughInterval=10000
#flushConsumeQueueThoroughInterval=60000
#Broker的角色
#-ASYNC_MASTER 异步复制 Master
#-SYNC_MASTER 同步双写 Master
#-SLAVE
brokerRole=ASYNC_MASTER

#刷盘方式
#-ASYNC_FLUSH 异步刷盘
#-SYNC_FLUSH 同步刷盘
flushDiskType=ASYNC_FLUSH
#checkTransactionMessageEnable=false

#发消息线程池数量
#sendMessageThreadPoolNums=128
#拉消息线程池数量
#pullMessageThreadPoolNums=128

在worker2上,修改work2上的 conf/2m-2s-async/broker-bs.properties

#所属集群名字,名字一样的节点就在同一个集群内
brokerClusterName=rocketmq-cluster

#broker名字,名字一样的节点就是一组主从节点。
brokerName=broker-b
#brokerid,0就表示是Master,>0的都是表示Slave
brokerId=1

#nameServer地址,分号分割
namesrvAddr=worker1:9876;worker2:9876;worker3:9876

#在发送消息时,自动创建服务器不存在的topic,默认创建的队列数
defaultTopicQueueNums=4

#是否允许Broker自动创建Topic,建议线下开启,线上关闭
autoCreateTopicEnable=true

#是否允许Broker自动创建订阅组,建议线下开启,线上关闭
autoCreateSubscriptionGroup=true

#Broker对外服务的监听端口
listenPort=11011

#删除文件时间点,默认凌晨4点
deleteWhen=04

#文件保留时间,默认48小时
fileReservedTime=120

#commitLog每个文件的大小默认1G
mapedFileSizeCommitLog=1073741824

#ConsumeQueue每个文件默认存30W条,根据业务情况调整
mapedFileSizeConsumeQueue=300000
#destroyMapedFileIntervalForcibly=120000
#redeleteHangedFileInterval=120000

#检测物理文件磁盘空间
diskMaxUsedSpaceRatio=88

#存储路径
storePathRootDir=/app/rocketmq/storeSlave

#commitLog存储路径
storePathCommitLog=/app/rocketmq/storeSlave/commitlog

#消费队列存储路径存储路径
storePathConsumeQueue=/app/rocketmq/storeSlave/consumequeue

#消息索引存储路径
storePathIndex=/app/rocketmq/storeSlave/index

#checkpoint文件存储路径
storeCheckpoint=/app/rocketmq/storeSlave/checkpoint

#abort文件存储路径
abortFile=/app/rocketmq/storeSlave/abort

#限制的消息大小
maxMessageSize=65536
#flushCommitLogLeastPages=4
#flushConsumeQueueLeastPages=2
#flushCommitLogThoroughInterval=10000
#flushConsumeQueueThoroughInterval=60000
#Broker的角色
#-ASYNC_MASTER 异步复制 Master
#-SYNC_MASTER同步双写Master
#-SLAVE
brokerRole=SLAVE

#刷盘方式
#-ASYNC_FLUSH 异步刷盘
#-SYNC_FLUSH 同步刷盘
flushDiskType=ASYNC_FLUSH
#checkTransactionMessageEnable=false

#发消息线程池数量
#sendMessageThreadPoolNums=128
#拉消息线程池数量
#pullMessageThreadPoolNums=128

这样2主2从的集群配置基本就完成了。搭建过程中需要注意的配置项:

1、同一机器上两个实例的store目录不能相同,否则会报错 Lock failed,MQalready started
2、同一机器上两个实例的listenPort也不能相同。否则会报端口占用的错nameserver不需要进行配置,直接启动就行。
这也看出nameserver是无状态的。
3、如果是多网卡的机器,比如云服务器,那么需要在broker.conf中增加brokerIP1属性,指定所在机器的外网网卡地址。

3. 启动RocketMQ

  1. 先启动nameServer
    修改三个节点上的bin/runserver.sh,调整里面的jvm内存配置。找到下面这一行调
    整下内存
 JAVA_OPT="${JAVA_OPT} -server -Xms512m -Xmx512m -Xmn256m - XX:MetaspaceSize=128m -XX:MaxMetaspaceSize=320m"
  1. 直接在三个节点上启动nameServer。
 nohup bin/mqnamesrv &
  1. 再启动broker:

在worker2上启动broker-a的master节点和broker-b的slave节点

nohup ./mqbroker -c ../conf/2m-2s-async/broker-a.properties &
nohup ./mqbroker -c ../conf/2m-2s-async/broker-b-s.properties &

在work3上启动broker-b的master节点和broker-a的slave节点

nohup ./mqbroker -c ../conf/2m-2s-async/broker-b.properties &
nohup ./mqbroker -c ../conf/2m-2s-async/broker-a-s.properties &

4.测试mqadmin管理工具

./mqadmin clusterList

在这里插入图片描述

5.命令行快速验证

发送消息:默认会发1000条消息

tools.sh org.apache.rocketmq.example.quickstart.Producer

在这里插入图片描述

接收消息

tools.sh org.apache.rocketmq.example.quickstart.Consumer

在这里插入图片描述

6.注意事项

1.注意,这是官方提供的Demo,但是官方的源码中,这两个类都是没有指定nameServer的,所以运行会有点问题。
  要指定NameServer地址,可以配置一个环境变量NAMESRV_ADDR,这样默认会读取这个NameServer地址。
  可以配到.bash_profile里或者直接临时指定。
2.存储路径 storeCheckpoint ,abortFile 不需要创建文件夹,会自动创建checkpoint 文件 和 abort 文件,
  但是需要创建 commitlog ,consumequeue,index 文件夹, 这点需要特别注意。

总结

坚持就是胜利,如果遇到问题尝试自己解决它,你会发现比问别人更有价值。

  • 3
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值