Skip to content

Commit

Permalink
This is an automated cherry-pick of pingcap#7041
Browse files Browse the repository at this point in the history
Signed-off-by: ti-chi-bot <ti-community-prow-bot@tidb.io>
  • Loading branch information
asddongmen authored and ti-chi-bot committed Nov 22, 2021
1 parent cd42e69 commit d783eca
Show file tree
Hide file tree
Showing 4 changed files with 47 additions and 5 deletions.
Binary file added media/ticdc-state-transfer.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
2 changes: 1 addition & 1 deletion ticdc/deploy-ticdc.md
Original file line number Diff line number Diff line change
Expand Up @@ -50,7 +50,7 @@ cdc server --pd=http://10.0.10.25:2379 --log-file=ticdc_3.log --addr=0.0.0.0:830

对于 `cdc server` 命令中可用选项解释如下:

- `gc-ttl`:TiCDC 在 PD 设置的服务级别 GC safepoint 的 TTL (Time To Live) 时长,单位为秒,默认值为 `86400`,即 24 小时。
- `gc-ttl`:TiCDC 在 PD 设置的服务级别 GC safepoint 的 TTL (Time To Live) 时长,和 TiCDC 同步任务所能够停滞的时长。单位为秒,默认值为 `86400`,即 24 小时。注意:TiCDC 同步任务的停滞会影响 TiCDC GC safepoint 的推进,即会影响上游 TiDB GC 的推进,详情可以参考 [TiCDC GC safepoint 的完整行为](/ticdc/troubleshoot-ticdc.md#ticdc-gc-safepoint-的完整行为是什么)
- `pd`:PD client 的 URL。
- `addr`:TiCDC 的监听地址,提供服务的 HTTP API 查询地址和 Prometheus 查询地址。
- `advertise-addr`:TiCDC 对外访问地址。
Expand Down
28 changes: 28 additions & 0 deletions ticdc/manage-ticdc.md
Original file line number Diff line number Diff line change
Expand Up @@ -97,6 +97,34 @@ tiup cluster edit-config <cluster-name>

### 管理同步任务 (`changefeed`)

<<<<<<< HEAD
=======
#### 同步任务状态流转

同步任务状态标识了同步任务的运行情况。在 TiCDC 运行过程中,同步任务可能会运行出错、手动暂停、恢复,或达到指定的 `TargetTs`,这些行为都可以导致同步任务状态发生变化。本节描述 TiCDC 同步任务的各状态以及状态之间的流转关系。

![TiCDC state transfer](/media/ticdc-state-transfer.png)

以上状态流转图中的状态说明如下:

- Normal:同步任务正常进行,checkpoint-ts 正常推进。
- Stopped:同步任务停止,由于用户手动暂停 (pause) changefeed。处于这个状态的 changefeed 会阻挡 GC 推进。
- Error:同步任务报错,由于某些可恢复的错误导致同步无法继续进行,处于这个状态的 changefeed 会不断尝试继续推进,直到状态转为 Normal。处于这个状态的 changefeed 会阻挡 GC 推进。
- Finished:同步任务完成,同步任务进度已经达到预设的 TargetTs。处于这个状态的 changefeed 不会阻挡 GC 推进。
- Failed:同步任务失败。由于发生了某些不可恢复的错误,导致同步无法继续进行,并且无法恢复。处于这个状态的 changefeed 不会阻挡 GC 推进。

以上状态流转图中的编号说明如下:

- ① 执行 `changefeed pause` 命令。
- ② 执行 `changefeed resume` 恢复同步任务。
- ③ `changefeed` 运行过程中发生可恢复的错误,自动进行恢复。
- ④ 执行 `changefeed resume` 恢复同步任务。
- ⑤ `changefeed` 运行过程中发生不可恢复的错误。
- ⑥ `changefeed` 已经进行到预设的 TargetTs,同步自动停止。
- ⑦ `changefeed` 停滞时间超过 `gc-ttl` 所指定的时长,不可被恢复。
- ⑧ `changefeed` 尝试自动恢复过程中发生不可恢复的错误。

>>>>>>> f2210099f (ticdc: add description about gc-ttl (#7041))
#### 创建同步任务

使用以下命令来创建同步任务:
Expand Down
22 changes: 18 additions & 4 deletions ticdc/troubleshoot-ticdc.md
Original file line number Diff line number Diff line change
Expand Up @@ -61,7 +61,7 @@ cdc cli changefeed list --pd=http://10.0.10.25:2379

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

- 通过 Grafana 检查同步任务的 `changefeed checkpoint`注意选择正确的 `changefeed id`)监控项。如果该值不发生变化(也可以查看 `checkpoint lag` 是否不断增大,可能同步任务出现中断。
- 通过 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` 级别的日志排查问题。
Expand Down Expand Up @@ -136,13 +136,27 @@ cdc cli changefeed update -c <changefeed-id> --sort-engine="unified" --sort-dir=
## 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 清理掉。
从 TiDB v4.0.0-rc.1 版本起,PD 支持外部服务设置服务级别 GC safepoint。任何一个服务可以注册更新自己服务的 GC safepoint。PD 会保证任何晚于该 GC safepoint 的 KV 数据不会在 TiKV 中被 GC 清理掉。

启动 TiCDC server 时可以通过 `gc-ttl` 指定 GC safepoint 的 TTL,这个值的含义是当 TiCDC 服务全部挂掉后,由 TiCDC 在 PD 所设置的 GC safepoint 保存的最长时间,该值默认为 86400 秒。
在 TiCDC 中启用了这一功能,用来保证 TiCDC 在不可用、或同步任务中断情况下,可以在 TiKV 内保留 TiCDC 需要消费的数据不被 GC 清理掉。

启动 TiCDC server 时可以通过 `gc-ttl` 指定 GC safepoint 的 TTL,也可以[通过 TiUP 修改](/ticdc/manage-ticdc.md#使用-tiup-修改-ticdc-配置) TiCDC 的 `gc-ttl`,默认值为 24 小时。在 TiCDC 中这个值有如下两重含义:

- 当 TiCDC 服务全部停止后,由 TiCDC 在 PD 所设置的 GC safepoint 保存的最长时间。
- TiCDC 中某个同步任务中断或者被手动停止时所能停滞的最长时间,若同步任务停滞时间超过 `gc-ttl` 所设置的值,那么该同步任务就会进入 `failed` 状态,无法被恢复,并且不会继续影响 GC safepoint 的推进。

以上第二种行为是在 TiCDC v4.0.13 版本及之后版本中新增的。目的是为了防止 TiCDC 中某个同步任务停滞时间过长,导致上游 TiKV 集群的 GC safepoint 长时间不推进,保留的旧数据版本过多,进而影响上游集群性能。

> **注意**
> 在某些应用场景中,比如使用 Dumpling/BR 全量同步后使用 TiCDC 接增量同步时,默认的 `gc-ttl` 为 24 小时可能无法满足需求。此时应该根据实际情况,在启动 TiCDC server 时指定 `gc-ttl` 的值。
## 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 而丢失。
TiCDC 服务启动后,如果有任务开始同步,TiCDC owner 会根据所有同步任务最小的 checkpoint-ts 更新到 PD service GC safepoint,service GC safepoint 可以保证该时间点及之后的数据不被 GC 清理掉。如果 TiCDC 中某个同步任务中断、或者被用户主动停止,则该任务的 checkpoint-ts 不会再改变,PD 对应的 service GC safepoint 最终会停滞在该任务的 checkpoint-ts 处不再更新。

如果该同步任务停滞的时间超过了 `gc-ttl` 指定的时长,那么该同步任务就会进入 `failed` 状态,并且无法被恢复,PD 对应的 service GC safepoint 就会继续推进。

TiCDC 为 service GC safepoint 设置的存活有效期为 24 小时,即 TiCDC 服务中断 24 小时内恢复能保证数据不因 GC 而丢失。

## 如何处理 TiCDC 创建同步任务或同步到 MySQL 时遇到 `Error 1298: Unknown or incorrect time zone: 'UTC'` 错误?

Expand Down

0 comments on commit d783eca

Please sign in to comment.