RocketMQ集群搭建

 

RocketMQ搭建分为4种方式

  • 单Master模式:风险大,宕机或重启服务不可用
  • 多Master模式:单台宕机,整体服务不受影响,但此节点上未消费的消息在节点恢复之前不可被消费
  • 多Master多Slave模式(异步):因为是异步复制,主备有短暂消息延迟(毫秒级),Master宕机,磁盘损坏情况下会丢失少量消息,性能高可用
  • 多Master多Slave模式(同步):因为是同步复制,只有主备都写成功才返回成功,性能比异步复制略低(10%),消息高可用

 

此次搭建采用第3中,多Master多Slave模式,分别选取两个服务器  192.168.2.24(A节点Master,B节点Slave);192.168.2.54(B节点Master,A节点Slave),此种节点分布任一台服务器宕机,新增消息的写与存量消息的读都不受影响

1、conf目录下有多种模式搭建的配置文件

2m-2s-async  -- 双 Mster 双 Slave ,异步复制
2m-2s-sync    -- 双 Mster 双 Slave ,同步双写
2m-noslave    -- 双 Master
broker.conf     -- 单 Master

2、采用2m-2s-async中配置

broker-a.properties     -- a节点Master配置
broker-a-s.properties   -- a节点Slave配置
broker-b.properties     -- b节点Master配置
broker-b-s.properties   -- b节点Slave配置

3、a节点Master配置 broker-a.properties

#所属集群名字,名字一样的节点就在同一个集群内
brokerClusterName=rocketmq-cluster
#broker名字,名字一样的节点就是一组主从节点。
brokerName=broker-a
#brokerid,0就表示是Master,>0的都是表示 Slave
brokerId=0
#nameServer地址,分号分割
namesrvAddr=192.168.2.24:9876;192.168.2.54: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
#存储路径
storePathRootDir=/usr/local/rocketMQ/data/master
#commitLog 存储路径
storePathCommitLog=/usr/local/rocketMQ/commitlog/master
#消费队列存储路径存储路径
storePathConsumeQueue=/usr/local/rocketMQ/consumequeue/master
#消息索引存储路径
storePathIndex=/usr/local/rocketMQ/index/master
#checkpoint 文件存储路径
storeCheckpoint=/usr/local/rocketMQ/checkpoint/master
#abort 文件存储路径
abortFile=/usr/local/rocketMQ/abort/master

#Broker 的角色
#- ASYNC_MASTER 异步复制Master
#- SYNC_MASTER 同步双写Master
#- SLAVE
brokerRole=ASYNC_MASTER
#刷盘方式
#- ASYNC_FLUSH 异步刷盘
#- SYNC_FLUSH 同步刷盘
flushDiskType=ASYNC_FLUSH

##以下配置为并发较高时提升性能以及数据可靠性配置,可适当选用 #使用可重入锁 useReentrantLockWhenPutmessage=true #发送消息线程等待时间,默认200ms waitTimeMillsInSendQueue=1000 #开启临时存储池 transientStorePoolEnable=true #开启slave读权限(分担 master 压力) slaveReadEnable=true #发消息线程池数量 sendMessageThreadPoolNums=32 #关闭堆内存数据传输 transferMsgByHeap=false #开启文件预热 warmMapedFileEnable=true

4、a节点Slave配置 broker-a-s.properties

