应急预案:OTS因调用Nuwa创建锁超时导致分区加载失败的解决方法

应急预案:OTS因调用Nuwa创建锁超时导致分区加载失败的解决方法

更新时间:2020-08-20 10:48:21

1. 概述

本文主要介绍在专有云环境中,OTS因调用Nuwa创建锁超时导致分区加载失败的解决方法。

1.1. 适用范围

  • 专有云V2企业版,OTS
  • 专有云V3企业版,OTS

1.2. 用户告知

  • 适用平台:x86、ARM
  • 授权级别:L2(二线技术支持工程师)
  • 临时或固化方案:临时
  • 操作复杂度:中
  • 预估执行时长:10分钟
  • 业务影响:否
    说明:在使用kill命令结束sqlonline_worker进程的机器上,因为没有分区加载,所有不会影响客户业务。
  • 风险等级:高

2. 问题描述

在加载分区时,OTS端会调用Nuwa Client来创建锁,由于Nuwa Client判定这个会话过期,出现no valid session的问题,导致无法创建锁,使得分区无法加载,影响服务。正常情况下,OTS端会在写pangu路径上检查,如果发现Nuwa Client会话过期,会重启进程,但是如果sqlonline_worker并没有分区,不会触发写服务,进程就不会重启。

3. 解决方案

3.1. 环境检查

  1. 根据不同环境,登录对应的机器,切换到admin用户。
    • 在专有云V2环境,登录OTS集群的ots_ag容器,关于如何登录容器请参见专有云V2环境中如何登录容器
    • 在专有云V3环境,需要登录的机器如下:
      • tianji集群选择TableStoreInner服务和PortalAgServer#服务角色,登录对应的机器。
      • OTS集群选择TableStore服务和PortalAgServer#服务角色,登录对应的机器。
  2. 执行以下命令,查看分区加载完整性,如果有分区ID输出,证明有分区加载失败。
    sql cpl
    系统显示类似如下。

3.2. 实施步骤

根据分区ID查找sqlonline_worker报错日志

  1. 根据环境检查第2步输出的WorkAddress,登录加载失败分区对应的物理机。
  2. 执行以下命令,查找sqlonline_worker进程日志所在的目录。
    ps -ef | grep sqlonline_worker
    系统显示类似如下,红框中内容为日志所在目录。
  3. 进入上一步获取的日志所在目录,执行以下命令,根据分区ID查找该分区加载失败的报错信息。
    grep [$Partition_ID] sqlonline_worker.LOG
    说明:[$Partition_ID]为环境检查第2步输出的PartitionID。
    若过滤到以下报错,则是因为连接nuwa会话超时导致,关键报错信息为NoValidSession: Session expired by client side
    Create nuwa file fail: file name:nuwa://tianji-A-8a00:10240/sys/fuxi_partition_lock/sqlonline-OTS/SqlWorkerRole/partition_lock_00ace7bf-298a-47eb-ada2-aa57d041f8de error:<unknown throw location>: NoValidSession: Session expired by client side, 0x1f6ed7b4e1524f0b
    系统显示类似如下。
  4. 查看同级目录下的apsara_base.log日志文件,确认有连接nuwa zk超时信息。
  5. 若通过上述检查确认是连接Nuwa会话超时,可以使用kill命令结束这台机器上的sqlonline_worker进程,重新连接Nuwa,具体操作如下:
    1. 执行以下命令,获取sqlonline_worker进程的ID。
      ps -ef | grep sqlonline_worker
      系统显示类似如下。
    2. 执行以下命令,结束sqlonline_worker进程。
      kill -9 [$Pid]
      说明:[$Pid]为进程ID。

3.3. 结果验证

参见环境检查,执行以下命令,查看分区加载是否完成,如果没分区ID输出,则说明加载完成。

sql cpl

4. 回滚方案

暂无回滚方法。