Skip to content

Commit

Permalink
ticdc: update interruption FAQs (#6783)
Browse files Browse the repository at this point in the history
  • Loading branch information
overvenus committed Aug 5, 2021
1 parent 8f85d27 commit 619b0e7
Show file tree
Hide file tree
Showing 2 changed files with 85 additions and 66 deletions.
2 changes: 1 addition & 1 deletion ticdc/manage-ticdc.md
Original file line number Diff line number Diff line change
Expand Up @@ -850,4 +850,4 @@ cdc cli --pd="http://10.0.10.25:2379" changefeed query --changefeed-id=simple-re
> + 如果服务器使用机械硬盘或其他有延迟或吞吐有瓶颈的存储设备,请谨慎开启 Unified Sorter。
> + 请保证硬盘的空闲容量大于等于 500G。如果需要同步大量历史数据,请确保每个节点的空闲容量大于等于要追赶的同步数据。
> + Unified Sorter 默认开启,如果您的服务器不符合以上条件,并希望关闭 Unified Sorter,请手动将 changefeed 的 `sort-engine` 设为 `memory`
> + 如需在已有的 changefeed 上开启 Unified Sorter,参见[同步任务中断,尝试再次启动后 TiCDC 发生 OOM,如何处理](/ticdc/troubleshoot-ticdc.md#同步任务中断尝试再次启动后-ticdc-发生-oom如何处理)回答中提供的方法。
> + 如需在已有的 changefeed 上开启 Unified Sorter,参见[同步任务中断,尝试再次启动后 TiCDC 发生 OOM,如何处理](/ticdc/troubleshoot-ticdc.md#同步任务中断尝试再次启动后-ticdc-发生-oom应该如何处理)回答中提供的方法。
149 changes: 84 additions & 65 deletions ticdc/troubleshoot-ticdc.md
Original file line number Diff line number Diff line change
Expand Up @@ -24,14 +24,73 @@ aliases: ['/docs-cn/dev/ticdc/troubleshoot-ticdc/','/docs-cn/dev/reference/tools

在使用 `cdc cli changefeed create` 创建同步任务时会检查上游表是否符合[同步限制](/ticdc/ticdc-overview.md#同步限制)。如果存在表不满足同步限制,会提示 `some tables are not eligible to replicate` 并列出这些不满足的表。用户选择 `Y``y` 则会继续创建同步任务,并且同步过程中自动忽略这些表的所有更新。用户选择其他输入,则不会创建同步任务。

## 如何处理 TiCDC 同步任务的中断?
## 如何查看 TiCDC 同步任务的状态?

可以使用 `cdc cli` 查询同步任务的状态。例如:

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

```shell
cdc cli changefeed list --pd=http://10.0.10.25:2379
```

上述命令输出如下:

```json
[{
"id": "4e24dde6-53c1-40b6-badf-63620e4940dc",
"summary": {
"state": "normal",
"tso": 417886179132964865,
"checkpoint": "2020-07-07 16:07:44.881",
"error": null
}
}]
```

* `checkpoint`:即为 TiCDC 已经将该时间点前的数据同步到了下游。
* `state` 为该同步任务的状态:
* `normal`:正常同步。
* `stopped`:停止同步(手动暂停或出错)。
* `removed`:已删除任务。

> **注意:**
>
> 该功能在 TiCDC 4.0.3 版本引入。
## TiCDC 同步任务出现中断

### 如何判断 TiCDC 同步任务出现中断?

- 通过 Grafana 检查同步任务的 `changefeed checkpoint`(注意选择正确的 `changefeed id`)监控项。如果该值不发生变化(也可以查看 `checkpoint lag` 是否不断增大),可能同步任务出现中断。
- 通过 Grafana 检查 `exit error count` 监控项,该监控项大于 0 代表同步任务出现错误。
- 通过 `cdc cli changefeed list``cdc cli changefeed query` 命令查看同步任务的状态信息。任务状态为 `stopped` 代表同步中断,`error` 项会包含具体的错误信息。任务出错后可以在 TiCDC server 日志中搜索 `error on running processor` 查看错误堆栈,帮助进一步排查问题。
- 部分极端异常情况下 TiCDC 出现服务重启,可以在 TiCDC server 日志中搜索 `FATAL` 级别的日志排查问题。

### 如何查看 TiCDC 同步任务是否被人为终止?

可以使用 `cdc cli` 查询同步任务是否被人为终止。例如:

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

```shell
cdc cli changefeed query --pd=http://10.0.10.25:2379 --changefeed-id 28c43ffc-2316-4f4f-a70b-d1a7c59ba79f
```

上述命令的输出中 `admin-job-type` 标志这个同步的任务的状态:

* `0`: 任务进行中,没有被人为停止。
* `1`: 任务暂停,停止任务后所有同步 `processor` 会结束退出,同步任务的配置和同步状态都会保留,可以从 `checkpoint-ts` 恢复任务。
* `2`: 任务恢复,同步任务从 `checkpoint-ts` 继续同步。
* `3`: 任务已删除,接口请求后会结束所有同步 `processor`,并清理同步任务配置信息。同步状态保留,只提供查询,没有其他实际功能。

目前已知可能发生的同步中断包括以下两类场景:
### 如何处理 TiCDC 同步任务的中断?

目前已知可能发生的同步中断包括以下场景:

- 下游持续异常,TiCDC 多次重试后仍然失败。

- 该场景下 TiCDC 会保存任务信息,由于 TiCDC 已经在 PD 中设置的 service GC safepoint,在 `gc-ttl` 的有效期内,同步任务 checkpoint 之后的数据不会被 TiKV GC 清理掉。

- 处理方法:用户可以在下游恢复正常后,通过 HTTP 接口恢复同步任务。

- 因下游存在不兼容的 SQL 语句,导致同步不能继续。
Expand All @@ -42,35 +101,46 @@ aliases: ['/docs-cn/dev/ticdc/troubleshoot-ticdc/','/docs-cn/dev/reference/tools
2. 使用新的任务配置文件,增加`ignore-txn-start-ts` 参数跳过指定 `start-ts` 对应的事务。
3. 通过 HTTP API 停止旧的同步任务,使用 `cdc cli changefeed create` ,指定新的任务配置文件,指定 `start-ts` 为刚才记录的 `checkpoint-ts`,启动新的同步任务恢复同步。

## 如何判断 TiCDC 同步任务出现中断?
- 在 v4.0.13 及之前的版本中 TiCDC 同步分区表存在问题,导致同步停止。

- 通过 Grafana 检查同步任务的 `changefeed checkpoint`(注意选择正确的 `changefeed id`)监控项。如果该值不发生变化(也可以查看 `checkpoint lag` 是否不断增大),可能同步任务出现中断
- 通过 Grafana 检查 `exit error count` 监控项,该监控项大于 0 代表同步任务出现错误。
- 通过 `cdc cli changefeed list``cdc cli changefeed query` 命令查看同步任务的状态信息。任务状态为 `stopped` 代表同步中断,`error` 项会包含具体的错误信息。任务出错后可以在 TiCDC server 日志中搜索 `error on running processor` 查看错误堆栈,帮助进一步排查问题
- 部分极端异常情况下 TiCDC 出现服务重启,可以在 TiCDC server 日志中搜索 `FATAL` 级别的日志排查问题
- 该场景下 TiCDC 会保存任务信息,由于 TiCDC 已经在 PD 中设置的 service GC safepoint,在 `gc-ttl` 的有效期内,同步任务 checkpoint 之后的数据不会被 TiKV GC 清理掉
- 处理方法:
1. 通过 `cdc cli changefeed pause -c <changefeed-id>` 暂停同步
2. 等待约一分钟后,通过 `cdc cli changefeed resume -c <changefeed-id>` 恢复同步

## TiCDC `gc-ttl` 是什么
### 同步任务中断,尝试再次启动后 TiCDC 发生 OOM,应该如何处理

TiDB v4.0.0-rc.1 版本起,PD 支持外部服务设置服务级别 GC safepoint。任何一个服务可以注册更新自己服务的 GC safepoint。PD 会保证任何晚于该 GC safepoint 的 KV 数据不会在 TiKV 中被 GC 清理掉。在 TiCDC 中启用了这一功能,用来保证 TiCDC 在不可用、或同步任务中断情况下,可以在 TiKV 内保留 TiCDC 需要消费的数据不被 GC 清理掉
升级 TiDB 集群和 TiCDC 集群到最新版本。该 OOM 问题在 **v4.0.14 及之后的 v4.0 版本,v5.0.2 及之后的 v5.0 版本,更新的版本**上已得到缓解

启动 TiCDC server 时可以通过 `gc-ttl` 指定 GC safepoint 的 TTL,这个值的含义是当 TiCDC 服务全部挂掉后,由 TiCDC 在 PD 所设置的 GC safepoint 保存的最长时间,该值默认为 86400 秒。
在这些版本上,可以开启 Unified Sorter 排序功能,该功能会在系统内存不足时使用磁盘进行排序。启用的方式是创建同步任务时在 `cdc cli` 内传入 `--sort-engine=unified`,使用示例如下:

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

## 同步任务中断,尝试再次启动后 TiCDC 发生 OOM,如何处理?
```shell
cdc cli changefeed update -c <changefeed-id> --sort-engine="unified" --pd=http://10.0.10.25:2379
```

如果同步任务长时间中断,累积未消费的数据比较多,再次启动 TiCDC 可能会发生 OOM。这种情况下可以启用 TiCDC 提供的实验特性 Unified Sorter 排序引擎,该功能会在系统内存不足时使用磁盘进行排序。启用的方式是创建同步任务时在 `cdc cli` 内传入 `--sort-engine=unified``--sort-dir=/path/to/sort_dir`,使用示例如下:
如果无法升级到上述版本,需要在**之前的版本**上开启 Unified Sorter,可以在创建同步任务时在 `cdc cli` 内传入 `--sort-engine=unified``--sort-dir=/path/to/sort_dir`,使用示例如下:

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

```shell
cdc cli changefeed update -c [changefeed-id] --sort-engine="unified" --sort-dir="/data/cdc/sort" --pd=http://10.0.10.25:2379
cdc cli changefeed update -c <changefeed-id> --sort-engine="unified" --sort-dir="/data/cdc/sort" --pd=http://10.0.10.25:2379
```

> **注意:**
>
> + TiCDC 从 4.0.9 版本起支持 Unified Sorter 排序引擎。
> + TiCDC(4.0 发布版本)还不支持动态修改排序引擎。在修改排序引擎设置前,请务必确保 changefeed 已经停止 (stopped)。
> + `sort-dir` 在不同版本之间有不同的行为,请参考 [`sort-dir``data-dir` 配置项的兼容性说明](/ticdc/ticdc-overview.md#sort-dir-及-data-dir-配置项的兼容性说明),谨慎配置。
> + 目前 Unified Sorter 排序引擎为实验特性,在数据表较多 (>= 100) 时可能出现性能问题,影响同步速度,故不建议在生产环境中使用。开启 Unified Sorter 前请保证各 TiCDC 节点机器上有足够硬盘空间。如果积攒的数据总量有可能超过 1 TB,则不建议使用 TiCDC 进行同步。
## TiCDC 的 `gc-ttl` 是什么?

从 TiDB v4.0.0-rc.1 版本起,PD 支持外部服务设置服务级别 GC safepoint。任何一个服务可以注册更新自己服务的 GC safepoint。PD 会保证任何晚于该 GC safepoint 的 KV 数据不会在 TiKV 中被 GC 清理掉。在 TiCDC 中启用了这一功能,用来保证 TiCDC 在不可用、或同步任务中断情况下,可以在 TiKV 内保留 TiCDC 需要消费的数据不被 GC 清理掉。

启动 TiCDC server 时可以通过 `gc-ttl` 指定 GC safepoint 的 TTL,这个值的含义是当 TiCDC 服务全部挂掉后,由 TiCDC 在 PD 所设置的 GC safepoint 保存的最长时间,该值默认为 86400 秒。

## TiCDC GC safepoint 的完整行为是什么

TiCDC 服务启动后,如果有任务开始同步,TiCDC owner 会根据所有同步任务最小的 checkpoint-ts 更新到 PD service GC safepoint,service GC safepoint 可以保证该时间点及之后的数据不被 GC 清理掉。如果 TiCDC 同步任务中断,该任务的 checkpoint-ts 不会再改变,PD 对应的 service GC safepoint 也不会再更新。TiCDC 为 service GC safepoint 设置的存活有效期为 24 小时,即 TiCDC 服务中断 24 小时内恢复能保证数据不因 GC 而丢失。
Expand Down Expand Up @@ -175,57 +245,6 @@ cdc cli changefeed create --pd=http://10.0.10.25:2379 --sink-uri="kafka://127.0.
更多信息请参考[创建同步任务](/ticdc/manage-ticdc.md#创建同步任务)

## 如何查看 TiCDC 同步任务的状态?

可以使用 `cdc cli` 查询同步任务的状态。例如:

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

```shell
cdc cli changefeed list --pd=http://10.0.10.25:2379
```

上述命令输出如下:

```json
[{
"id": "4e24dde6-53c1-40b6-badf-63620e4940dc",
"summary": {
"state": "normal",
"tso": 417886179132964865,
"checkpoint": "2020-07-07 16:07:44.881",
"error": null
}
}]
```

* `checkpoint`:即为 TiCDC 已经将该时间点前的数据同步到了下游。
* `state` 为该同步任务的状态:
* `normal`:正常同步。
* `stopped`:停止同步(手动暂停或出错)。
* `removed`:已删除任务。

> **注意:**
>
> 该功能在 TiCDC 4.0.3 版本引入。
## 如何查看 TiCDC 同步任务是否被人为终止?

可以使用 `cdc cli` 查询同步任务是否被人为终止。例如:

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

```shell
cdc cli changefeed query --pd=http://10.0.10.25:2379 --changefeed-id 28c43ffc-2316-4f4f-a70b-d1a7c59ba79f
```

上述命令的输出中 `admin-job-type` 标志这个同步的任务的状态:

* `0`: 任务进行中,没有被人为停止。
* `1`: 任务暂停,停止任务后所有同步 `processor` 会结束退出,同步任务的配置和同步状态都会保留,可以从 `checkpoint-ts` 恢复任务。
* `2`: 任务恢复,同步任务从 `checkpoint-ts` 继续同步。
* `3`: 任务已删除,接口请求后会结束所有同步 `processor`,并清理同步任务配置信息。同步状态保留,只提供查询,没有其他实际功能。

## 为什么 TiCDC 到 Kafka 的同步任务延时越来越大?

* 请参考[如何查看 TiCDC 同步任务的状态?](/ticdc/troubleshoot-ticdc.md#如何查看-ticdc-同步任务的状态)检查下同步任务的状态是否正常。
Expand Down

0 comments on commit 619b0e7

Please sign in to comment.