• 首页 > 
  • 应急预案:专有云环境中RocketMQ关闭Broker鉴权的方法

应急预案:专有云环境中RocketMQ关闭Broker鉴权的方法

KB: 200712

 · 

更新时间:2021-01-20 22:06

1. 概述

本文主要介绍在专有云环境中,RocketMQ关闭Broker鉴权的方法。

1.1. 适用范围

  • 专有云V2,RocketMQ
    说明:适用于企业版V2.0.0~V2.5.0环境,包含V2.0.0和V2.5.0环境。
  • 专有云V3,RocketMQ
    说明
    • 适用于敏捷PaaS版V3.3~V3.8.0环境。
    • 适用于敏捷标准版V3.1~V3.4.x环境。
    • 适用于企业版V3.0.0~V3.12.0环境,包含V3.0.0和V3.12.0环境。

1.2. 用户告知

  • 适用平台:x86、ARM
  • 授权级别:L1(一线驻场工程师)、L2(二线技术支持工程师)
  • 临时或固化方案:固化
  • 操作复杂度:中
  • 预估执行时长:45分钟
  • 业务影响:否
    说明
    • 关闭鉴权后RocketMQ服务端不再对RocketMQ收发消息的客户端进行鉴权,即使用任何GID和AK/SK都可收发消息。故在此期间程序配置GID和AK/SK信息时需要特别注意,如果拼写错误会导致在恢复鉴权时消息收发失败。
    • 如果关闭鉴权期间有新的客户端配置接入RocketMQ服务,建议恢复鉴权时对Broker进行灰度操作。
  • 风险等级:高
    说明
    • Broker运行时参数较多,更改时请确认好参数,如果时间允许,尽量在业务低峰期修改。
    • 关闭鉴权后如果Broker重启,则onsAuthorityEnable参数会以Broker的/home/admin/rmq/conf/broker.conf配置文件中设置的值为准,故如需防止重启带来的风险,需要将各Broker配置文件中的参数进行固化修改,使其与变更情况一致。

2. 问题描述

RocketMQ产品本身通过RAM进行鉴权,运行正常的情况下,Topic、Pid、Cid都可正常管理,如果鉴权侧出现问题,RocketMQ的鉴权就会产生异常。为避免RocketMQ侧因鉴权异常导致出现问题,需要临时降级,将鉴权关闭,待鉴权服务问题修复后再恢复鉴权。

3. 解决方案

3.1. 环境检查

确认RocketMQ产品已达终态

  • 企业版:登录天基控制台,选择任务>部署概况,在部署详情页面,确认RocketMQ产品已达终态。
  • 敏捷版:登录Master节点,执行以下命令,确认运行正常。
    kubectl get pods|grep mq

确认RocketMQ集群状态为预期内情况

  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. 执行以下命令,确认集群情况正常。
    sh /home/admin/rmq/bin/mqadmin clusterList -n 127.0.0.1:9876
    系统显示类似如下。

3.2. 实施步骤

以专有云V3企业版为例登录Broker容器执行以下操作,专有云V2企业版请登录Broker物理机,敏捷版请登录Broker的Pod。

确认鉴权相关参数

  1. 登录天基控制台,在Project框中搜索mq,单击BasicCluster集群右侧的集群运维中心。选择mq-broker服务和DeployBroker#服务角色,在过滤出来的主机右侧单击Terminal,登录对应的机器。
  2. 执行以下命令,查看mq-broker容器ID。
    sudo docker ps|grep mq-broker
  3. 执行以下命令,进入mq-broker容器。
    sudo docker exec -it [$Container_ID] bash
    说明:[$Container_ID]为容器ID。
  4. 切换到admin用户,执行以下命令,确认实时鉴权参数。
    sh /home/admin/rmq/bin/mqadmin getBrokerConfig -c cluster1 2>/dev/null|grep Auth
    说明:[$ClusterName]为现场集群名称,可以通过sh /home/admin/rmq/bin/mqadmin cluserList命令查询结果中的#Cluster Name列进行确认。

关闭鉴权

登录任意Broker容器,切换到admin用户,执行以下命令,修改onsAuthorityEnable的值,关闭RAM鉴权。

注意:如果有需要对部分Broker关闭鉴权,则对部分IP执行以下命令。
sh /home/admin/rmq/bin/mqadmin updateBrokerConfig -b [$Broker_IP]:10911 -k onsAuthorityEnable -v false
说明:[$Broker_IP]为每个deploy-broker容器的IP地址。

也可通过batch_modify_ram.sh脚本文件,可参见以下操作,批量循环执行,关闭RAM鉴权。

  • 执行以下命令,打开鉴权。
    sh batch_modify_ram.sh e
  • 执行以下命令,关闭鉴权。
    sh batch_modify_ram.sh d
    系统显示类似如下。

3.3. 结果验证

登录任意Broker容器,切换到admin用户,执行以下命令,确认实时鉴权参数。保证所有的主节点onsAuthorityEnable参数为false即关闭正常。

注意:如果有需要对部分Broker关闭鉴权,则对部分IP执行以下命令。
sh /home/admin/rmq/bin/mqadmin getBrokerConfig -c [$ClusterName] 2>/dev/null|grep Auth

系统显示类似如下。

针对每组Broker的备节点需要执行以下命令,逐一确认。

sh /home/admin/rmq/bin/mqadmin getBrokerConfig -b [$Broker_IP]:10911 2>/dev/null|grep Auth

4. 回滚方案

参见实施步骤,将onsAuthorityEnable的值重新设置为true。