RocketMQ无损扩容实战

这里是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-n0broker-a-n1配置并没有什么太大区别。

现在我们要进行无损扩容了,我们需要新增一主一从,即broker-b-n0broker-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.jsonsubscriptionGroup.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

总结

总的来说整体操作难度不大,但是如果认为的去扩容在线上遇到紧急流量我们可能操作不过来,所以可以考虑使用快照的方式扩容这样库容会更快

© 版权声明
THE END
喜欢就支持一下吧
点赞0

Warning: mysqli_query(): (HY000/3): Error writing file '/tmp/MY9YoeMF' (Errcode: 28 - No space left on device) in /www/wwwroot/583.cn/wp-includes/class-wpdb.php on line 2345
admin的头像-五八三
评论 抢沙发
头像
欢迎您留下宝贵的见解!
提交
头像

昵称

图形验证码
取消
昵称代码图片