From 75aa4b0a51ed6ce4c56e979bba6585de260b78d6 Mon Sep 17 00:00:00 2001 From: ti-srebot <66930949+ti-srebot@users.noreply.github.com> Date: Mon, 22 Jun 2020 15:47:36 +0800 Subject: [PATCH] cherry pick #3254 to release-3.0 (#3762) Signed-off-by: ti-srebot Co-authored-by: qupeng --- tikv-control.md | 77 +++++++++++++++++++++++++++++++++++++++---------- 1 file changed, 61 insertions(+), 16 deletions(-) diff --git a/tikv-control.md b/tikv-control.md index 381f05709add..5c313d499175 100644 --- a/tikv-control.md +++ b/tikv-control.md @@ -6,9 +6,33 @@ aliases: ['/docs-cn/v3.0/reference/tools/tikv-control/'] # TiKV Control 使用说明 -TiKV Control(以下简称 tikv-ctl)是 TiKV 的命令行工具,用于管理 TiKV 集群。 +TiKV Control(以下简称 tikv-ctl)是 TiKV 的命令行工具,用于管理 TiKV 集群。它的安装目录如下: -编译 TiKV 的同时也会编译 tikv-ctl 命令。如果通过 Ansible 部署集群,则对应的 `tidb-ansible/resources/bin` 目录下会存在 `tikv-ctl` 二进制文件。如果使用二进制文件部署集群,bin 目录下会包含 `tikv-ctl` 文件及 `tidb-server`、`pd-server`、以及 `tikv-server` 等其他文件。 +* 如果是使用 TiDB Ansible 部署的集群,在 `ansible` 目录下的 `resources/bin` 子目录下。 +* 如果是使用 TiUP 部署的集群,在 `~/.tiup/components/ctl/{VERSION}/` 目录下。 + +[TiUP](https://github.com/pingcap-incubator/tiuptiup) 是晚于 `tidb-ansible` 推出的部署工具,使用方式更加简化,`tikv-ctl` 也集成在了 `tiup` 命令中。执行以下命令,即可调用 `tikv-ctl` 工具: + +{{< copyable "shell-regular" >}} + +```bash +tiup ctl tikv +``` + +``` +Starting component `ctl`: ~/.tiup/components/ctl/v4.0.0-rc.2/ctl tikv +TiKV Control (tikv-ctl) +Release Version: 4.0.0-rc.2 +Edition: Community +Git Commit Hash: 2fdb2804bf8ffaab4b18c4996970e19906296497 +Git Commit Branch: heads/refs/tags/v4.0.0-rc.2 +UTC Build Time: 2020-05-15 11:58:49 +Rust Version: rustc 1.42.0-nightly (0de96d37f 2019-12-19) +Enable Features: jemalloc portable sse protobuf-codec +Profile: dist_release +``` + +你可以在 `tiup ctl tikv` 后面再接上相应的参数与子命令。 ## 通用参数 @@ -72,7 +96,7 @@ AAFF `raft` 子命令可以查看 Raft 状态机在某一时刻的状态。状态信息包括 **RegionLocalState**、**RaftLocalState** 和 **RegionApplyState** 三个结构体,及某一条 log 对应的 Entries。 -您可以使用 `region` 和 `log` 两个子命令分别查询以上信息。两条子命令都同时支持远程模式和本地模式。它们的用法及输出内容如下所示: +你可以使用 `region` 和 `log` 两个子命令分别查询以上信息。两条子命令都同时支持远程模式和本地模式。其用法及输出内容如下所示: {{< copyable "shell-regular" >}} @@ -92,7 +116,7 @@ apply state: Some(applied_index: 314617 truncated_state {index: 313474 term: 151 ### 查看 Region 的大小 -`size` 命令可以查看 Region 的大小: +使用 `size` 命令可以查看 Region 的大小: {{< copyable "shell-regular" >}} @@ -127,7 +151,7 @@ key: zmDB:29\000\000\377\000\374\000\000\000\000\000\000\377\000H\000\000\000\00 ### 查看给定 key 的 MVCC -与上个命令类似,`mvcc` 命令可以查看给定 key 的 MVCC: +与 `scan` 命令类似,`mvcc` 命令可以查看给定 key 的 MVCC: {{< copyable "shell-regular" >}} @@ -176,7 +200,11 @@ middle_key_by_approximate_size: ### 手动 compact 单个 TiKV 的数据 -`compact` 命令可以对单个 TiKV 进行手动 compact。如果指定 `--from` 和 `--to` 选项,那么它们的参数也是 escaped raw key 形式的。`--host` 参数可以指定要 compact 的 TiKV,`-d` 参数可以指定要 compact 的 RocksDB,有 `kv` 和 `raft` 参数值可以选。`--threads` 参数可以指定 compact 的并发数,默认值是 8。一般来说,并发数越大, compact 的速度越快,但是也会对服务造成影响,所以需要根据情况选择合适的并发数。 +`compact` 命令可以对单个 TiKV 进行手动 compact。如果指定 `--from` 和 `--to` 选项,那么它们的参数也是 escaped raw key 形式的。 + +- `--host` 参数可以指定要 compact 的 TiKV。 +- `-d` 参数可以指定要 compact 的 RocksDB,有 `kv` 和 `raft` 参数值可以选。 +- `--threads` 参数可以指定 compact 的并发数,默认值是 8。一般来说,并发数越大,compact 的速度越快,但是也会对服务造成影响,所以需要根据情况选择合适的并发数。 {{< copyable "shell-regular" >}} @@ -192,9 +220,11 @@ success! `compact-cluster` 命令可以对整个 TiKV 集群进行手动 compact。该命令参数的含义和使用与 `compact` 命令一样。 -### 设置一个 Region 为 tombstone +### 设置一个 Region 副本为 tombstone 状态 + +`tombstone` 命令常用于没有开启 sync-log,因为机器掉电导致 Raft 状态机丢失部分写入的情况。它可以在一个 TiKV 实例上将一些 Region 的副本设置为 Tombstone 状态,从而在重启时跳过这些 Region,避免因为这些 Region 的副本的 Raft 状态机损坏而无法启动服务。这些 Region 应该在其他 TiKV 上有足够多的健康的副本以便能够继续通过 Raft 机制进行读写。 -`tombstone` 命令常用于没有开启 sync-log,因为机器掉电导致 Raft 状态机丢失部分写入的情况。它可以在一个 TiKV 实例上将一些 Region 设置为 Tombstone 状态,从而在重启时跳过这些 Region。这些 Region 应该在其他 TiKV 上有足够多的健康的副本以便能够继续通过 Raft 机制进行读写。 +一般情况下,可以先在 PD 上将 Region 的副本通过 `remove-peer` 命令删除掉: {{< copyable "" >}} @@ -202,6 +232,8 @@ success! pd-ctl>> operator add remove-peer ``` +然后再用 tikv-ctl 在那个 TiKV 实例上将 Region 的副本标记为 tombstone 以便跳过启动时对他的健康检查: + {{< copyable "shell-regular" >}} ```shell @@ -212,10 +244,22 @@ tikv-ctl --db /path/to/tikv/db tombstone -p 127.0.0.1:2379 -r success! ``` +但是有些情况下,当不能方便地从 PD 上移除这个副本时,可以指定 tikv-ctl 的 `--force` 选项来强制设置它为 tombstone: + +{{< copyable "shell-regular" >}} + +```shell +tikv-ctl --db /path/to/tikv/db tombstone -p 127.0.0.1:2379 -r , --force +``` + +``` +success! +``` + > **注意:** > > - **该命令只支持本地模式** -> - `-p` 选项的参数指定 PD 的 endpoints,无需 `http` 前缀。指定 PD 的 endpoints 是为了询问 PD 是否可以安全切换至 Tombstone 状态。因此,在将 PD 置为 Tombstone 之前往往还需要在 `pd-ctl` 中把该 Region 在机器上的对应 Peer 拿掉。 +> - `-p` 选项的参数指定 PD 的 endpoints,无需 `http` 前缀。指定 PD 的 endpoints 是为了询问 PD 是否可以安全切换至 Tombstone 状态。 ### 向 TiKV 发出 consistency-check 请求 @@ -268,7 +312,7 @@ all regions are healthy ### 查看 Region 属性 -本地查看部署在 `/path/to/tikv` 的 tikv 上面 Region 2 的 properties 信息: +本地查看部署在 `/path/to/tikv` 的 TiKV 上面 Region 2 的 properties 信息: {{< copyable "shell-regular" >}} @@ -276,7 +320,7 @@ all regions are healthy tikv-ctl --db /path/to/tikv/data/db region-properties -r 2 ``` -在线查看运行在 `127.0.0.1:20160` 的 tikv 上面 Region 2 的 properties 信息: +在线查看运行在 `127.0.0.1:20160` 的 TiKV 上面 Region 2 的 properties 信息: {{< copyable "shell-regular" >}} @@ -370,7 +414,8 @@ tikv-ctl --db /path/to/tikv/db unsafe-recover remove-fail-stores -s 4,5 --all-re `recover-mvcc` 命令用于 MVCC 数据损坏导致 TiKV 无法正常运行的情况。为了从不同种类的不一致情况中恢复,该命令会交叉检查 3 个 CF ("default", "write", "lock")。 -`-r` 选项可以通过 `region_id` 指定包含的 Region,`-p` 选项可以指定 PD 的 endpoints。 +- `-r` 选项可以通过 `region_id` 指定包含的 Region。 +- `-p` 选项可以指定 PD 的 endpoints。 {{< copyable "shell-regular" >}} @@ -390,11 +435,11 @@ success! ### Ldb 命令 -ldb 命令行工具提供多种数据访问以及数据库管理命令。下方列出了一些示例用法。详细信息请在运行 `tikv-ctl ldb` 命令时查看帮助消息或查阅 RocksDB 文档。 +`ldb` 命令行工具提供多种数据访问以及数据库管理命令。下方列出了一些示例用法。详细信息请在运行 `tikv-ctl ldb` 命令时查看帮助消息或查阅 RocksDB 文档。 -数据访问序列示例如下。 +数据访问序列的示例如下: -用 HEX 格式 dump 现有 RocksDB 数据: +用 HEX 格式 dump 现有 RocksDB 数据: {{< copyable "shell-regular" >}} @@ -402,7 +447,7 @@ ldb 命令行工具提供多种数据访问以及数据库管理命令。下方 tikv-ctl ldb --hex --db=/tmp/db dump ``` -dump 现有 RocksDB 的声明: +Dump 现有 RocksDB 的声明: {{< copyable "shell-regular" >}}