这里是weihubeats,觉得文章不错可以关注公众号小奏技术,文章首发。拒绝营销号,拒绝标题党
背景
假设目前我们的线上部署的RocketMQ部署的是一主一从,现在随着业务的发展,或者是我们需要做一些促销活动,会有突发流量高峰,现有的一主一从无法满足我们的性能,服务器的内存和cpu占用已经高达70-90%左右,所以我们需要对线上的RocketMQ
集群进行无损扩容(不影响业务正常使用)
扩容
原有的一主一从的配置
broker-a-n0
brokerClusterName = xiaozou
brokerName = broker-a
brokerId = -1
brokerRole = SLAVE
deleteWhen = 04
fileReservedTime = 48
enableControllerMode = true
fetchNamesrvAddrByAddressServer = true
fetchControllerAddrByDnsLookup = true
# 虚拟的,线上填写自己真实地址(dns服务发现使用域名)
controllerAddr = weihubeats-mq-controller.com:9878
allAckInSyncStateSet=true
listenPort=30911
storePathRootDir=/Users/weihubeats/Desktop/sofe/rocketmq-file/rmqstore/node00/store
autoCreateTopicEnable=false
autoCreateSubscriptionGroup=false
enablePropertyFilter=true
slaveReadEnable=true
waitTimeMillsInSendQueue=1000
broker-a-n1
brokerClusterName = xiaozou
brokerName = broker-a
brokerId = -1
brokerRole = SLAVE
deleteWhen = 04
fileReservedTime = 48
enableControllerMode = true
fetchNamesrvAddrByAddressServer = true
fetchControllerAddrByDnsLookup = true
# 虚拟的,线上填写自己真实地址(dns服务发现使用域名)
controllerAddr = weihubeats-mq-controller.com:9878
allAckInSyncStateSet=true
listenPort=30911
storePathRootDir=/Users/weihubeats/Desktop/sofe/rocketmq-file/rmqstore/node01/store
autoCreateTopicEnable=false
autoCreateSubscriptionGroup=false
enablePropertyFilter=true
slaveReadEnable=true
waitTimeMillsInSendQueue=1000
可以看到broker-a-n0
和broker-a-n1
配置并没有什么太大区别。
现在我们要进行无损扩容了,我们需要新增一主一从,即broker-b-n0
、broker-a-n1
新主从配置
我们这里先给出新的主从的配置
broker-a-n0
brokerClusterName = xiaozou
brokerName = broker-b
brokerId = -1
brokerRole = SLAVE
deleteWhen = 04
fileReservedTime = 48
enableControllerMode = true
fetchNamesrvAddrByAddressServer = true
fetchControllerAddrByDnsLookup = true
# 虚拟的,线上填写自己真实地址(dns服务发现使用域名)
controllerAddr = weihubeats-mq-controller.com:9878
allAckInSyncStateSet=true
listenPort=30911
storePathRootDir=/Users/weihubeats/Desktop/sofe/rocketmq-file/rmqstore/node00/store
autoCreateTopicEnable=false
autoCreateSubscriptionGroup=false
enablePropertyFilter=true
slaveReadEnable=true
waitTimeMillsInSendQueue=1000
broker-a-n1
brokerClusterName = xiaozou
brokerName = broker-b
brokerId = -1
brokerRole = SLAVE
deleteWhen = 04
fileReservedTime = 48
enableControllerMode = true
fetchNamesrvAddrByAddressServer = true
fetchControllerAddrByDnsLookup = true
# 虚拟的,线上填写自己真实地址(dns服务发现使用域名)
controllerAddr = weihubeats-mq-controller.com:9878
allAckInSyncStateSet=true
listenPort=30911
storePathRootDir=/Users/weihubeats/Desktop/sofe/rocketmq-file/rmqstore/node01/store
autoCreateTopicEnable=false
autoCreateSubscriptionGroup=false
enablePropertyFilter=true
slaveReadEnable=true
waitTimeMillsInSendQueue=1000
可以看到新的主从配置与原先的broker-a-n0
没有太大的区别,唯一的不同就是brokerClusterName
不同
copy原有的配置文件
需要注意新主节点如果不copy原有集群的topics.json
配置和subscriptionGroup.json
会导致原有集群上的topic和subscriptionGroup
在新的扩容集群不生效,需要手动去创建
如果查看老的topic会发现在新的集群是没有的,所以我们需要把旧集群的这两个配置topics.json
和subscriptionGroup.json
复制到我们新集群的配置文件夹里面,即我们配置的storePathRootDir
storePathRootDir
+ /config
然后按照我们原先的启动集群方式启动新的集群即可
我这里可以看到broker-d
已经有消息消费了
验证方式
如果想要验证很简单,本地启动一个product
一直发送消息
然后看到扩容的broker
启动,看看有没有消息发送到这个broker即可完成验证
一个小细节
我们在复制的topic.json
中有一个系统topic
比如我们的集群是broker-a
那么会有这么一个topic
"broker-a":{
"attributes":{},
"order":false,
"perm":7,
"readQueueNums":1,
"topicFilterType":"SINGLE_TAG",
"topicName":"broker-a",
"topicSysFlag":0,
"writeQueueNums":1
}
这种topic
复制到新的扩容集群我们需要手动修改为broker-b
吗,实际是不需要的,系统会自动创建该topic
总结
总的来说整体操作难度不大,但是如果认为的去扩容在线上遇到紧急流量我们可能操作不过来,所以可以考虑使用快照的方式扩容这样库容会更快