通用方案:专有云环境OTS集群Chunk数量过高的处理方法

通用方案:专有云环境OTS集群Chunk数量过高的处理方法

更新时间:2020-07-01 12:52:08

1. 概述

本文主要介绍在专有云环境,OTS集群Chunk数量过高的处理方法。

1.1. 适用范围

  • 专有云V2,OTS
  • 专有云V3,OTS

1.2. 用户告知

  • 操作方式:黑屏
  • 操作复杂度:中
  • 风险等级:中
    说明:处理的过程中可能会出现部分业务中断。
  • 本文以专有云V3环境为例,V2环境请登录ots_ag容器,执行以下操作。

2. 问题描述

专有云环境OTS集群的Chunk数量超过200万就会告警,从而导致集群负载过高。

3. 解决方案

3.1. 环境检查

查看盘古状态和Chunk数量

  1. 根据不同环境,登录对应的机器,切换到admin用户。
    • 在专有云V2环境,登录OTS集群的ots_ag容器,关于如何登录容器请参见专有云V2环境中如何登录容器
    • 在专有云V3环境,需要登录的机器如下:
      • tianji集群选择TableStoreInner服务和PortalAgServer#服务角色,登录对应的机器。
      • OTS集群选择TableStore服务和PortalAgServer#服务角色,登录对应的机器。
  2. 执行以下命令,查看盘古状态和Chunk数量。
    puadmin lscs |grep tcp
    系统显示类似如下,确认单台机器Chunk数量超过200万,即超过告警阈值。
    5.png
    说明:确认盘古状态都为NORMAL,若为其他状态,请暂停操作,联系阿里云技术支持。

查看盘古空间

执行以下命令,查看盘古空间。

puadmin ms -summary

系统显示类似如下,当需要降低Chunk数量时,需要保证盘古空间剩余空间在25%左右。

1111.png

检查集群abnchunk

执行以下命令,检查集群abnchunk。

for i in {none,onecopy,lessmin};do puadmin fs -abnchunk -t $i ;done

系统显示类似如下。

1111.png

说明:确认无Pnecopy和None的内容输出,如果有请暂停操作,联系阿里云技术支持。

3.2. 实施步骤

查询sls_offline目录并清理

  1. 登录PortalAgServer#服务角色所在的机器,依次执行以下命令,查看是否存在sls_offline目录。
    pu quota pangu://localcluster/sls_ots_redo_data/
    pu quota pangu://localcluster/tmp/job/snapshot/sls_offline/
    系统显示类似如下。
    3.png
  2. 如果存在sls_offline目录,请执行以下步骤进行删除,并清理盘古回收站,需要和阿里云技术支持确认,不存在则无需处理。
    1. 依次执行以下命令,删除sls_offline目录。
      pu rmdir pangu://localcluster/sls_ots_redo_data/
      pu rmdir pangu://localcluster/tmp/job/snapshot/sls_offline/
    2. 执行以下命令,清理盘古回收站。
      puadmin fs -crb
  3. 如果执行以上步骤清理Chunk,但是数量依旧未下降,请执行以下步骤。

判断Chunk类型文件

  1. 登录Chunk数量过高的机器,执行以下命令,获取所有的ChunkID列表。
    find /apsarapangu/disk*/chunks -type f|awk -F/ '{print $NF}' > ckids
  2. 依次执行以下命令,计算Chunk的分布区间。
    awk -F "_" '{if($2>1000 ) print $1}' ckids |wc -l
    awk -F "_" '{if($2<=500 && $2>100 ) print $1}' ckids |wc -l
    awk -F "_" '{if($2<=100 && $2>=10 ) print $1}' ckids |wc -l
    awk -F "_" '{if($2<10 ) print $1}' ckids |wc -l
  3. 执行以下命令,查看并记录ChunkID。
    cat ckids | head
    系统显示类似如下。
    333.jpg
  4. 登录PortalAgServer#服务角色所在的机器,执行以下命令,查看是immutable file文件还是logfile文件导致Chunk数量过高。
    puadmin whois [$ChunkID]
    系统显示类似如下。
    {35DF7AFB-0E05-42D2-A568-EC73F129D570}_20200311171903.png
    说明:
    • [$ChunkID]为在第3步获取的ChunkID。
    • /apsara/sqlonline-OTS/OTSPublicDB/CommitLog/xxxx/xxx为logfile文件所在的目录。

    • apsara/sqlonline-OTS/OTSPublicDB/Data/xxx/xxx为immutable file文件所在的目录。

  5. 请根据现场情况,选择以下对应的步骤,清理Chunk数量。

