通用方案:RocketMQ集群Broker节点禁止写入数据的通用方法

通用方案:RocketMQ集群Broker节点禁止写入数据的通用方法

更新时间:2020-07-21 13:57:13

1. 概述

本文主要介绍专有云环境中,RocketMQ集群Broker节点禁止写入数据的通用方法。

方案总览

类别 内容
风险等级(方案执行的影响)
操作方式 黑屏
操作复杂度
预估执行时长 10分钟
客户业务的影响
可监控性 不支持
有效性(重启、重拉、补丁、升级、扩容等配置是否丢失) 固化
数据修订(变更是否涉及增删改操作)
执行灰度策略 请向产品侧咨询,明确灰度策略
首次发布时间 N/A
预计完成时间 N/A

1.1. 适用范围

  • 专有云版本:V2.*,V3.*
  • 产品:RocketMQ

1.2. 风险说明

设置禁止写入数据操作前,需评估以下风险:

  • 设置禁止写入数据操作成功后,集群流量是否可以满足业务高峰的TPS要求。
  • 设置禁止写入数据操作成功后,若节点数量小于两台则存在容灾上的风险。
  • 若有全局顺序消息类型的Topic的路由在将要禁写的Broker上,那么在禁写Broker后,会造成相关的全局顺序类型的Topic的消息发送失败,故在禁写前需要业务侧评估是否可接受。
  • 主备节点需要同时禁写。

2. 问题描述

在专有云环境中,RocketMQ集群在运行状态,需要动态修改配置文件的参数,将Broker节点设置为禁止写入数据的状态,现提供通用操作方法,对此情况进行处理。

3.1. 环境检查

3.1.1. Butler控制台中确认容器状态

在Butler控制台中,确认所有容器状态为“绿色”,没有告警信息。

3.1.2. 确认Broker节点数量

  1. 登录天基控制台,在左侧Project框中搜索mq,选择集群,单击集群右侧的集群运维中心,进入集群运维中心页面。
  2. 选择mq-namesrv服务,选择MqNamesrv#服务角色,单击服务器右侧的Terminal,登录任意一台MqNamesrv#角色对应的机器。
  3. 执行以下命令,查看mq-namesrv容器的ID。
    sudo docker ps | grep mq-namesrv
  4. 执行以下命令,登录mq-namesrv容器。
    sudo docker exec -it [$MQ-Namesrv_ID] bash

    说明

  5. 执行以下命令,确认Broker节点数量等于预期值。
    sh /home/admin/rmq/bin/mqadmin clusterList -n 127.0.0.1:9876

3.1.3. 备份配置文件

分别登录master和slave的deploy-broker容器,依次执行以下命令,备份文件。

cd /home/admin/rmq/conf/
cp broker.conf broker.conf.bak

3.2. 实施步骤

3.2.1. 获取需要设置禁止写入数据的Broker节点信息

登录任意一个mq-namesrv容器,执行如下命令,查看并记录需要设置禁止写入数据的Broker机器IP、集群名称以及主备状态。

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

说明

  • 返回结果中“Addr”为Broker机器的IP。
  • “BID”为Broker机器的主备状态,“0”为主机器,“1”为备机器。
  • “Cluster Name”为集群名称。

3.2.2. 将Broker节点设置为禁止写入数据

登录任意一个deploy-broker容器,执行以下命令,将Broker节点设置为禁止写入数据。

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

说明

  • -v参数:4表示为只读,6为可读写,配置禁止写入数据操作时,主备节点都需要设置禁止写入数据的操作。
  • [$Broker_IP_Master]:上一节记录需要设置禁止写入数据Broker节点主机器的IP地址。
  • [$Broker_IP_Slave]:上一节记录需要设置禁止写入数据Broker节点备机器的IP地址。

3.2.3. 确认Broker节点的动态配置参数

登录任意一个deploy-broker容器,执行以下命令,确认Broker服务的内存配置信息中,该参数已修改为预期值。

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

3.2.4. 确认禁止写入数据操作的正确性

登录任意一个mq-namesrv容器,执行以下命令,确认禁止写入数据操作的正确性。

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

说明

  • 观察集群状态和设置禁止写入数据Broker节点的InTPS(LOAD)列返回结果的情况,此值会慢慢减小,直到为“0”,需持续观察5到10分钟。
  • 如有预期外的现象,请及时联系阿里云技术支持。

3.3. 结果验证

3.3.1. 检查集群状态

登录任意一个mq-namesrv容器,执行以下命令,确认集群状态正常。

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

3.3.2. 确认固化配置数据一致性

分别登录master和slave的deploy-broker容器,确认以下文件中修改的参数值统一,并且符合预期值。

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

4. 回滚方案

  1. 分别登录master和slave的deploy-broker容器,依次执行以下命令,将备份的文件还原。
    cd /home/admin/rmq/conf/
    cp broker.conf.bak broker.conf
  2. 依次执行以下命令,将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

5. 补充说明

以下为在实施步骤中,设置禁止写入数据操作配置生效之后的说明。

  • 若后续保持版本不变,如果重启服务,服务的配置参数本文以broker.conf文件中配置的参数为准。
  • 若版本升级,服务的配置参数将重置为默认值。
  • 若版本保持不变,仅仅重启服务,Broker从本地的broker.conf文件中加载的配置,仍能保证修改生效(如消息存储时间)。