[转帖]TiKV Control 使用说明
https://docs.pingcap.com/zh/tidb/stable/tikv-control
TiKV Control(以下简称 tikv-ctl)是 TiKV 的命令行工具,用于管理 TiKV 集群。它的安装目录如下:
- 如果是使用 TiUP 部署的集群,在
~/.tiup/components/ctl/{VERSION}/目录下。
通过 TiUP 使用 TiKV Control
建议使用的 Control 工具版本与集群版本保持一致。
tikv-ctl 也集成在了 tiup 命令中。执行以下命令,即可调用 tikv-ctl 工具:
你可以在 tiup ctl:v<CLUSTER_VERSION> tikv 后面再接上相应的参数与子命令。
通用参数
tikv-ctl 提供以下两种运行模式:
远程模式。通过
--host选项接受 TiKV 的服务地址作为参数。在此模式下,如果 TiKV 启用了 SSL,则 tikv-ctl 也需要指定相关的证书文件,例如:tikv-ctl --ca-path ca.pem --cert-path client.pem --key-path client-key.pem --host 127.0.0.1:20160 <subcommands>某些情况下,tikv-ctl 与 PD 进行通信,而不与 TiKV 通信。此时你需要使用
--pd选项而非--host选项,例如:tikv-ctl --pd 127.0.0.1:2379 compact-clusterstore:"127.0.0.1:20160" compact db:KV cf:default range:([], []) success!本地模式:
- 通过
--data-dir选项来指定本地 TiKV 数据的目录路径。 - 通过
--config选项来指定本地 TiKV 配置文件到路径。
在此模式下,需要停止正在运行的 TiKV 实例。
- 通过
以下如无特殊说明,所有命令都同时支持这两种模式。
除此之外,tikv-ctl 还有两个简单的命令 --to-hex 和 --to-escaped,用于对 key 的形式作简单的变换。一般使用 escaped 形式,示例如下:
在命令行上指定 escaped 形式的 key 时,需要用双引号引起来,否则 bash 会将反斜杠吃掉,导致结果错误。
各项子命令及部分参数、选项
下面逐一对 tikv-ctl 支持的子命令进行举例说明。有的子命令支持很多可选参数,要查看全部细节,可运行 tikv-ctl --help <subcommand>。
查看 Raft 状态机的信息
raft 子命令可以查看 Raft 状态机在某一时刻的状态。状态信息包括 RegionLocalState、RaftLocalState 和 RegionApplyState 三个结构体,及某一条 log 对应的 Entries。
可以使用 region 和 log 两个子命令分别查询以上信息。两条子命令都同时支持远程模式和本地模式。
对于 region 子命令:
- 要查看指定的 Region,可在命令中使用
-r参数,多个 Region 以,分隔。也可以使用--all-regions参数来返回所有 Region(-r与--all-regions不能同时使用) - 要限制输出的 Region 的数量,可在命令中使用
--limit参数(默认为16) - 要查询某个 key 范围中包含哪些 Region,可在命令中使用
--start和--end参数(默认不限范围,采用 Hex 格式)
需要输出 ID 为 1239 的 Region 时,用法及输出内容如下所示:
需要查询某个 key 范围中包含哪些 Region 时,用法及输出内容如下所示:
- 当 key 范围包含在某个 Region 中时,将会输出该 Region 信息。
- 当 key 范围精准到某个 Region 的范围时,以上述 Region
1239为例:当给定的 key 范围为 Region1239的范围时,由于 Region 范围为左闭右开区间,并且 Region1009以 Region1239的end_key作为start_key,因此会同时输出 Region1009和 Region1239的信息。
查看 Region 的大小
使用 size 命令可以查看 Region 的大小:
扫描查看给定范围的 MVCC
scan 命令的 --from 和 --to 参数接受两个 escaped 形式的 raw key,并用 --show-cf 参数指定只需要查看哪些列族。
查看给定 key 的 MVCC
与 scan 命令类似,mvcc 命令可以查看给定 key 的 MVCC:
该命令中,key 同样需要是 escaped 形式的 raw key。
扫描 raw key
使用 raw-scan 命令,TiKV 可直接在 RocksDB 中扫描 raw key。
如果要扫描数据 key,需要在 key 前添加 'z' 前缀。
- 要指定扫描范围,可在
raw-scan命令中使用--from和--to参数(默认不限范围) - 要限制能够打印出的 key 的数量(默认为
30),可在命令中使用--limit参数 - 要指定扫描的 CF,可在命令中使用
--cf参数(可选值为default,write,lock)
打印某个 key 的值
打印某个 key 的值需要用到 print 命令。示例从略。
打印 Region 的 properties 信息
为了记录 Region 的状态信息,TiKV 将一些数据写入 Region 的 SST 文件中。你可以用子命令 region-properties 运行 tikv-ctl 来查看这些 properties 信息。例如:
这些 properties 信息可以用于检查某个 Region 是否健康或者修复不健康的 Region。例如,使用 middle_key_approximate_size 可以手动分裂 Region。
手动 compact 单个 TiKV 的数据
compact 命令可以对单个 TiKV 进行手动 compact。
--from和--to选项以 escaped raw key 形式指定 compact 的范围。如果没有设置,表示 compact 整个 TiKV。--region选项指定 compact Region 的范围。如果设置,则--from和--to选项会被忽略。--db选项可以指定要 compact 的 RocksDB,可选值为kv和raft。--threads选项可以指定 compact 的并发数,默认值是 8。一般来说,并发数越大,compact 的速度越快,但是也会对服务造成影响,所以需要根据情况选择合适的并发数。--bottommost选项可以指定 compact 是否包括最下层的文件。可选值为default、skip和force,默认为default。default表示只有开启了 Compaction Filter 时 compact 才会包括最下层文件。skip表示 compact 不包括最下层文件。force表示 compact 总是包括最下层文件。
在本地模式 compact data,执行如下命令:
tikv-ctl --data-dir /path/to/tikv compact --db kv在远程模式 compact data,执行如下命令:
tikv-ctl --host ip:port compact --db kv
手动 compact 整个 TiKV 集群的数据
compact-cluster 命令可以对整个 TiKV 集群进行手动 compact。该命令参数的含义和使用与 compact 命令一样。
设置一个 Region 副本为 tombstone 状态
tombstone 命令常用于没有开启 sync-log,因为机器掉电导致 Raft 状态机丢失部分写入的情况。它可以在一个 TiKV 实例上将一些 Region 的副本设置为 Tombstone 状态,从而在重启时跳过这些 Region,避免因为这些 Region 的副本的 Raft 状态机损坏而无法启动服务。这些 Region 应该在其他 TiKV 上有足够多的健康的副本以便能够继续通过 Raft 机制进行读写。
一般情况下,可以先在 PD 上将 Region 的副本通过 remove-peer 命令删除掉:
然后再用 tikv-ctl 在那个 TiKV 实例上将 Region 的副本标记为 tombstone 以便跳过启动时对他的健康检查:
但是有些情况下,当不能方便地从 PD 上移除这个副本时,可以指定 tikv-ctl 的 --force 选项来强制设置它为 tombstone:
- 该命令只支持本地模式
-p选项的参数指定 PD 的 endpoints,无需http前缀。指定 PD 的 endpoints 是为了询问 PD 是否可以安全切换至 Tombstone 状态。
向 TiKV 发出 consistency-check 请求
consistency-check 命令用于在某个 Region 对应的 Raft 副本之间进行一致性检查。如果检查失败,TiKV 自身会 panic。如果 --host 指定的 TiKV 不是这个 Region 的 Leader,则会报告错误。
- 目前 consistency-check 与 TiDB GC 操作不兼容,存在误报错误的可能,因此不建议使用该命令。
- 该命令只支持远程模式。
- 即使该命令返回了成功信息,也需要检查是否有 TiKV panic 了。因为该命令只是向 Leader 请求进行一致性检查,但整个检查流程是否成功并不能在客户端知道。
Dump snapshot 元文件
这条子命令可以用于解析指定路径下的 Snapshot 元文件并打印结果。
打印 Raft 状态机出错的 Region
前面 tombstone 命令可以将 Raft 状态机出错的 Region 设置为 Tombstone 状态,避免 TiKV 启动时对它们进行检查。在运行 tombstone 命令之前,可使用 bad-regions 命令找到出错的 Region,以便将多个工具组合起来进行自动化的处理。
命令执行成功后会打印以上信息,否则会打印出有错误的 Region 列表。目前可以检出的错误包括 last index、commit index 和 apply index 之间的不匹配,以及 Raft log 的丢失。其他一些情况,比如 Snapshot 文件损坏等仍然需要后续的支持。
查看 Region 属性
本地查看部署在
/path/to/tikv的 TiKV 上面 Region 2 的 properties 信息:tikv-ctl --data-dir /path/to/tikv/data region-properties -r 2在线查看运行在
127.0.0.1:20160的 TiKV 上面 Region 2 的 properties 信息:tikv-ctl --host 127.0.0.1:20160 region-properties -r 2
动态修改 TiKV 的配置
使用 modify-tikv-config 命令可以动态修改配置参数。目前可动态修改的 TiKV 配置与具体的修改行为与 SQL 动态修改配置功能相同,可参考在线修改 TiKV 配置。
-n用于指定完整的配置名。支持动态修改的配置名可以参考在线修改 TiKV 配置中支持的配置项列表。-v用于指定配置值。
设置 shared block cache 的大小:
当禁用 shared block cache 时,为 write CF 设置 block cache size:
如果 compaction 的流量控制导致待 compact 数据量 (compaction pending bytes) 堆积,可以禁用 rate-limiter-auto-tuned 配置项或调高 compaction 相关的流量阈值。示例如下:
强制 Region 从多副本失败状态恢复服务(弃用)
不推荐使用该功能,恢复需求可通过 pd-ctl 的 Online Unsafe Recovery 功能实现。它提供了一键式自动恢复的能力,无需停止服务等额外操作,具体使用方式请参考 Online Unsafe Recovery 使用文档。
unsafe-recover remove-fail-stores 命令可以将故障机器从指定 Region 的 peer 列表中移除。运行命令之前,需要目标 TiKV 先停掉服务以便释放文件锁。
-s 选项接受多个以逗号分隔的 store_id,并使用 -r 参数来指定包含的 Region。如果要对某一个 store 上的全部 Region 都执行这个操作,可简单指定 --all-regions。
- 此功能使用不当可能导致集群难以恢复,存在风险。请悉知潜在的风险,尽量避免在生产环境中使用。
- 如果使用
--all-regions,必须在剩余所有连入集群的 store 上执行此命令。需要保证这些健康的 store 都停掉服务后再进行恢复,否则期间 Region 副本之间的 peer 列表不一致会导致执行split-region或者remove-peer时报错进而引起其他元数据的不一致,最终引发 Region 不可用。 - 一旦执行了
remove-fail-stores,不可再重新启动被移除的节点并将其加入集群,否则会导致元数据的不一致,最终引发 Region 不可用。
之后启动 TiKV,这些 Region 便可以使用剩下的健康副本继续提供服务了。此命令常用于多个 TiKV store 损坏或被删除的情况。
- 一般来说,您需要为指定 Region 的 peers 所在的每个 store 运行此命令。
- 该命令只支持本地模式。在运行成功后,会打印
success!。
恢复损坏的 MVCC 数据
recover-mvcc 命令用于 MVCC 数据损坏导致 TiKV 无法正常运行的情况。为了从不同种类的不一致情况中恢复,该命令会交叉检查 3 个 CF ("default", "write", "lock")。
-r选项可以通过region_id指定包含的 Region。-p选项可以指定 PD 的 endpoints。
- 该命令只支持本地模式。在运行成功后,会打印
success!。 -p选项指定 PD 的 endpoint,不使用http前缀,用于查询指定的region_id是否有效。- 对于指定 Region 的 peers 所在的每个 store,均须执行该命令。
Ldb 命令
ldb 命令行工具提供多种数据访问以及数据库管理命令。下方列出了一些示例用法。详细信息请在运行 tikv-ctl ldb 命令时查看帮助消息或查阅 RocksDB 文档。
数据访问序列的示例如下:
用 HEX 格式 dump 现有 RocksDB 数据:
Dump 现有 RocksDB 的声明:
您可以通过 --column_family=<string> 指定查询的目标列族。
通过 --try_load_options 命令加载数据库选项文件以打开数据库。在数据库运行时,建议您保持该命令为开启的状态。如果您使用默认配置打开数据库,LSM-tree 存储组织可能会出现混乱,且无法自动恢复。
打印加密元数据
encryption-meta 命令用于打印加密元数据。该子命令可以打印两种加密元数据:数据文件的加密信息,以及所有的数据加密密钥。
使用 encryption-meta dump-file 子命令打印数据文件的加密信息。你需要创建一个 TiKV 配置文件用以指定 TiKV 的数据目录:
--path 选项可以指定数据文件的绝对或者相对路径。如果指定的文件是明文存储的,本命令有可能没有输出。如果不指定 --path 选项,本命令打印所有数据文件的加密信息。
使用 encryption-meta dump-key 打印数据加密密钥。使用本命令的时候,除了在 TiKV 配置文件中指定 TiKV 的数据目录以外,还需要指定当前的主加密密钥。请参阅静态加密文档关于配置 TiKV 主加密密钥的说明。使用本命令时 security.encryption.previous-master-key 配置项不生效,即使配置文件中使用了该配置,本命令也不会触发更换主加密密钥。
注意如果使用了 AWS KMS 作为主加密密钥,使用本命令时 tikv-ctl 需要该 KMS 密钥的访问权限。KMS 访问权限可以通过环境变量、AWS 默认配置文件或 IAM 的方式传递给 tikv-ctl。详情请参阅相关 AWS 文档。
--ids 选项可以指定以逗号分隔的数据加密密钥 id 列表。如果不指定 --ids 选项,本命令打印所有的数据加密密钥,以及最新的数据加密密钥的 id。
本命令会输出一个警告,提示本命令会泄漏敏感数据。根据提示输入 "I consent" 即可。
本命令会以明文方式打印数据加密密钥。在生产环境中,请勿将本命令的输出重定向到磁盘文件中。即使使用以后删除该文件也不能保证文件内容从磁盘中干净清除。
打印损坏的 SST 文件信息
TiKV 中损坏的 SST 文件会导致 TiKV 进程崩溃。在 TiDB v6.1.0 之前,损坏的 SST 文件会导致 TiKV 进程立即崩溃。从 TiDB v6.1.0 起,TiKV 进程会在 SST 文件损坏 1 小时后崩溃。
为了方便清理掉这些 SST 文件,你可以先使用 bad-ssts 命令打印出损坏的 SST 文件信息。
执行此命令前,请保证关闭当前运行的 TiKV 实例。
通过上面的输出,你可以看到损坏的 SST 文件和损坏原因等信息先被打印出,然后是相关的元信息。
- 在
sst meta输出部分,14表示 SST 文件号,552997表示文件大小,紧随其后的是最小和最大的序列号 (seq) 等其它元信息。 overlap region部分为损坏 SST 文件所在 Region 的信息。该信息是从 PD 组件获取的。suggested operations部分为你清理损坏的 SST 文件提供建议操作。你可以参考这些建议的命令,清理文件,并重新启动该 TiKV 实例。
[转帖]TiKV Control 使用说明的更多相关文章
- [转帖] tmux 的使用说明
之前曾经看过 tmux 的简介 但是一直不会用 这次 看了下 原来是这么处理 不过 用windows 多了 还是感觉鼠标 操作多一些 全键盘操作的习惯 还是没有养成. 原贴地址: https://ww ...
- Delphi中SendMessage使用说明(所有消息说明) good
Delphi中SendMessage使用说明 SendMessage基础知识 函数功能:该函数将指定的消息发送到一个或多个窗口.此函数为指定的窗口调用窗口程序,直到窗口程序处理完消息再返回.而函数Po ...
- awk使用说明
原文地址:http://www.cnblogs.com/verrion/p/awk_usage.html Awk使用说明 运维必须掌握的三剑客工具:grep(文件内容过滤器),sed(数据流处理器), ...
- Map工具系列-03-代码生成BySQl工具使用说明
所有cs端工具集成了一个工具面板 -打开(IE) Map工具系列-01-Map代码生成工具说明 Map工具系列-02-数据迁移工具使用说明 Map工具系列-03-代码生成BySQl工具使用说明 Map ...
- AC6102开发板USB3.0测试和使用说明
AC6102开发板USB3.0测试和使用说明 概述 AC6102上集成了一颗Cypress 推出的高性能USB3.0传输芯片CYUSB3014,Cypress称之为EZ-USBFX3.该芯片性能强劲, ...
- IDEA工具使用说明
IDEA使用说明 1.安装 2.开始界面 1)create New Project (新建项目) 2)Import Project (导入项目) 3)Open (打开已有的项目) 4)Check o ...
- Markdown 语法和 MWeb 写作使用说明
---恢复内容开始--- # Markdown 语法和 MWeb 写作使用说明 Markdown 的设计哲学 Markdown 的目標是實現「易讀易寫」. 不過最需要強調的便是它的可讀性.一份使用 M ...
- Linux下TC使用说明
Linux下TC使用说明 一.TC原理介绍 Linux操作系统中的流量控制器TC(Traffic Control)用于Linux内核的流量控制,主要是通过在输出端口处建立一个队列来实现流量控制. ...
- Markdown语法和MWeb使用说明
Markdown 语法和 MWeb 写作使用说明 开始写博客,首先熟悉一下Markdown,以前过看GitHub里的README.MD,感受到了这种文字排版的简洁美观. 写博客是一种有效的学习总结和分 ...
- mysqldump 使用说明
mysqldump 使用说明 A Database Backup Program mysqldump客户端是一款实用的mysql备份程序,可以对数据库的定义及数据表内容,进行备份生成相应的SQL语句. ...
随机推荐
- libGDX游戏开发之Sprite、Texture和TextureRegion绘制旋转、反转(九)
libGDX游戏开发之Sprite.Texture和TextureRegion绘制反转(九) libGDX系列,游戏开发有unity3D巴拉巴拉的,为啥还用java开发?因为我是Java程序员emm- ...
- Implicit隐式渲染入门 SDF SphereTracing
Implicit 何为隐式?隐式(Implicit)的是显式(explicit)的反义词. explicit可以简单理解为用网格等信息描述的几何形状,网格信息是离散的,信息量越大描述越精准.Impli ...
- Spark Core快速入门
Spark-core快速入门 一.简介 Apache spark是专门为大规模数据处理而设计的快速通用的计算模型,是一种类似于Mapreduce通用并行计算框架,与mapreduce不同的是,spar ...
- echarts label formatter params backgroundColor rich 标签设置背景图并传参
小技巧 如果想给label设置背景图,需要使用到rich属性,按照官网示例就可以实现,折线.柱图都一样. 但是大多数情况formatter都是用来通过params里面参数设置自定义的逻辑,如何将两者结 ...
- 解决大模型“开发难”,昇思MindSpore自动并行技术应用实践
本文分享自华为云社区<DTSE Tech Talk|第35期:解决大模型"开发难",昇思MindSpore自动并行技术应用实践>,作者华为云社区精选. 昇思MindSp ...
- 云图说 | 通过Helm模板快速部署中间件应用
摘要:通过全容器化Helm模板,快速部署中间件应用. 云容器引擎基于Kubernetes Helm标准的模板提供统一的资源管理与调度,高效地实现了模板的快速部署与后期管理,大幅简化了Kubernete ...
- 华为云API中心:汇聚千行百业API资产,打造API全生命周期极致体验
摘要:2022年11月9日,华为云全球生态部总裁康宁在华为全联接大会2022上发表"共创新价值,一切皆服务"主题演讲,并发布全新的华为云API中心. 本文分享自华为云社区<华 ...
- 遇到联邦计算数据碰撞难题怎么办?不妨试一试PSI
摘要:随着MPC.隐私计算等概念的流行,诸多政府机构.金融企业开始考虑参与到多方计算的场景中,扩展数据的应用价值. 本文分享自华为云社区<使用PSI解决联邦计算的数据碰撞问题>,作者:br ...
- 如何利用 A/B 实验提升产品用户留存? 看字节实战案例给你答案!
技术交流.求职机会,欢迎关注字节跳动数据平台微信公众号,回复[1]进入官方交流群 产品增长中最为经典的模型为 AARRR 漏斗模型,该模型追求最大化拉新,第一步"获客"(Acqui ...
- 用 Java?试试简单的框架 Solon v1.10.9
Java 国产的轻量级应用开发框架.可用来快速开发 Java 应用项目.主框架仅 0.1 MB.Helloworld: @Controller public class App { public st ...