immutable file文件处理方法

  1. 将以下压缩包上传至PortalAgServer#服务角色所在的机器/home/admin目录中并解压。
    ots_immfi.zip
  2. 登录PortalAgServer#服务角色所在的机器,执行以下命令,找出分区中文件数量超过10000的文件。
    ./find_large_file_number_part.sh 10000 > /tmp/last_file_partition_list
    说明:若分区中找不到超出10000的文件,请执行以下命令,找出分区中文件数量超过5000的文件。
    ./find_large_file_number_part.sh 5000 > /tmp/last_file_partition_list
  3. 执行以下命令,删除无效数据。
    sudo bash remove_invalid_immutable_file.sh /tmp/last_file_partition_list

logfile文件处理方法

  1. 将以下压缩包上传至PortalAgServer#服务角色所在的机器/home/admin目录中并解压。
    erase_log_by_dir.zip
  2. 登录PortalAgServer#服务角色所在的机器,执行以下命令,执行force_clear_logfiles_old.sh脚本。
    ./ force_clear_logfiles_old.sh
    说明:在V3.7之前的版本使用force_clear_logfiles_old.sh脚本,包括V3.7的版本。V3.7之后的版本使用force_clear_logfiles.sh脚本。
    系统显示类似如下,若提示failed关键字表示Chunk数量超过60%以上,则会导致执行以下步骤之后,Chunk数量不会明显下降,需要对分裂失败的分区进行合并。
    5.png
    1. 执行force_clear_logfiles_old.sh脚本之后会在同级目录下,生成一个failed_split_parts文件,该文件中的内容为分裂失败的分区ID。
    2. 在failed_split_parts文件中,找到一个分区ID。依次执行以下命令,手动合并分区,确认返回结果为Done,表示执行成功。
      cd /apsara/TableStoreAdmin/split
      python2.7 split_merge.py merge_partition --force [$Part_ID]
      说明:[$Part_ID]为分区ID。
    3. 单个分区合并成功之后,执行以下命令,对failed_split_parts文件中的所有分区进行合并
      for part in `cat failed_split_parts`; do echo $part; python2.7 split_merge.py merge_partition --force [$Part_ID]; done
      说明:分区合并成功之后,需要重新执行步骤2。
  3. 逐台登录OTS集群中的物理机,执行以下命令,获取所有的ChunkID。
    find /apsarapangu/disk*/chunks -type f|awk -F/ '{print $NF}' > chunkids
  4. 执行以下命令,获取CommitLog文件中index值为10000的值。
    cat chunkids |awk -F_ '{if($2 > 10000) print $1}' |sort |uniq > commitlog
  5. 执行以下命令,将获取的CommitLog文件拷贝至PortalAgServer#服务角色所在的机器。
    for i in `cat commitlog_`;do puadmin whois $i;done |awk -F 'is' '!/nuwa/{print $NF}' |grep -v '^$' > logfile
  6. 登录PortalAgServer#服务角色所在的机器,执行以下命令,进入执行目录。
    cd /home/admin/TableStoreAdmin/compaction
  7. 执行以下命令,确认生成新的文件为/tmp/parts_to_do1
    sh run.sh logfile
    系统显示类似如下。
    1111.jpg
  8. 执行以下命令,清理Chunk数量。
    python2.7 parallel_compact.py -f /tmp/parts_to_do -n 4
    系统显示类似如下,Chunk数量依旧未下降。
    555.png
  9.  执行以下命令,获取CommitLog文件中index值为5000的值。
    cat chunkids |awk -F_ '{if($2 > 5000) print $1}' |sort |uniq > commitlog
  10. 执行以下命令,确认Chunk数量下降。
    python2.7 parallel_compact.py -n 2 -a
    系统显示类似如下。
    555555.png

3.3. 结果验证

登录PortalAgServer#服务角色所在的机器。执行以下命令,确认Chunk数量下降。

puadmin lscs |grep tcp

系统显示类似如下。

888.png

 

4. 回滚方案

无需回滚。