通用方案:盘古abnchunk的处理方案

通用方案:盘古abnchunk的处理方案

更新时间:2020-07-24 14:19:14

1. 概述

本文介绍在盘古系统中,出现abnchunk却无法恢复正常的处理方案。

1.1. 适用范围

  • 专有云V2,盘古

  • 专有云V3,盘古
    说明:适用于ChunkServer机器为4台规模小集群,其它规模的集群不适用此方案,请联系阿里云技术支持。

1.2. 风险说明

无风险。

2. 问题描述

专有云部分集群的ChunkServer数量很少(只有四台,比如天基集群),可能会造成类型为小于最小副本数(lessmin)的abnchunk无法恢复正常。原因是LogFile的Chunk出现版本两高两低,或者机器异常掉电等原因导致Chunk写坏,变成无效副本 。如果文件的拷贝数目是(3,3),这种情况下有效副本数是两份,无效副本也是两份,在副本未达到安全的情况下(副本数小于lessmin),无效副本无法删除,又没有新的ChunkServer可以复制有效副本,造成lessmin的副本一直存在。

3. 解决方案

3.1. 环境检查

如果当前环境已部署盘古汇聚控制台,请参见Web界面操作。如无该控制台,请参见命令行操作

检查集群abnchunk

Web界面操作

  1. 登录盘古汇聚控制台,登录地址如下所示。
    http://[$IP]:8620/
    说明:在专有云V2环境[$IP]为DMSAG的IP地址,在V3环境[$IP]为OPS1机器的IP地址。
  2. 单击对应集群右侧的详情,进入该集群的盘古控制台。
  3. 选择数据管理>数据安全,如果没有abnchunk则副本个数为0,如下图所示。

    如果发现abnchunk,如下图所示。

命令行操作

  1. 登录对应集群的飞天AG。
  2. 依次执行以下三条命令,确保只存在类型为lessmin的abnchunk。

    /apsara/deploy/puadmin  fs -abnchunk  -t  none
    /apsara/deploy/puadmin  fs -abnchunk  -t  onecopy
    /apsara/deploy/puadmin  fs -abnchunk  -t  lessmin

    如果发现abnchunk,则如下图所示。第一列是下面要操作要用到的ChunkID。

获取FileID

Web界面操作

选择数据管理>数据安全>lessmin,即可获得FileID。

命令行操作

获取FileID,取ChunkID以“_”分隔的前面的部分。如下图红框部分既是FileId。

确认异常Chunk原因

  1. 执行以下命令,确认是否存在无效Chunk。

    puadmin gfi [$FileID] -d

    如下图所示,该文件的副本数为(3,4)。其中有一台机器上的副本已经失效,显示PANGU_EXPIRED_CHUNK_LOCATION,这种情况就属于无效Chunk。

  2. 确认是否Chunk版本异常,如果上面步骤里没有发现无效的Chunk,则大部分属于Chunk版本不同的情况,检查步骤如下:
    1. 执行以下命令,获取ChunkServer的列表。
      /apsara/deploy/puadmin lscs|grep tcp
      也可在集群运维Chunkserver运维页面获取。
    2. 分别向每一个ChunkServer发送查询命令,参数为上面查到的ChunkID。
      /apsara/deploy/puadmin cs -meta tcp://[$IP]:10260 --chunk=[$ChunkID]
      说明:[$IP]为机器的IP地址。
    3. 检查ChunkLength是否相同。

      如图所示,四个版本的Chunk,两个长度为411385,但另两个小于411385,意味着有两个版本的Chunk是无效的。
      说明:如果以上两种检查都没有发现问题,则需要联系阿里云技术支持,本文档不适用。

检查文件类型

执行puadmin gfi [$FileID] -d命令查看文件类型,如调整副本数的文件类型是Raid normal fileRandom access file则不适用此方案。

3.2. 实施步骤

调整设置Chunk副本数

  1. 确定文件名称。

    1. 执行以下命令。

      /apsara/deploy/puadmin  fs -abnchunk  -t  lessmin
      返回结果如下图所示,取红框部分的FileID。

    2. 执行以下命令,获取文件名称。

      /apsara/deploy/puadmin whois [$FileID]

      系统显示类似如下。

  2. 执行以下命令,设置文件副本。
    说明:设置完新的副本数之后,盘古开始删除无效的副本,一般来说专有的集群在半个小时到一个小时之间。
    /apsara/deploy/pu setreplica pangu://localcluster/[$File] [$Min] [$Max]
    示例如下图所示 。

    说明
    • [$File]为puadmin whois命令的返回值。
    • [$Min]为当前正常的副本数,比如当前有4个副本,2个有效,2个无效,那就可以设置成2。
    • [$Max]可以保持之前的不变,或者与[$Min]相等。

确认无效副本已经删除

  • 存在无效Chunk的情况,执行以下命令。

    puadmin gfi [$FileID] -d

    如果不在有Chunk显示类似的PANGU_EXPIRED_CHUNK_LOCATION信息,则表示已经删除完毕。

  • Chunk版本不一致,执行以下命令,依次去ChunkServer上确认版本信息。

    /apsara/deploy/puadmin cs -meta tcp://[$IP]:10260 --chunk=[$ChunkID]

    当返回PANGU_CHUNKSERVER_CHUNK_NOT_FOUND时,表明该Chunk副本已经在此ChunkServer上被删除,如下图所示。

无效Chunk无法删除的处理方法

如果无效副本长时间无法删除,有可能此文件正在访问,请通过以下命令进行确认。

/apsara/deploy/puadmin fs -lock | grep [$FileID]

系统返回结果如下,说明所示文件被打开的,请等待文件关闭,或联系阿里云技术支持。

恢复文件副本的正常设置

确认无效副本已经删除之后,执行以下命令,将文件恢复到原来正常的副本数。

/apsara/deploy/pu setreplica pangu://localcluster/[$File] [$Min] [$Max]

批量处理

  1. 下载以下压缩包,上传到集群AG的/home/admin目录。
    pangu_availability_management.zip
  2. 使用admin登录集群AG,解压该压缩包。
  3. 依次执行以下命令,批量分析符合lessmin的Chunk。该工具会统计出所有的abnchunk的文件路径,并生成两个脚本文件,lessmin_abnchunnk_to_2_2_XXX.sh脚本文件用来降低副本数,lessmin_abnchunnk_to_3_3_XXX.sh脚本文件用来恢复副本数。
    cd /home/admin/pangu_availability_management/pangu_diagnosis/tools
    ./abnchunk_analyze.py lessmin
  4. 确认该脚本有可执行权限,请执行以下命令,给脚本赋予可执行权限。
    chmod +x *.sh
  5. 执行以下命令,批量降低副本数。
    ./lessmin_abnchunnk_to_2_2_XXX.sh
  6. 执行以下命令,批量恢复副本数。
    注意:需最少等待1小时。
    ./lessmin_abnchunnk_to_3_3_XXX.sh
  7. 执行以下命令,确认结果生效。
    puadmin fs -abnchunk -t lessmin

3.3. 结果验证

参见实施步骤,确认无效Chunk已删除。

4. 回滚方案

无需回滚,盘古只删除无效的Chunk。