• RocketMQ实战之在线停机和扩容


    在线停机

    1. 线上一台RocketMQ节点存在问题(比如:磁盘故障、电池故障、其他硬件故障等)

    2. 使用docker模拟在线停机

      服务端口状态
      rocketmq-master110911正常
      rocketmq-master210911不正常
      rocketmq-slave110911正常
      rocketmq-slave210911正常
      rocketmq-nameserver19876正常
      rocketmq-nameserver29876正常

    操作步骤

    1. 第一步:关闭不正常Broker的写权限(rocketmq-master2节点)

      • Broker的写权限关闭后,非顺序消息不会立即拒绝,而是等客户端路由信息更新后,才会再向Broker发送消息
      • Broker关闭写权限之后,对应的消费者并不会触发重平衡,这可能导致关联到只读Broker的消费者永远不能消费集群中的消息。所以处理完毕后,需要将写权限放开
      # brokerPermission 2是只写,4是只读、6是读写权限
      # updateBrokerConfig 修改Broker内存,同时也会修改broker.properties配置文件
      $ bin/mqadmin updateBrokerConfig -b rocketmq-master2:10911 -n \
      'rocketmq-nameserver1:9876;Rocketmq-nameserver2:9876' -k brokerPermission -v 4
      update broker config success, rocketmq-master2:10911
      
      • 1
      • 2
      • 3
      • 4
      • 5
    2. 第二步:观察节点流量,InTPSOutTPS流量。如果持续一段时间InTPSOutTPS都为0,表示该节点即可下线

      # 关闭前
      $ bin/mqadmin clusterList -n 'rocketmq-nameserver1:9876;Rocketmq-nameserver2:9876'
      #Cluster Name  #Broker Name     #BID  #Addr            #Version #InTPS(LOAD) #OutTPS(LOAD) #PCWait(ms) #Hour #SPACE
      DefaultCluster rocketmq-master1 0     172.19.0.4:10911 V4_3_1   55.31(0,0ms)   0.00(0,0ms)          0  0.13 0.9193
      DefaultCluster rocketmq-master1 1     172.19.0.6:10911 V4_3_1   55.17(0,0ms)   0.00(0,0ms)          0  0.13 0.9193
      DefaultCluster rocketmq-master2 0     172.19.0.5:10911 V4_3_1   55.02(0,0ms)   0.00(0,0ms)          0  0.13 0.9193
      DefaultCluster rocketmq-master2 1     172.19.0.7:10911 V4_3_1   56.07(0,0ms)   0.00(0,0ms)          0  0.13 0.9193
      
      # 关闭后
      #Cluster Name  #Broker Name      #BID  #Addr            #Version  #InTPS(LOAD)  #OutTPS(LOAD) #PCWait(ms) #Hour #SPACE
      DefaultCluster rocketmq-master1  0     172.19.0.4:10911 V4_3_1   121.86(0,0ms)    0.00(0,0ms)          0  0.23 0.9194
      DefaultCluster rocketmq-master1  1     172.19.0.6:10911 V4_3_1   117.33(0,0ms)    0.00(0,0ms)          0  0.23 0.9194
      DefaultCluster rocketmq-master2  0     172.19.0.5:10911 V4_3_1     0.00(0,0ms)    0.00(0,0ms)          0  0.23 0.9194
      DefaultCluster rocketmq-master2  1     172.19.0.7:10911 V4_3_1     0.00(0,0ms)    0.00(0,0ms)          0  0.23 0.9194
      
      • 1
      • 2
      • 3
      • 4
      • 5
      • 6
      • 7
      • 8
      • 9
      • 10
      • 11
      • 12
      • 13
      • 14
    3. 也可以从rocketmq-dashboard查看流量
      在这里插入图片描述

    4. 第三步:等待半个小时左右,如果有生产和消费TPS,则通过如下命令查看流量来源(可能是重试队列)

      # 查看流量来自哪些topic
      $ bin/mqadmin brokerConsumeStats -b rocketmq-master2:10911 -n \
      'rocketmq-nameserver1:9876;Rocketmq-nameserver2:9876'
      
      • 1
      • 2
      • 3
    5. 第四步:停止Broker。停止后,查看控制台,可以发现节点已经下线

      $ ps -ef|grep broker
      # 不能使用kill -9 
      $ kill pid
      
      # 因为这里采用docker模拟,所以执行
      $ docker stop rocketmq-master2
      
      • 1
      • 2
      • 3
      • 4
      • 5
      • 6
    6. 第五步:机器故障解决之后,此时重启Broker,并开启读写权限。此时再次查看InTPSOutTPS

      $ bin/mqadmin updateBrokerConfig -b rocketmq-master2:10911 -n \
      'rocketmq-nameserver1:9876;Rocketmq-nameserver2:9876' -k brokerPermission -v 6
      
      • 1
      • 2

    在线扩容

    1. 当现有的RocketMQ集群性能不足,需要扩容升级,增加新的主从节点

    2. 使用docker模拟在线扩容

      服务端口状态
      rocketmq-master110911正常
      rocketmq-master210911正常
      rocketmq-slave110911正常
      rocketmq-slave210911正常
      rocketmq-nameserver19876正常
      rocketmq-nameserver29876正常
      rocketmq-master310911新增
      rocketmq-slave310911新增

    操作步骤

    1. 第一步非常重要:从现有的Broker上复制${ROCKETMQ_HOME}/store/config/目录下的的topics.jsonsubscriptionGroup.json到新的broker服务器目录上

    2. 第二步:设置新的rocketmq-master3rocketmq-slave3为只读(设置为只读状态,避免新节点启动或者异常影响现有发送和消费)

      # 只读
      brokerPermission=4
      
      • 1
      • 2
    3. 第三步:启动扩容后的节点,此时会加入到现有集群,但是此时是只读状态
      在这里插入图片描述

    4. 第四步:rocketmq-master3开启读写权限

      $ bin/mqadmin updateBrokerConfig -b rocketmq-master3:10911 -n \
      'rocketmq-nameserver1:9876;Rocketmq-nameserver2:9876' -k brokerPermission -v 6
      
      • 1
      • 2
    5. 查看新节点流量
      在这里插入图片描述

  • 相关阅读:
    国产集成开发环境工具 CEC-IDE
    浮动元素导致被遮住元素单击事件不响应
    基于训练和推理场景下的MindStudio高精度对比
    gitlab无法push(pre-receive hook declined)
    Unity编辑器扩展: 程序化打图集工具
    ​【C语言】长篇详解,字符系列篇3-----strstr,strtok,strerror字符串函数的使用【图文详解​】
    MySQL-数据库设计规范
    Ownips+Coze海外社媒数据分析实战指南
    Java并发编程核心概念
    基于QWebEngine实现无头浏览器
  • 原文地址:https://blog.csdn.net/usagoole/article/details/126355258