Skip to content

Commit

Permalink
cherry pick #3254 to release-3.0 (#3762)
Browse files Browse the repository at this point in the history
Signed-off-by: ti-srebot <ti-srebot@pingcap.com>

Co-authored-by: qupeng <onlyqupeng@gmail.com>
  • Loading branch information
ti-srebot and hicqu authored Jun 22, 2020
1 parent 13f1eb1 commit 75aa4b0
Showing 1 changed file with 61 additions and 16 deletions.
77 changes: 61 additions & 16 deletions tikv-control.md
Original file line number Diff line number Diff line change
Expand Up @@ -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` 后面再接上相应的参数与子命令。

## 通用参数

Expand Down Expand Up @@ -72,7 +96,7 @@ AAFF

`raft` 子命令可以查看 Raft 状态机在某一时刻的状态。状态信息包括 **RegionLocalState****RaftLocalState****RegionApplyState** 三个结构体,及某一条 log 对应的 Entries。

您可以使用 `region``log` 两个子命令分别查询以上信息。两条子命令都同时支持远程模式和本地模式。它们的用法及输出内容如下所示
你可以使用 `region``log` 两个子命令分别查询以上信息。两条子命令都同时支持远程模式和本地模式。其用法及输出内容如下所示

{{< copyable "shell-regular" >}}

Expand All @@ -92,7 +116,7 @@ apply state: Some(applied_index: 314617 truncated_state {index: 313474 term: 151

### 查看 Region 的大小

`size` 命令可以查看 Region 的大小:
使用 `size` 命令可以查看 Region 的大小:

{{< copyable "shell-regular" >}}

Expand Down Expand Up @@ -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" >}}

Expand Down Expand Up @@ -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" >}}

Expand All @@ -192,16 +220,20 @@ 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 "" >}}

```shell
pd-ctl>> operator add remove-peer <region_id> <store_id>
```

然后再用 tikv-ctl 在那个 TiKV 实例上将 Region 的副本标记为 tombstone 以便跳过启动时对他的健康检查:

{{< copyable "shell-regular" >}}

```shell
Expand All @@ -212,10 +244,22 @@ tikv-ctl --db /path/to/tikv/db tombstone -p 127.0.0.1:2379 -r <region_id>
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 <region_id>,<region_id> --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 请求

Expand Down Expand Up @@ -268,15 +312,15 @@ all regions are healthy

### 查看 Region 属性

本地查看部署在 `/path/to/tikv`tikv 上面 Region 2 的 properties 信息:
本地查看部署在 `/path/to/tikv`TiKV 上面 Region 2 的 properties 信息:

{{< copyable "shell-regular" >}}

```shell
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" >}}

Expand Down Expand Up @@ -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" >}}

Expand All @@ -390,19 +435,19 @@ success!
### Ldb 命令

ldb 命令行工具提供多种数据访问以及数据库管理命令。下方列出了一些示例用法。详细信息请在运行 `tikv-ctl ldb` 命令时查看帮助消息或查阅 RocksDB 文档。
`ldb` 命令行工具提供多种数据访问以及数据库管理命令。下方列出了一些示例用法。详细信息请在运行 `tikv-ctl ldb` 命令时查看帮助消息或查阅 RocksDB 文档。

数据访问序列示例如下。
数据访问序列的示例如下:

用 HEX 格式 dump 现有 RocksDB 数据:
用 HEX 格式 dump 现有 RocksDB 数据

{{< copyable "shell-regular" >}}

```shell
tikv-ctl ldb --hex --db=/tmp/db dump
```

dump 现有 RocksDB 的声明:
Dump 现有 RocksDB 的声明:

{{< copyable "shell-regular" >}}

Expand Down

0 comments on commit 75aa4b0

Please sign in to comment.