方案一:
升级 K8s pod资源
交替清空其中一组 broker(m-s) 消息,重启pod
优点:操作简单,无需新增资源,在原有资源上扩容
缺点:只完成当前升级,最大只能升级到4C 8G,后续业务量起来有可能还需要升级(升级硬件)
操作:
1. 摘除写入流量
brokerPermission=2 表示只写,brokerPermission=4 表示只读,brokerPermission=6 表示读写
-b (broker 的ip:port)
-n (nameserver 的 ip:port)
#以下为执行命令
bin/mqadmin updateBrokerConfig -b x.x.x.x:10911 -n x.x.x.x:9876 -k brokerPermission -v 4
将 Broker 设置为只读权限后,观察该节点的流量变化,直到写入流量(InTPS)掉为 0 表示写入流量已摘除。
#观察流量变化命令
bin/mqadmin clusterList -n x.x.x.x:9876
2. 摘除读出流量
当摘除 Broker 写入流量后,读出消费流量也会逐步降低。可以通过 clusterList 命令中 OutTPS 观察读出流量变化。除此之外,也可以通过 brokerConsumeStats 观察 broker 的积压(Diff)情况,当积压为 0 时,表示消费全部完成
3. 节点重启
在观察到该 Broker 的所有积压为 0 时,通常表示该节点已无消息,可以重启了,重启时可将一组主从同时重启
方案二:
新增两组(4台 4C 16G)服务器,新建主从添加到现有集群变为 4主4从,后删除旧的主从变回2主2从,后退订旧服务器,完成升级
优点:资源同步升级,后续无需再次升级
缺点:新增资源成本,操作复杂风险不可控
操作:
1. 摘除写入流量
brokerPermission=2 表示只写,brokerPermission=4 表示只读,brokerPermission=6 表示读写
-b (broker 的ip:port)
-n (nameserver 的 ip:port)
#以下为执行命令
bin/mqadmin updateBrokerConfig -b x.x.x.x:10911 -n x.x.x.x:9876 -k brokerPermission -v 4
将 Broker 设置为只读权限后,观察该节点的流量变化,直到写入流量(InTPS)掉为 0 表示写入流量已摘除。
注意:将broker的写权限关闭后,非顺序消息不会立马拒绝,而是需要等客户端路由信息更新后,不会在往该broker上发送消息,故这个过程需要等待。通过 rocketmq-console 查看该broker的写入TPS,当写入TPS降为0后,再使用 kill pid 关闭 rocketmq 进程。
#观察流量变化命令
bin/mqadmin clusterList -n x.x.x.x:9876
2. 摘除读出流量
当摘除 Broker 写入流量后,读出消费流量也会逐步降低。可以通过 clusterList 命令中 OutTPS 观察读出流量变化。除此之外,也可以通过 brokerConsumeStats 观察 broker 的积压(Diff)情况,当积压为 0 时,表示消费全部完成
3. 节点下线
在观察到该 Broker 的所有积压为 0 时,通常该节点可以摘除了。考虑到可能消息回溯到之前某个时间点重新消费,可以过了日志保存日期再下线该节点。如果日志存储为 3 天,那 3 天后再移除该节点。
关于rocketmq的一些命令行操作
10.1.1.10 rocketmqC0 #添加污点 kubectl taint nodes 10.1.1.10 mq=rocketmqC0:NoSchedule #去除污点 kubectl taint nodes 10.1.1.10 mq=rocketmqC0:NoSchedule- 10.1.1.17 rocketmqD0 #添加污点 kubectl taint nodes 10.1.1.17 mq=rocketmqD0:NoSchedule #去除污点 kubectl taint nodes 10.1.1.17 mq=rocketmqD0:NoSchedule- #创建更新主题(updateTopic) ./mqadmin updateTopic -b 127.0.0.1:10911 -t TopicCmd #删除主题(deleteTopic) ./mqadmin deleteTopic -n 127.0.0.1:9876 -c 127.0.0.1:10911 -t TopicCmd #创建更新消费组(updateSubGroup) ./mqadmin updateSubGroup -n 127.0.0.1:9876 -b 127.0.0.1:10911 -g GroupTest #删除消费组(deleteSubGroup) ./mqadmin deleteSubGroup -n 127.0.0.1:9876 -b 127.0.0.1:10911 -g GroupTest #主题队列信息(topicStatus) ./mqadmin topicStatus -n 127.0.0.1:9876 -t TopicTest #主题路由信息(topicRoute) ./mqadmin topicRoute -n 127.0.0.1:9876 -t TopicTest #主题列表(topicList) ./mqadmin topicList -n 127.0.0.1:9876 #Broker节点信息(brokerStatus) ./mqadmin brokerStatus -n 127.0.0.1:9876 -b 127.0.0.1:10911 #通过KEY查询消息(queryMsgByKey) ./mqadmin queryMsgByKey -n 127.0.0.1:9876 -k 2000000 -t TopicTest #通过KEY查询消息(queryMsgByKey) ./mqadmin queryMsgByKey -n 127.0.0.1:9876 -k 2000000 -t TopicTest #打印消息(printMsg) ./mqadmin printMsg -n 127.0.0.1:9876 -t TopicTest -b 2019-07-26#07:50:00:000 -e 2019-07-26#09:00:00:000 #查看消费状态(brokerConsumeStats) ./mqadmin brokerConsumeStats -b 127.0.0.1:10911 #集群的节点信息(clusterList) ./mqadmin clusterList -n 127.0.0.1:9876 #总体的消费的状态信息(statsAll) ./mqadmin statsAll -n 127.0.0.1:9876 #查看消费组下的消费者信息(consumerConnection) ./mqadmin consumerConnection -n 127.0.0.1:9876 -g group_name_1 #消费进度信息(consumerProgress) ./mqadmin consumerProgress -n 127.0.0.1:9876 #消费进度信息(consumerProgress) ./mqadmin consumerProgress -n 127.0.0.1:9876 #消息队列负载情况(allocateMQ) ./mqadmin allocateMQ -t TopicTest -i 127.0.0.1 -n 127.0.0.1:9876 #测试Broker接收消息的性能(sendMsgStatus) ./mqadmin sendMsgStatus -n 127.0.0.1:9876 -b broker-a -c 3 #测试Broker接收消息的性能(sendMsgStatus) ./mqadmin sendMsgStatus -n 127.0.0.1:9876 -b broker-a -c 3 #查看Broker配置信息(getBrokerConfig) ./mqadmin getBrokerConfig -b 127.0.0.1:10911
今日语录:
不管几岁,快乐万岁,生活明朗,万物可爱,人间值得。