title | category | aliases | |||
---|---|---|---|---|---|
TiCDC 运维操作及任务管理 |
reference |
|
本文档介绍如何部署 TiCDC 集群,以及如何通过 TiCDC 提供的命令行工具 cdc cli
和 HTTP 接口两种方式来管理 TiCDC 集群和同步任务。
详细操作参考使用 TiUP 部署 TiCDC。
-
首先确认当前 TiDB 的版本支持 TiCDC,否则需要先升级 TiDB 集群至 4.0.0 rc.1 或更新版本。
-
参考 扩容 TiDB/TiKV/PD/TiCDC 节点 章节对 TiCDC 进行部署。
假设 PD 集群有一个可以提供服务的 PD 节点(client URL 为 10.0.10.25:2379
)。若要部署三个 TiCDC 节点,可以按照以下命令启动集群。只需要指定相同的 PD 地址,新启动的节点就可以自动加入 TiCDC 集群。
{{< copyable "shell-regular" >}}
cdc server --pd=http://10.0.10.25:2379 --log-file=ticdc_1.log --addr=0.0.0.0:8301 --advertise-addr=127.0.0.1:8301
cdc server --pd=http://10.0.10.25:2379 --log-file=ticdc_2.log --addr=0.0.0.0:8302 --advertise-addr=127.0.0.1:8302
cdc server --pd=http://10.0.10.25:2379 --log-file=ticdc_3.log --addr=0.0.0.0:8303 --advertise-addr=127.0.0.1:8303
对于 cdc server
命令中可用选项解释如下:
gc-ttl
: TiCDC 在 PD 设置的服务级别 GC safepoint 的 TTL (Time To Live) 时长,单位为秒,默认值为86400
,即 24 小时。pd
: PD client 的 URL。addr
: TiCDC 的监听地址,提供服务的 HTTP API 查询地址和 Prometheus 查询地址。advertise-addr
: TiCDC 对外访问地址。tz
: TiCDC 服务使用的时区。TiCDC 在内部转换 timestamp 等时间数据类型和向下游同步数据时使用该时区,默认为进程运行本地时区。log-file
: TiCDC 进程运行日志的地址,默认为cdc.log
。log-level
: TiCDC 进程运行时默认的日志级别,默认为info
。
以下内容介绍如何使用 cdc cli
工具来管理集群状态和数据同步。在以下接口描述中,假设 PD 的监听 IP 地址为 127.0.0.1
,端口为 2379
。
-
查询
capture
列表:{{< copyable "shell-regular" >}}
cdc cli capture list --pd=http://127.0.0.1:2379
[ { "id": "6d92386a-73fc-43f3-89de-4e337a42b766", "is-owner": true }, { "id": "b293999a-4168-4988-a4f4-35d9589b226b", "is-owner": false } ]
使用以下命令来创建同步任务:
{{< copyable "shell-regular" >}}
cdc cli changefeed create --pd=http://127.0.0.1:2379 --sink-uri="mysql://root:123456@127.0.0.1:3306/"
create changefeed ID: 28c43ffc-2316-4f4f-a70b-d1a7c59ba79f info {"sink-uri":"mysql://root:123456@127.0.0.1:3306/","opts":{},"create-time":"2020-03-12T22:04:08.103600025+08:00","start-ts":415241823337054209,"target-ts":0,"admin-job-type":0,"config":{"filter-case-sensitive":false,"filter-rules":null,"ignore-txn-start-ts":null}}
其中 --sink-uri
需要按照以下格式进行配置,目前 scheme 支持 mysql
/tidb
/kafka
。
{{< copyable "" >}}
[scheme]://[userinfo@][host]:[port][/path]?[query_parameters]
-
Sink URI 配置
mysql
/tidb
配置样例如下所示:
{{< copyable "shell-regular" >}}
--sink-uri="mysql://root:123456@127.0.0.1:3306/?worker-count=16&max-txn-row=5000"
以上配置命令中的参数解析如下:
参数 解析 root
下游数据库的用户名 123456
下游数据库密码 127.0.0.1
下游数据库的 IP 3306
下游数据的连接端口 worker-count
向下游执行 SQL 的并发度(可选,默认值为 16
)max-txn-row
向下游执行 SQL 的 batch 大小(可选,默认值为 256
) -
Sink URI 配置
kafka
配置样例如下所示:
{{< copyable "shell-regular" >}}
--sink-uri="kafka://127.0.0.1:9092/cdc-test?kafka-version=2.4.0&partition-num=6&max-message-bytes=67108864&replication-factor=1"
以上配置命令中的参数解析如下:
参数 解析 127.0.0.1
下游 Kafka 对外提供服务的 IP 9092
下游 Kafka 的连接端口 cdc-test
使用的 Kafka topic 名字 kafka-version
下游 Kafka 版本号(可选,默认值 2.4.0
)partition-num
下游 Kafka partition 数量(可选,不能大于实际 partition 数量。如果不填会自动获取 partition 数量。) max-message-bytes
每次向 Kafka broker 发送消息的最大数据量(可选,默认值 64MB
)replication-factor
kafka 消息保存副本数(可选,默认值 1
)
使用以下命令来查询同步任务列表:
{{< copyable "shell-regular" >}}
cdc cli changefeed list --pd=http://127.0.0.1:2379
[
{
"id": "28c43ffc-2316-4f4f-a70b-d1a7c59ba79f"
}
]
使用以下命令来查询特定同步任务(对应某个同步任务的信息和状态):
{{< copyable "shell-regular" >}}
cdc cli changefeed query --pd=http://127.0.0.1:2379 --changefeed-id=28c43ffc-2316-4f4f-a70b-d1a7c59ba79f
{
"info": {
"sink-uri": "mysql://root:123456@127.0.0.1:3306/",
"opts": {},
"create-time": "2020-03-12T22:04:08.103600025+08:00",
"start-ts": 415241823337054209,
"target-ts": 0,
"admin-job-type": 0,
"config": {
"filter-case-sensitive": false,
"filter-rules": null,
"ignore-txn-start-ts": null
}
},
"status": {
"resolved-ts": 415241860902289409,
"checkpoint-ts": 415241860640145409,
"admin-job-type": 0
}
}
以上命令中:
resolved-ts
代表当前 changfeed 中最大的已经成功从 TiKV 发送到 TiCDC 的事务 TS;checkpoint-ts
代表当前 changefeed 中最大的已经成功写入下游的事务 TS;admin-job-type
代表一个 changefeed 的状态:0
: 状态正常,也是初始状态。1
: 任务暂停。停止任务后所有同步processor
会结束退出,同步任务的配置和同步状态都会保留,可以从checkpoint-ts
恢复任务。2
: 任务恢复,同步任务从checkpoint-ts
继续同步。3
: 任务已删除,接口请求后会结束所有同步processor
,并清理同步任务配置信息。同步状态保留,只提供查询,没有其他实际功能。
使用以下命令来停止同步任务:
{{< copyable "shell-regular" >}}
cdc cli changefeed pause --pd=http://127.0.0.1:2379 --changefeed-id 28c43ffc-2316-4f4f-a70b-d1a7c59ba79f
以上命令中:
--changefeed=uuid
为需要操作的changefeed
ID。
使用以下命令恢复同步任务:
{{< copyable "shell-regular" >}}
cdc cli changefeed resume --pd=http://127.0.0.1:2379 --changefeed-id 28c43ffc-2316-4f4f-a70b-d1a7c59ba79f
以上命令中:
--changefeed=uuid
为需要操作的changefeed
ID。
使用以下命令删除同步任务:
{{< copyable "shell-regular" >}}
cdc cli changefeed remove --pd=http://127.0.0.1:2379 --changefeed-id 28c43ffc-2316-4f4f-a70b-d1a7c59ba79f
--changefeed=uuid
为需要操作的changefeed
ID。
-
查询
processor
列表:{{< copyable "shell-regular" >}}
cdc cli processor list --pd=http://127.0.0.1:2379
[ { "id": "9f84ff74-abf9-407f-a6e2-56aa35b33888", "capture-id": "b293999a-4168-4988-a4f4-35d9589b226b", "changefeed-id": "28c43ffc-2316-4f4f-a70b-d1a7c59ba79f" } ]
-
查询特定
processor
,对应于某个节点处理的同步子任务信息和状态:{{< copyable "shell-regular" >}}
cdc cli processor query --pd=http://127.0.0.1:2379 --changefeed-id=28c43ffc-2316-4f4f-a70b-d1a7c59ba79f
{ "status": { "table-infos": [ { "id": 45, "start-ts": 415241823337054209 } ], "table-p-lock": null, "table-c-lock": null, "admin-job-type": 0 }, "position": { "checkpoint-ts": 415241893447467009, "resolved-ts": 415241893971492865 } }
目前 HTTP 接口提供一些基础的查询和运维功能。在以下接口描述中,假设 TiCDC server 的监听 IP 地址为 127.0.0.1
,端口为 8300
(在启动 TiCDC server 时通过 --addr=ip:port
指定绑定的 IP 和端口)。
使用以下命令获取 CDC server 状态信息的接口:
{{< copyable "shell-regular" >}}
curl http://127.0.0.1:8300/status
{
"version": "0.0.1",
"git_hash": "863f8ea889b144244ff53593a45c47ad22d37396",
"id": "6d92386a-73fc-43f3-89de-4e337a42b766", # capture id
"pid": 12102 # cdc server pid
}
{{< copyable "shell-regular" >}}
curl -X POST http://127.0.0.1:8300/capture/owner/resign
以上命令仅对 owner 节点请求有效。
{
"status": true,
"message": ""
}
{{< copyable "shell-regular" >}}
curl -X POST http://127.0.0.1:8301/capture/owner/resign
以上命令对非 owner 节点请求返回错误。
election: not leader