Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Refine tiflash docs to remove deprecated description #17017

Merged
merged 15 commits into from
Jan 9, 2025
77 changes: 16 additions & 61 deletions scale-tidb-using-tiup.md
Original file line number Diff line number Diff line change
Expand Up @@ -410,12 +410,12 @@ tiup cluster display <cluster-name>

2. 对所有 TiFlash 副本数大于缩容后的 TiFlash 节点数的表执行以下语句,`new_replica_num` 必须小于等于 `tobe_left_nodes`:

{{< copyable "sql" >}}

```sql
ALTER TABLE <db-name>.<table-name> SET tiflash replica 'new_replica_num';
```

在执行该语句之后,TiDB 会相应地修改或删除 PD 的 [Placement Rules](/configure-placement-rules.md),PD 再根据 Placement Rules 进行数据调度。

3. 重新执行步骤 1,确保没有数据表的 TiFlash 副本数大于缩容后的 TiFlash 节点数。

### 2. 执行缩容操作
Expand All @@ -426,20 +426,28 @@ tiup cluster display <cluster-name>

1. 通过以下命令确定需要下线的节点名称:

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

```shell
tiup cluster display <cluster-name>
```

2. 执行 scale-in 命令来下线节点,假设步骤 1 中获得该节点名为 `10.0.1.4:9000`

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

```shell
tiup cluster scale-in <cluster-name> --node 10.0.1.4:9000
```

3. 查看下线 TiFlash 节点的状态:

```shell
tiup cluster display <cluster-name>
```

4. 等待下线 TiFlash 节点的状态变为 `Tombstone` 后,删除 TiUP 拓扑信息中已下线节点的信息(TiUP 会自动清理 `Tombstone` 状态节点的相关数据文件):

```shell
tiup cluster prune <cluster-name>
```

#### 方案二:手动缩容 TiFlash 节点

在特殊情况下(比如需要强制下线节点),或者 TiUP 操作失败的情况下,可以使用以下方法手动下线 TiFlash 节点。
Expand All @@ -450,8 +458,6 @@ tiup cluster display <cluster-name>

* 若使用 TiUP 部署,可以调用以下命令代替 `pd-ctl`:

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

```shell
tiup ctl:v<CLUSTER_VERSION> pd -u http://<pd_ip>:<pd_port> store
```
Expand All @@ -466,8 +472,6 @@ tiup cluster display <cluster-name>

* 若通过 TiUP 部署,可以调用以下命令代替 `pd-ctl`:

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

```shell
tiup ctl:v<CLUSTER_VERSION> pd -u http://<pd_ip>:<pd_port> store delete <store_id>
```
Expand All @@ -478,59 +482,10 @@ tiup cluster display <cluster-name>

3. 等待该 TiFlash 节点对应的 store 消失或者 state_name 变成 Tombstone 再关闭 TiFlash 进程。

4. 手动删除 TiFlash 的数据文件,具体位置可查看在集群拓扑配置文件中 TiFlash 配置部分下的 data_dir 目录。

5. 从 TiUP 拓扑信息中删除已经下线的 TiFlash 节点信息:

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

```shell
tiup cluster scale-in <cluster-name> --node <pd_ip>:<pd_port> --force
```

> **注意:**
>
> 如果在集群中所有的 TiFlash 节点停止运行之前,没有取消所有同步到 TiFlash 的表,则需要手动在 PD 中清除同步规则,否则无法成功完成 TiFlash 节点的下线。

手动在 PD 中清除同步规则的步骤如下:

1. 查询当前 PD 实例中所有与 TiFlash 相关的数据同步规则。

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

```shell
curl http://<pd_ip>:<pd_port>/pd/api/v1/config/rules/group/tiflash
```

```
[
{
"group_id": "tiflash",
"id": "table-45-r",
"override": true,
"start_key": "7480000000000000FF2D5F720000000000FA",
"end_key": "7480000000000000FF2E00000000000000F8",
"role": "learner",
"count": 1,
"label_constraints": [
{
"key": "engine",
"op": "in",
"values": [
"tiflash"
]
}
]
}
]
```

2. 删除所有与 TiFlash 相关的数据同步规则。以 `id` 为 `table-45-r` 的规则为例,通过以下命令可以删除该规则。

