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

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

KB: 200106

 · 

更新时间:2021-01-18 16:39

1. 概述

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

方案总览

类别 内容
国产化
风险等级(方案执行的影响)
操作方式 黑屏
操作复杂度
预估执行时长 N/A
客户业务的影响
可监控性 支持
有效性(重启、重拉、补丁、升级、扩容等配置是否丢失) 临时
数据修订(变更是否涉及增删改操作)
执行灰度策略 请向产品侧咨询,明确灰度策略
首次发布时间 N/A
预计完成时间 N/A

1.1. 适用范围

  • 专有云版本:V3.* 
  • 产品:OTS

1.2. 风险说明

处理的过程中可能会出现部分业务中断。

2. 问题描述

在专有云V3环境中,OTS集群的Chunk数量超过200万会提示告警,导致集群负载过高。

3. 解决方案

3.1. 环境检查

查看盘古状态和Chunk数量

  1. 登录天基控制台,在集群框中搜索OTS,选择目标集群,选择TableStore服务和PortalAgServer#服务角色,单击机器右侧的Terminal,登录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

系统显示类似如下,确认无Pnecopy和None的内容输出,如果有请暂停操作,联系阿里云技术支持。

1111.png

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还是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所在的目录。

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

immutable处理方法

  1. 将以下压缩包上传至PortalAgServer#服务角色所在的机器/home/admin目录中并解压。
    ots_immfi.7z
  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.7z
  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. 回滚方案

无需回滚。