• 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. 查看新节点流量
      在这里插入图片描述

  • 相关阅读:
    Godot4实现游戏的多语言版本
    木材图像远程鉴定系统开发与实现
    8 种实现垂直和水平居中元素的方法汇总
    CSS之定位Position
    【C++编程语言】之string容器 基本概念 构造函数 赋值 拼接 查找 替换比较 插入 删除 子串获取
    Python Flask Web:博客登录和注册页面实现代码
    大学生线上学习行为的聚类、成因与对策研究
    MySQL中多表查询、表连接(内连接和外连接)
    LabView---双通道示波器(内含信号发生器)
    码头船只货柜管理系统(Java+SSH+MySQL)
  • 原文地址:https://blog.csdn.net/usagoole/article/details/126355258