通用方案:RocketMQ的Broker节点禁止写入状态下的恢复方法

通用方案:RocketMQ的Broker节点禁止写入状态下的恢复方法

更新时间:2020-07-03 15:23:44

1. 概述

本文主要介绍在专有云V3环境中,RocketMQ的Broker节点禁止写入状态下的恢复方法。

1.1. 适用范围

  • 专有云V3,MQ

1.2. 风险说明

禁止写入恢复后,需观察集群状态和禁止写入恢复节点的消息InTPS和OutTPS的情况,确认和其它节点的消息InTPS和OutTPS的情况大致相同。如果没有消息写入,则需执行回滚方案。

2. 问题描述

在专有云V3环境中,MQ集群在运行状态时,Broker节点状态异常导致MQ集群工作异常,则需要对有问题的Broker节点进行禁止写入操作。当静默期过后,集群状态恢复正常,禁止写入状态下的Broker节点需要恢复为可读写状态。

3. 解决方案

3.1. 环境检查

确认服务状态

  1. 登录天基控制台,单击报表>系统报表>资源申请报表
  2. 资源状态表区域,Project列过滤butlerName列过滤butler-consoletype列过滤dns类型,在对应的result列获取domain信息。
  3. 根据上一步获取的domain信息,登录Butler控制台,单击业务监控>MQ,确认Broker服务的所有容器状态为正常,且没有告警。
  4. 登录天基控制台,单击运维>服务运维,在模糊查询框中搜索mq-namesrv,单击服务右侧对应的管理
  5. 单击BasicCluster-A-xxxx-xxxx,进入服务实例Dashboard页面。
  6. 服务角色列表区域,单击MqNamesrv#服务角色右侧的详情
  7. 机器信息区域,单击机器右侧对应的终端,进入机器。
  8. 执行以下命令,获取并记录mq-namesrv容器的容器ID。
    sudo docker ps | grep mq-namesrv
  9. 执行以下命令,登录mq-namesrv容器。
    sudo docker exec -it [$Mq_Namesrv_ID] bash

    说明:[$Mq_Namesrv_ID]为上一步记录的mq-namesrv容器ID。

  10. 执行以下命令,确认Broker数量等于预期值。
    sh /home/admin/rmq/bin/mqadmin clusterList -n 127.0.0.1:9876
    系统显示类似如下。
    image.png

    说明

    • Addr:Broker节点的地址。
    • BID:Broker节点的主备状态,其中0为主状态,1为备状态。
    • Cluster Name:集群名称。

备份服务配置

  1. 登录天基控制台,单击任务>部署概况>部署详情,单击mq产品右侧的详情,单击BasicCluster-A-xxxx>mq-broker>DeployBroker#
    image.png
  2. 单击机器右侧对应的Terminal,分别进入master和slave服务器,执行本节步骤3到步骤5。

    说明:在宿主机中登录deploy-broker容器后,执行ip addr命令,查看IP地址。然后根据上一节步骤10系统返回的BID和Addr的值进行判断所在节点的主备状态。

  3. 依次执行以下命令,获取并记录deploy-broker容器的容器ID
    sudo docker ps | grep deploy-broker
  4. 执行以下命令,登录deploy-broker容器。
    sudo docker exec -it [$Deploy_Broker_ID] bash

    说明:[$Deploy_Broker_ID]为上一步记录的deploy-broker容器ID。

  5. 依次执行以下命令,备份配置文件。
    cd /home/admin/rmq/conf/
    cp broker.conf broker.conf.bak

3.2. 实施步骤

获取Broker节点相关信息

登录mq-namesrv容器,执行以下命令,获取并记录需要修改的Broker地址、集群名称和主备状态。

sh /home/admin/rmq/bin/mqadmin clusterList -n 127.0.0.1:9876

修改动态配置

登录任意一台deploy-broker容器,依次执行以下命令,修改动态配置。

sh /home/admin/rmq/bin/mqadmin updateBrokerConfig -b [$Broker_IP_Master]:10911 -k brokerPermission -v 6
sh /home/admin/rmq/bin/mqadmin updateBrokerConfig -b [$Broker_IP_Slave]:10911 -k brokerPermission -v 6

说明

  • -v:4为只读,6为可读写,恢复禁止写入操作时,主备都需要恢复禁止写入状态。
  • [$Broker_IP_Master]:上一节记录的恢复禁止写入Broker节点主机器的IP地址。
  • [$Broker_IP_Slave]:上一节记录的恢复禁止写入Broker节点备机器的IP地址。

确认broker动态配置参数生效

登录任意一台deploy-broker容器,执行以下命令,确认Broker动态配置参数已修改为预期值。

sh /home/admin/rmq/bin/mqadmin getBrokerConfig -b [$Broker_IP_Master]:10911 | grep brokerPermission
sh /home/admin/rmq/bin/mqadmin getBrokerConfig -b [$Broker_IP_Slave]:10911 | grep brokerPermission

确认恢复禁止写入操作的正确性

登录mq-namesrv容器,执行以下命令,查看集群状态和InTPS和OutTPS信息,确认和其他节点信息数值相似。

sh /home/admin/rmq/bin/mqadmin clusterList -n 127.0.0.1:9876

说明

  • 若无节点信息,则需执行 回滚方案
  • 若有预期外的现象,请及时咨询阿里云技术支持。

3.3. 结果验证

检查集群状态

登录mq-namesrv容器,执行以下命令,确认Broker集群为正常状态。

sh /home/admin/rmq/bin/mqadmin clusterlist -n 127.0.0.1:9876

确认固化配置数据具有一致性

分别登录master和slave的deploy-broker容器,执行以下命令,确认主机器和备机器的配置文件中已修改的参数值一致,且符合预期值。

cat /home/admin/rmq/conf/broker.conf

4. 回滚方案

  1. 分别登录master和slave的deploy-broker容器,执行以下命令,恢复备份文件。
    cd /home/admin/rmq/conf/
    cp broker.conf.bak broker.conf
  2. 执行如下命令,执行禁止写入操作。
    sh /home/admin/rmq/bin/mqadmin updateBrokerConfig -b [$Broker_IP_Master]:10911 -k brokerPermission -v 4
    sh /home/admin/rmq/bin/mqadmin updateBrokerConfig -b [$Broker_IP_Slave]:10911 -k brokerPermission -v 4

5. 补充说明

  • 具体涉及相关运维知识的配置说明请参考《MQ运维指南》。如有预期外的现象,请咨询阿里云技术支持。
  • 对于本文档实施步骤中的配置参数做出如下说明。
  • 若后续保持版本不变,重启服务后,服务配置参数将以本文档的broker.conf文件中配置的参数为准。
  • 若版本升级,服务配置参数将重置为默认值。