#所属集群名字,名字一样的节点就在同一个集群内
brokerClusterName=rocketmq-cluster
#broker名字,名字一样的节点就是一组主从节点。
brokerName=broker-a
#brokerid,0就表示是Master,>0的都是表示 Slave
brokerId=1
#nameServer地址,分号分割
namesrvAddr=192.168.2.24:9876;192.168.2.54:9876
#在发送消息时,自动创建服务器不存在的topic,默认创建的队列数
defaultTopicQueueNums=4
#是否允许 Broker 自动创建Topic,建议线下开启,线上关闭
autoCreateTopicEnable=false
#是否允许 Broker 自动创建订阅组,建议线下开启,线上关闭
autoCreateSubscriptionGroup=false
#Broker 对外服务的监听端口
listenPort=10911
#删除文件时间点,默认凌晨 4点
deleteWhen=04
#文件保留时间,默认 48 小时
fileReservedTime=120
#commitLog每个文件的大小默认1G
mapedFileSizeCommitLog=1073741824
#ConsumeQueue每个文件默认存30W条,根据业务情况调整
mapedFileSizeConsumeQueue=300000
#destroyMapedFileIntervalForcibly=120000
#redeleteHangedFileInterval=120000
#检测物理文件磁盘空间
diskMaxUsedSpaceRatio=88
#存储路径
storePathRootDir=/usr/local/rocketMQ/data/slave
#commitLog 存储路径
storePathCommitLog=/usr/local/rocketMQ/commitlog/slave
#消费队列存储路径存储路径
storePathConsumeQueue=/usr/local/rocketMQ/consumequeue/slave
#消息索引存储路径
storePathIndex=/usr/local/rocketMQ/index/slave
#checkpoint 文件存储路径
storeCheckpoint=/usr/local/rocketMQ/checkpoint/slave
#abort 文件存储路径
abortFile=/usr/local/rocketMQ/abort/slave
#限制的消息大小
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

##以下内容为并发较高时提升性能以及数据可靠性配置,可适当选用
#使用可重入锁
useReentrantLockWhenPutmessage=true
#发送消息线程等待时间,默认200ms
waitTimeMillsInSendQueue=1000
#开启临时存储池
transientStorePoolEnable=true
#开启slave读权限(分担 master 压力)
slaveReadEnable=true
#发消息线程池数量 
sendMessageThreadPoolNums=32
#关闭堆内存数据传输
transferMsgByHeap=false
#开启文件预热
warmMapedFileEnable=true
#checkTransactionMessageEnable=false
#发消息线程池数量 
#sendMessageThreadPoolNums=128
#拉消息线程池数量
#pullMessageThreadPoolNums=128

5、同时配置b节点Master、Slave配置文件,只需修改以下配置即可。此文中,Master节点listenPort=11011,Slave节点listenPort=10911

**需要注意,如果同一台机器上同时有Master、Slave,则  storePathRootDir 路径要分开,不然起第二个服务时会提示服务已存在

#broker名字,名字一样的节点就是一组主从节点。
brokerName=broker-b
#brokerid,0就表示是Master,>0的都是表示 Slave
brokerId=0
#Broker 对外服务的监听端口
listenPort=11011
#存储路径
storePathRootDir=/usr/local/rocketMQ/data/master
#commitLog 存储路径
storePathCommitLog=/usr/local/rocketMQ/commitlog/master
#消费队列存储路径存储路径
storePathConsumeQueue=/usr/local/rocketMQ/consumequeue/master
#消息索引存储路径
storePathIndex=/usr/local/rocketMQ/index/master
#checkpoint 文件存储路径
storeCheckpoint=/usr/local/rocketMQ/checkpoint/master
#abort 文件存储路径
abortFile=/usr/local/rocketMQ/abort/master

6、修改bin/runbroker.sh  bin/runserver.sh中JVM启动参数,此处不赘述

7、主备配置文件齐备后,启动两台服务器的namesrv和broker

[root@project-deve bin]# pwd
/usr/local/rocketMQ/bin
[root@project-deve bin]#nohup ./mqnamesrv >>/dev/null 2>&1&
[root@project-deve bin]#nohup ./mqbroker -c ../conf/2m-2s-async/broker-a.properties >>/dev/null 2>&1&
[root@project-deve bin]#nohup ./mqbroker -c ../conf/2m-2s-async/broker-b-s.properties >>/dev/null 2>&1&

8、通过可视化客户端(可自己打包,也可docker部署)可以看到,集群已经搭建完毕

 

 

 

  

 

posted @ 2022-09-15 11:31  蓝色土耳其  阅读(464)  评论(0编辑  收藏  举报