RocketMQ集群搭建
原创
©著作权归作者所有:来自51CTO博客作者蓝色土耳其love的原创作品,请联系作者获取转载授权,否则将追究法律责任
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部署)可以看到,集群已经搭建完毕