rocketmq生产环境升级(干货)

发布时间 2023-06-01 15:23:45作者: 木易-故事里的人

方案一:

升级 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

#获取topiclist
./mqadmin topicList -n rocketmq-nameserver:9876
#获取消费组
./mqadmin consumerProgress -n rocketmq-nameserver:9876
#查看集群内topic,从而获取消费组
./mqadmin topicList -c RaftCluster ./mqadmin topicList -c cfhy-rocketmq-cluster
#禁止broker写入,温馨提示:将broker的写权限关闭后,非顺序消息不会立马拒绝,而是需要等客户端路由信息更新后,不会在往该broker上发送消息,故这个过程需要等待。通过 rocketmq-console 查看该broker的写入TPS,当写入TPS降为0后,再使用 kill pid 关闭 rocketmq 进程。
./mqadmin updateBrokerConfig -b 10.64.0.68:30911 -n rocketmq-nameserver:9876 -k brokerPermission -v 4
./mqadmin updateBrokerConfig -b 10.64.0.171:30911 -n rocketmq-nameserver:9876 -k brokerPermission -v 4
./mqadmin brokerConsumeStats -b 10.64.0.68:30911 -n rocketmq-nameserver:9876
./mqadmin brokerConsumeStats -b 10.64.0.171:30911 -n rocketmq-nameserver:9876
#允许broker写入
./mqadmin updateBrokerConfig -b 10.64.0.51:30911 -n rocketmq-nameserver:9876 -k brokerPermission -v 6
#更新topic
./mqadmin updateTopic -c cfhy-rocketmq-cluster -t COMMON_TOPIC -w 16 -r 16
#更新消费组
#!/bin/sh
for group in `cat sug.log`;
do
./mqadmin updateSubGroup -n rocketmq-nameserver:9876 -g $group -c cfhy-rocketmq-cluster
done
#重置消息位点
sh mqadmin resetOffsetByTime -g 'CID名称' -s now -t 'TOPIC名称'
 

 

今日语录:

  不管几岁,快乐万岁,生活明朗,万物可爱,人间值得。