本文主要介绍在专有云V3环境中,OTS集群Chunk数量过高的处理方法。
方案总览
类别 | 内容 |
国产化 | 否 |
风险等级(方案执行的影响) | 中 |
操作方式 | 黑屏 |
操作复杂度 | 中 |
预估执行时长 | N/A |
客户业务的影响 | 有 |
可监控性 | 支持 |
有效性(重启、重拉、补丁、升级、扩容等配置是否丢失) | 临时 |
数据修订(变更是否涉及增删改操作) | 有 |
执行灰度策略 | 请向产品侧咨询,明确灰度策略 |
首次发布时间 | N/A |
预计完成时间 | N/A |
处理的过程中可能会出现部分业务中断。
在专有云V3环境中,OTS集群的Chunk数量超过200万会提示告警,导致集群负载过高。
puadmin lscs |grep tcp系统显示类似如下,确认单台机器Chunk数量超过200万,即超过告警阈值。
说明:确认盘古状态都为NORMAL,若为其他状态,请暂停操作,联系阿里云技术支持。
执行以下命令,查看盘古空间。
puadmin ms -summary
系统显示类似如下,当需要降低Chunk数量时,需保证盘古的剩余空间在25%左右。
执行以下命令,检查集群abnchunk。
for i in {none,onecopy,lessmin};do puadmin fs -abnchunk -t $i ;done
系统显示类似如下,确认无Pnecopy和None的内容输出,如果有请暂停操作,联系阿里云技术支持。
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,但是数量依旧未下降,请执行以下步骤。
find /apsarapangu/disk*/chunks -type f|awk -F/ '{print $NF}' > ckids
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
cat ckids | head系统显示类似如下。
puadmin whois [$ChunkID]系统显示类似如下。
说明:
- [$ChunkID]为在第3步获取的ChunkID。
/apsara/sqlonline-OTS/OTSPublicDB/CommitLog/xxxx/xxx
为logfile所在的目录。
/apsara/sqlonline-OTS/OTSPublicDB/Data/xxx/xxx
为immutable所在的目录。
/home/admin
目录中并解压。./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
/home/admin
目录中并解压。./force_clear_logfiles_old.sh
说明:在V3.7之前的版本使用force_clear_logfiles_old.sh脚本,包括V3.7的版本。V3.7之后的版本使用force_clear_logfiles.sh脚本。系统显示类似如下,若提示
failed
关键字表示Chunk数量超过60%以上,则会导致执行以下步骤之后,Chunk数量不会明显下降,需要对分裂失败的分区进行合并。cd /apsara/TableStoreAdmin/split python2.7 split_merge.py merge_partition --force [$Part_ID]
说明:[$Part_ID]为分区ID。
for part in `cat failed_split_parts`; do echo $part; python2.7 split_merge.py merge_partition --force [$Part_ID]; done
说明:分区合并成功之后,需要重新执行步骤2。
find /apsarapangu/disk*/chunks -type f|awk -F/ '{print $NF}' > chunkids
cat chunkids |awk -F_ '{if($2 > 10000) print $1}' |sort |uniq > commitlog
for i in `cat commitlog_`;do puadmin whois $i;done |awk -F 'is' '!/nuwa/{print $NF}' |grep -v '^$' > logfile
cd /home/admin/TableStoreAdmin/compaction
/tmp/parts_to_do1
。
sh run.sh logfile系统显示类似如下。
python2.7 parallel_compact.py -f /tmp/parts_to_do -n 4系统显示类似如下,Chunk数量依旧未下降。
cat chunkids |awk -F_ '{if($2 > 5000) print $1}' |sort |uniq > commitlog
python2.7 parallel_compact.py -n 2 -a系统显示类似如下。
登录PortalAgServer#服务角色所在的机器。执行以下命令,确认Chunk数量下降。
puadmin lscs |grep tcp
系统显示类似如下。
无需回滚。