{{< copyable "shell-regular" >}}
4. 删除 TiUP 拓扑信息中已下线节点的信息(TiUP 会自动清理 `Tombstone` 状态节点的相关数据文件):

```shell
curl -v -X DELETE http://<pd_ip>:<pd_port>/pd/api/v1/config/rule/tiflash/table-45-r
tiup cluster prune <cluster-name>
```

### 3. 查看集群状态
Expand Down
4 changes: 2 additions & 2 deletions tiflash/tiflash-overview.md
Original file line number Diff line number Diff line change
Expand Up @@ -26,9 +26,9 @@ TiFlash 推荐使用和 TiKV 不同的节点以做到 Workload 隔离,但在

TiFlash 暂时无法直接接受数据写入,任何数据必须先写入 TiKV 再同步到 TiFlash。TiFlash 以 learner 角色接入 TiDB 集群,TiFlash 支持表粒度的数据同步,部署后默认情况下不会同步任何数据,需要按照[按表构建 TiFlash 副本](/tiflash/create-tiflash-replicas.md#按表构建-tiflash-副本)一节完成指定表的数据同步。

TiFlash 主要包含三个组件,除了主要的存储引擎组件,另外包含 tiflash proxy 和 pd buddy 组件,其中 tiflash proxy 主要用于处理 Multi-Raft 协议通信的相关工作,pd buddy 负责与 PD 协同工作,将 TiKV 数据按表同步到 TiFlash
TiFlash 主要包含两个组件,一个是列式存储引擎组件,另一个是处理 Multi-Raft 协议通信相关工作的 TiFlash proxy 组件

对于按表构建 TiFlash 副本的流程,TiDB 接收到相应的 DDL 命令后 pd buddy 组件会通过 TiDB 的 status 端口获取到需要同步的数据表信息,然后会将需要同步的数据信息发送到 PD,PD 根据该信息进行相关的数据调度。
对于按表构建 TiFlash 副本的流程,TiDB 接收到相应的 DDL 命令后,会自动在 PD 创建对应的 [Placement Rules](/configure-placement-rules.md),PD 根据该信息进行相关的数据调度。

## 核心特性

Expand Down
73 changes: 63 additions & 10 deletions tiflash/troubleshoot-tiflash.md
Original file line number Diff line number Diff line change
Expand Up @@ -53,22 +53,16 @@ aliases: ['/docs-cn/dev/tiflash/troubleshoot-tiflash/','/docs-cn/dev/tiflash/tif

3. 通过 pd-ctl 查看 TiFlash proxy 状态是否正常:

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

```shell
echo "store" | /path/to/pd-ctl -u http://${pd-ip}:${pd-port}
tiup ctl:nightly pd -u http://${pd-ip}:${pd-port} store
```

store.labels 中含有 `{"key": "engine", "value": "tiflash"}` 信息的为 TiFlash proxy。

4. 查看 pd buddy 是否正常打印日志(日志路径的对应配置项 [flash.flash_cluster] log 设置的值,默认为 TiFlash 配置文件配置的 tmp 目录下)。

5. 检查配置的副本数是否小于等于集群 TiKV 节点数。若配置的副本数超过 TiKV 节点数,则 PD 不会向 TiFlash 同步数据;

{{< copyable "shell-regular" >}}
4. 检查 TiFlash 配置的副本数是否小于等于集群 TiKV 节点数。若配置的副本数超过 TiKV 节点数,则 PD 不会向 TiFlash 同步数据:

```shell
echo 'config placement-rules show' | /path/to/pd-ctl -u http://${pd-ip}:${pd-port}
tiup ctl:nightly pd -u http://${pd-ip}:${pd-port} config placement-rules show | grep -C 10 default
```

再确认 "default: count" 参数值。
Expand All @@ -78,7 +72,7 @@ aliases: ['/docs-cn/dev/tiflash/troubleshoot-tiflash/','/docs-cn/dev/tiflash/tif
> - 开启 [Placement Rules](/configure-placement-rules.md) 且存在多条 rule 的情况下,原先的 [`max-replicas`](/pd-configuration-file.md#max-replicas)、[`location-labels`](/pd-configuration-file.md#location-labels) 及 [`isolation-level`](/pd-configuration-file.md#isolation-level) 配置项将不再生效。如果需要调整副本策略,应当使用 Placement Rules 相关接口。
> - 开启 [Placement Rules](/configure-placement-rules.md) 且只存在一条默认的 rule 的情况下,当改变 `max-replicas`、`location-labels` 或 `isolation-level` 配置项时,系统会自动更新这条默认的 rule。

6. 检查 TiFlash 节点对应 store 所在机器剩余的磁盘空间是否充足。默认情况下当磁盘剩余空间小于该 store 的 capacity 的 20%(通过 low-space-ratio 参数控制)时,PD 不会向 TiFlash 调度数据。
5. 检查 TiFlash 节点对应 store 所在机器剩余的磁盘空间是否充足。默认情况下当磁盘剩余空间小于该 store 的 capacity 的 20%(通过 [`low-space-ratio`](/pd-configuration-file.md#low-space-ratio) 参数控制)时,PD 不会向 TiFlash 调度数据。

## 部分查询返回 Region Unavailable 的错误

Expand All @@ -94,6 +88,65 @@ aliases: ['/docs-cn/dev/tiflash/troubleshoot-tiflash/','/docs-cn/dev/tiflash/tif
2. 清除该 TiFlash 节点的相关数据。
3. 重新在集群中部署 TiFlash 节点。

## 缩容 TiFlash 节点慢

可依照如下步骤进行处理:

1. 检查是否有某些数据表的 TiFlash 副本数大于缩容后的 TiFlash 节点数:

```sql
SELECT * FROM information_schema.tiflash_replica WHERE REPLICA_COUNT > 'tobe_left_nodes';
```

`tobe_left_nodes` 表示缩容后的 TiFlash 节点数。

如果查询结果不为空,则需要修改对应表的 TiFlash 副本数。这是因为,当 TiFlash 副本数大于缩容后的 TiFlash 节点数时,PD 不会将 Region peer 从待缩容的 TiFlash 节点上移走,导致 TiFlash 节点无法缩容。

2. 针对需要移除集群中所有 TiFlash 节点的场景,如果 `INFORMATION_SCHEMA.TIFLASH_REPLICA` 表显示集群已经不存在 TiFlash 副本了,但 TiFlash 节点缩容仍然无法成功,请检查最近是否执行过 `DROP TABLE <db-name>.<table-name>` 或 `DROP DATABASE <db-name>` 操作。

对于带有 TiFlash 副本的表或数据库,直接执行 `DROP TABLE <db-name>.<table-name>` 或 `DROP DATABASE <db-name>` 后,TiDB 不会立即清除 PD 上相应的表的 TiFlash 同步规则,而是会等到相应的表满足垃圾回收 (GC) 条件后才清除这些同步规则。在垃圾回收完成后,TiFlash 节点就可以缩容成功。

如需在满足垃圾回收条件之前清除 TiFlash 的数据同步规则,可以参考以下步骤手动清除。

> **注意:**
>
> 手动清除数据表的 TiFlash 同步规则后,如果对这些表执行 `RECOVER TABLE`、`FLASHBACK TABLE` 或 `FLASHBACK DATABASE` 操作,表的 TiFlash 副本不会恢复。

1. 查询当前 PD 实例中所有与 TiFlash 相关的数据同步规则。

```shell
curl http://<pd_ip>:<pd_port>/pd/api/v1/config/rules/group/tiflash
```

```
[
{
"group_id": "tiflash",
"id": "table-45-r",
"override": true,
"start_key": "7480000000000000FF2D5F720000000000FA",
"end_key": "7480000000000000FF2E00000000000000F8",
"role": "learner",
"count": 1,
"label_constraints": [
{
"key": "engine",
"op": "in",
"values": [
"tiflash"
]
}
]
}
]
```

2. 删除所有与 TiFlash 相关的数据同步规则。以 `id` 为 `table-45-r` 的规则为例,通过以下命令可以删除该规则。

```shell
curl -v -X DELETE http://<pd_ip>:<pd_port>/pd/api/v1/config/rule/tiflash/table-45-r
```

## TiFlash 分析慢

如果语句中含有 MPP 模式不支持的算子或函数等,TiDB 不会选择 MPP 模式,可能导致分析慢。此时,可以执行 `EXPLAIN` 语句检查 SQL 中是否含有 TiFlash 不支持的函数或算子。
Expand Down
Loading