通用方案:专有云V3环境OTS集群Chunk数量过高的处理方法
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数量
- 登录天基控制台,在集群框中搜索OTS,选择目标集群,选择TableStore服务和PortalAgServer#服务角色,单击机器右侧的Terminal,登录PortalAgServer#服务角色所在的机器。
- 执行以下命令,查看盘古状态和Chunk数量。
puadmin lscs |grep tcp
系统显示类似如下,确认单台机器Chunk数量超过200万,即超过告警阈值。说明:确认盘古状态都为NORMAL,若为其他状态,请暂停操作,联系阿里云技术支持。
查看盘古空间
执行以下命令,查看盘古空间。
puadmin ms -summary
系统显示类似如下,当需要降低Chunk数量时,需保证盘古的剩余空间在25%左右。
检查集群abnchunk
执行以下命令,检查集群abnchunk。
for i in {none,onecopy,lessmin};do puadmin fs -abnchunk -t $i ;done
系统显示类似如下,确认无Pnecopy和None的内容输出,如果有请暂停操作,联系阿里云技术支持。
3.2. 实施步骤
查询sls_offline目录并清理
- 登录PortalAgServer#服务角色所在的机器,依次执行以下命令,查看是否存在
sls_offline
目录。pu quota pangu://localcluster/sls_ots_redo_data/
系统显示类似如下。
pu quota pangu://localcluster/tmp/job/snapshot/sls_offline/ - 如果存在
sls_offline
目录,请执行以下步骤进行删除,并清理盘古回收站,需要和阿里云技术支持确认,不存在则无需处理。- 依次执行以下命令,删除
sls_offline
目录。pu rmdir pangu://localcluster/sls_ots_redo_data/ pu rmdir pangu://localcluster/tmp/job/snapshot/sls_offline/
- 执行以下命令,清理盘古回收站。
puadmin fs -crb
- 依次执行以下命令,删除
-
如果执行以上步骤清理Chunk,但是数量依旧未下降,请执行以下步骤。
判断Chunk类型
- 登录Chunk数量过高的机器,执行以下命令,获取所有的ChunkID列表。
find /apsarapangu/disk*/chunks -type f|awk -F/ '{print $NF}' > ckids
- 依次执行以下命令,计算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
- 执行以下命令,查看并记录ChunkID。
cat ckids | head
系统显示类似如下。 - 登录PortalAgServer#服务角色所在的机器,执行以下命令,查看是immutable还是logfile导致Chunk数量过高。
puadmin whois [$ChunkID]
系统显示类似如下。说明:
- [$ChunkID]为在第3步获取的ChunkID。
-
/apsara/sqlonline-OTS/OTSPublicDB/CommitLog/xxxx/xxx
为logfile所在的目录。 -
/apsara/sqlonline-OTS/OTSPublicDB/Data/xxx/xxx
为immutable所在的目录。
- 请根据现场情况,选择以下对应的步骤,清理Chunk数量。
immutable处理方法
- 将以下压缩包上传至PortalAgServer#服务角色所在的机器
/home/admin
目录中并解压。
ots_immfi.7z - 登录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
- 执行以下命令,删除无效数据。
sudo bash remove_invalid_immutable_file.sh /tmp/last_file_partition_list
logfile处理方法
- 将以下压缩包上传至PortalAgServer#服务角色所在的机器
/home/admin
目录中并解压。
erase_log_by_dir.7z - 登录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数量不会明显下降,需要对分裂失败的分区进行合并。- 执行force_clear_logfiles_old.sh脚本之后会在同级目录下,生成一个failed_split_parts文件,该文件中的内容为分裂失败的分区ID。
- 在failed_split_parts文件中,找到一个分区ID。依次执行以下命令,手动合并分区,确认返回结果为Done,表示执行成功。
cd /apsara/TableStoreAdmin/split python2.7 split_merge.py merge_partition --force [$Part_ID]
说明:[$Part_ID]为分区ID。
- 单个分区合并成功之后,执行以下命令,对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。
- 逐台登录OTS集群中的物理机,执行以下命令,获取所有的ChunkID。
find /apsarapangu/disk*/chunks -type f|awk -F/ '{print $NF}' > chunkids
- 执行以下命令,获取CommitLog文件中index值为10000的值。
cat chunkids |awk -F_ '{if($2 > 10000) print $1}' |sort |uniq > commitlog
- 执行以下命令,将获取的CommitLog文件拷贝至PortalAgServer#服务角色所在的机器。
for i in `cat commitlog_`;do puadmin whois $i;done |awk -F 'is' '!/nuwa/{print $NF}' |grep -v '^$' > logfile
- 登录PortalAgServer#服务角色所在的机器,执行以下命令,进入指定目录。
cd /home/admin/TableStoreAdmin/compaction
- 执行以下命令,确认生成新的文件为
/tmp/parts_to_do1
。sh run.sh logfile
系统显示类似如下。 - 执行以下命令,清理Chunk数量。
python2.7 parallel_compact.py -f /tmp/parts_to_do -n 4
系统显示类似如下,Chunk数量依旧未下降。 - 执行以下命令,获取CommitLog文件中index值为5000的值。
cat chunkids |awk -F_ '{if($2 > 5000) print $1}' |sort |uniq > commitlog
- 执行以下命令,确认Chunk数量下降。
python2.7 parallel_compact.py -n 2 -a
系统显示类似如下。
3.3. 结果验证
登录PortalAgServer#服务角色所在的机器。执行以下命令,确认Chunk数量下降。
puadmin lscs |grep tcp
系统显示类似如下。
4. 回滚方案
无需回滚。