[NOTE] Updated January 20, 2020. This article may have outdated content or subject matter.
0x00 前景介绍
该版本文档内容适用于 TiKV 3.0 之前版本;不包含使用 TiKV Titan engine 架构的内容
- TiKV 节点磁盘占用主要为以下三个目录
{{deploy_dir}}/log
TiKV 日志目录,目前日志 GC 需要单独脚本操作{{deploy_dir}}/data
TiKV rocksDB 数据目录,用来存放 KV 数据{{deploy_dir}}/data/snap
TiKV snap 数据目录,region 迁移时会先生成一个 snapshot 文件,然后通过网络传输到其他节点
场景
- 业务:持续写入数据,仅保留最近一月数据;要求快速回收磁盘空间或磁盘空间相对均匀
- 集群:有数十台 TiKV ,每台 TiKV 磁盘大小仅为 500G
- 现象:仅有三十几台 TiKV 磁盘占用超过 60%,其余 TiKV 在空跑状态;个别 TiKV 持续写入达到 90%
0x01 - 操作
- 调整磁盘占用比较高得 store 权重,控制磁盘 TiKV 写入量。
- release-2.0(RC & GA) 之后,通过调整 store 权重,可以降低 leader 与 region 的数量,进而控制磁盘空间的占用率
- release-1.0 调整 store 权重,在不涉及 null region 时,可以控制磁盘空间占用率 (如果长期持续删除大量输出会造成 null region)
- release-1.0 之前,通过下线方式控制磁盘空间占用
- 本文中未涉及的信息点
- TiKV
dynamic-level-bytes
参数(动态管理 LSM 技术,配合 LSM compactions 食用) - TiKV 2.0 版本
use-delete-range
参数 - 2.0 版本
region-merge
功能(主动合并 table 纬度内 null region 或小于阈值参数的 region) - 修改 TiKV LSM 每层压缩参数,如:
- no: kNoCompression
- snappy: kSnappyCompression
- zlib: kZlibCompression
- bzip2: kBZip2Compression
- lz4: kLZ4Compression
- lz4hc: kLZ4HCCompression
- zstd: kZSTD
调整 store 权重
通过 PD http API 快速查看集群内所有 Store 权重信息
1
| curl http://10.10.10.15:2379/pd/api/v1/stores | egrep '(id|address|state_name|region_weight|available)' | awk '{if(NR%5!=0)ORS=" "; else ORS="\n"}1' | sed 's/[ ][ ]*/ /g' | sed 's/"//g' | sort -nrk 8
|
1
| ./pd-ctl -u http://10.10.10.15:2379
|
1
2
3
4
5
6
7
8
9
10
11
12
13
| » help store
show the store status
Usage:
pdctl store [delete|label|weight] <store_id>
store [command]
Available Commands:
delete delete the store
label set a store's label value
weight set a store's leader and region balance weight
Use "help store [command] " for more information about a command.
|
- 调整 store 194 节点的 leader 与 region 权重
- 权重可调范围
0.000001 到 1
,默认值为 1 - 格式为:
store weight storeID leader权重 region权重
1
| » store weight 194 0.1 0.1
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
| » store 194
{
"store": {
"id": 194,
"address": "10.10.10.13:20160",
"state": 0,
"state_name": "Up"
},
"status": {
"capacity": "500 GiB",
"available": "82 GiB",
"leader_weight": 0.1, # leader 权重
"region_count": 31316,
"region_weight": 0.1, # region 权重
"region_score": 313160,
"start_ts": "2018-04-22T08:05:13+08:00",
"last_heartbeat_ts": "2018-05-03T16:27:12.85852309+08:00",
"uptime": "272h21m59.85852309s"
}
}
|
添加 store 调度
添加指定 store evict scheduler
,控制该 store 在集群内 region leader 数量为 0 或者接近 0 值,不能控制该 store 是否增加成员副本。
1
| curl -X POST -d '{"name":"evict-leader-scheduler","store_id": 194}' "http://10.10.10.15:2379/pd/api/v1/schedulers"
|
1
2
3
4
5
6
7
8
| # curl http://10.13.128.205:2379/pd/api/v1/schedulers
[
"evict-leader-scheduler-194", # store 194 调度器
"balance-region-scheduler", # 默认调度器,region 均衡调度
"balance-leader-scheduler", # 默认调度器,leader 均衡调度
"balance-hot-region-scheduler" # 默认调度器,热点调度
]
|
1
| curl -X DELETE "http://10.10.10.15:2379/pd/api/v1/schedulers/evict-leader-scheduler-194"
|
下线 Store
该方案可作为压轴方案 (集群内只有三台 TiKV 时,下线一台后,region 无处调度,但剩余两副本可继续维持集群使用)
- 通过 pd-ctl 工具连接 PD Cluster
1
| ./pd-ctl -u http://10.10.10.15:2379
|
1
2
3
4
5
6
7
8
9
10
11
12
13
| » help store
show the store status
Usage:
pdctl store [delete|label|weight] <store_id>
store [command]
Available Commands:
delete delete the store
label set a store's label value
weight set a store's leader and region balance weight
Use "help store [command] " for more information about a command.
|
- 通过 pd-ctl 删除 store 194 节点
- 节点会先进入 offline 状态,当该节点数据迁移完成后 (数据迁移与磁盘读写和其他 store 节点繁忙程度有关)
- 节点进入 Tomestone 状态,此时可物理删除该节点数据 (
{{deploy_dir/data}}
存放 rocksDB 数据)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
| » store 194
{
"store": {
"id": 194,
"address": "10.10.10.13:20160",
"state": 0,
"state_name": "Offline" # store 状态 ( UP 、Down 、Offline 、Tomestone)
},
"status": {
"capacity": "500 GiB",
"available": "82 GiB",
"leader_weight": 0.1, # leader 权重
"region_count": 31316,
"region_weight": 0.1, # region 权重
"region_score": 313160,
"start_ts": "2018-04-22T08:05:13+08:00",
"last_heartbeat_ts": "2018-05-03T16:27:12.85852309+08:00",
"uptime": "272h21m59.85852309s"
}
}
|
Author
Atman
LastMod
2020-01-20
License
CC BY-NC-ND 4.0 | 本文不带任何官方色彩,最终解释权归本站所有