应急预案:专有云V3环境中RocketMQ的Broker备节点上线的方法

应急预案:专有云V3环境中RocketMQ的Broker备节点上线的方法

更新时间:2020-09-04 13:44:40

1. 概述

本文主要介绍在专有云V3环境中,RocketMQ的Broker备节点上线的方法。

1.1. 适用范围

  • 专有云V3企业版,RocketMQ

1.2. 用户告知

  • 适用平台:x86、ARM
  • 授权级别:L2(二线技术支持工程师)
  • 临时或固化方案:固化
  • 操作复杂度:高
  • 预估执行时长:45分钟
    说明:操作一个Broker备节点的时间为45分钟,如果操作多个,评估的时间需要用45分钟乘以操作的Broker节点数。
  • 业务影响:是
    说明
    • 备机上下线过程中会有消息收发的秒级失败,需对业务进行评估,建议低峰期执行。
    • 操作若想对RocketMQ服务无影响,让业务侧无感知,则变更前需要对相关的Broker组进行禁写,并保持禁写3天以上,禁写前需要评估集群中正常服务的Broker是否可以支撑业务高峰期的TPS。
  • 风险等级:高

2. 问题描述

在专有云V3环境中,存在问题的备节点正常与非正常下线后,如何重新上线。

3. 解决方案

3.1. 环境检查

  1. 登录天基控制台,在Project框中搜索aliware-taokeeper,单击BasicCluster集群右侧的集群运维中心。选择aliware-taokeeper服务与taokeeper#服务角色,在过滤出来的主机右侧单击Terminal,登录对应的机器。
  2. 登录taokeeper容器,执行以下命令,进入ZooKeeper的命令行。
    sh /home/admin/taokeeper-3.4.6/zookeeper-3.4.6/bin/zkCli.sh
    说明:这里的路径因版本不同而不同。
    系统显示类似如下。
  3. 执行以下命令,查看Broker节点主备情况。
    get /MQFailover/StateMachine/[$Cluster]/[$Cluster_Broker]
    说明
    • [$Cluster]为集群名,[$Cluster_Broker]为Broker名称,可登录Broker节点,通过执行以下命令进行确认。
      sh /home/admin/rmq/bin/mqadmin clusterList
    • 返回值为SLAVE,则是备节点,返回其余值(ASYNC_MASTER或SYNC_MASTER),则是主节点。
    系统显示类似如下。
  4. 录上一步确定的备节点的宿主机,执行以下命令,确定备节点的/home/admin/store在宿主机中的挂载目录。
    sudo docker inspect [$Container_ID]
    说明:[$Container_ID]为备节点容器的ID。
    系统显示类似如下。

3.2. 实施步骤

停止备节点

说明:若备节点已停止,则忽略此步骤。

  1. 请参见通用方案:专有云禁止天基启动app容器中的停止操作,停止备节点。
    说明
    • 在专有云V3环境,天基停止容器后,容器会被天基自动拉起。
    • 方舟环境需要登录Butler运维管控平台,选择系统管理>调度管理,停止restart.containers任务,停止全部的butler-all容器的运行。
  2. 进入备节点容器内,执行以下命令,关闭备节点。
    注意:若无法正常停止容器,则使用docker stop [$Container_ID]命令,停止容器。
    sh /home/admin/rmq/bin/mqshutdown broker

清理消息数据内容

  1. 登录环境检查中确定的备节点的宿主机,备份环境检查第4步确定的目录中的内容。
  2. 清理环境检查第4步确定的目录中的内容。
    注意:不要删除目录。

开启备节点

请参见以下KB文档中的启动操作,恢复天基的自动拉起任务并等待备节点被自动拉起。

  • KB 87194 通用方案:专有云禁止天基启动app容器

方舟环境执行以下操作,恢复Broker节点的自动拉起功能。

  1. 登录容器所在宿主机,执行以下命令,启动节点,先启动主节点,后启动备节点。
    docker start [$Container_ID]
  2. 登录Butler运维管控平台,选择系统管理>调度管理,启动restart.containers任务。
  3. 启动全部的butler-all容器。

确认同步状态

  1. 执行以下命令,确认备节点已加入集群。
    sh /home/admin/rmq/bin/mqadmin clusterList
  2. 观察备机TPS,此时备机可能会大量拉取主机数据,进行同步,TPS远大于主机与其他节点的值,此为正常现象,持续观察,直至备机TPS稳定,且与主机一致。
  3. 参见环境检查,在ZooKeeper的命令行,执行以下命令,检查ZooKeeper中该Broker节点的state属性,是否为"state":"SYNC_STATE"。若状态不符,请联系阿里云技术支持,确认是否需要核对数据一致性。
    get /MQFailover/StateMachine/[$Cluster]/[$Cluster_Broker]

使禁止写入的节点恢复正常

登录任意一台deploy-broker容器,执行以下命令,使禁止写入的节点恢复正常。

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

说明

  • -v:4为只读,6为可读写,遵循先恢复主节点,后恢复备节点的原则。
  • [$Broker_IP]:为需要恢复禁止写入的Broker节点机器的IP地址。

3.3. 结果验证

参见确认同步状态,进行验证。

4. 回滚方案

  1. 登录任意一台deploy-broker容器,执行以下命令,禁止主备节点写入。
    sh /home/admin/rmq/bin/mqadmin updateBrokerConfig -b [$Broker_IP]:10911 -k brokerPermission -v 4
  2. 参见停止备节点,停止备节点。
  3. 参见清理消息数据内容,还原消息数据内容。