TiDB Operator导入集群数据时是通过TiDB Lightning进行导入数据的。TiDB Lightning 包含两个组件:tidb-lightning 和 tikv-importer。在 Kubernetes 上,tikv-importer 位于单独的 Helm chart 内,被部署为一个副本数为 1 (replicas=1
) 的 StatefulSet
;tidb-lightning 位于单独的 Helm chart 内,被部署为一个 Job
目前,TiDB Lightning 支持三种后端:Importer-backend
、Local-backend
、TiDB-backend
。关于这三种后端的区别和选择,请参阅 TiDB Lightning 文档。
- 对于
Importer-backend
后端,需要分别部署 tikv-importer 与 tidb-lightning。
注意:Importer-backend
后端在 TiDB 5.3 及之后的版本被废弃。如果必须使用 Importer-backend
后端,请参考 v1.2 及以前的旧版文档部署 tikv-importer。
- 对于
Local-backend
后端,只需要部署 tidb-lightning。
- 对于
TiDB-backend
后端,只需要部署 tidb-lightning。推荐使用基于 TiDB Operator 新版(v1.1 及以上)的 CustomResourceDefinition (CRD) 实现。具体信息可参考使用 TiDB Lightning 恢复 GCS 上的备份数据或使用 TiDB Lightning 恢复 S3 兼容存储上的备份数据。
1、部署TiDB Lightning
第一步、配置TiDB Lightning
通过如下命令将TiDB Lightning的默认配置保存到一个文件中
helm inspect values pingcap/tidb-lightning --version=${chart_version} > tidb-lightning-values.yaml
[root@k8s-master ~]# helm inspect values pingcap/tidb-lightning --version=v1.3 > tidb-lightning-values.yaml2
根据TiDB Lightning所使用的后端类型,将配置文件中的backend字段设置为local
backend: local
# For `local` backend, an extra PV is needed for local KV sorting.
sortedKV:
storageClassName: local-storage
storage: 45Gi
配置断点续传
config: |
[lightning]
level = "info"
file = "-"
[checkpoint]
enable = true
driver = "file"
dsn = "/home/tidb_lightning_checkpoint.pb"
keep-after-success = false
第二步、配置数据源
配置本地模式
dataSource:
# for `local` source, the `nodeName` should be the label value of `kubernetes.io/hostname`.
local:
nodeName: k8s-node6
hostPath: /home/lightning
第三步、部署TiDB Lightning
helm install ${release_name} pingcap/tidb-lightning --namespace=${namespace} --set failFast=true -f tidb-lightning-values.yaml --version=${chart_version}
[root@k8s-master lightning]# helm install test-lightning pingcap/tidb-lightning --namespace=tidb --set failFast=true -f tidb-lightning-values.yaml --version=v1.3
NAME: test-lightning
LAST DEPLOYED: Fri Dec 2 16:49:26 2022
NAMESPACE: tidb
STATUS: deployed
REVISION: 1
TEST SUITE: None
NOTES:
1. Check tidb-lightning status
kubectl get job -n tidb -l app.kubernetes.io/name=test-lightning-tidb-lightning
kubectl get po -n tidb -l app.kubernetes.io/name=test-lightning-tidb-lightning
2. Check tidb-lightning logs
kubectl logs -n tidb -l app.kubernetes.io/name=test-lightning-tidb-lightning
3. View tidb-lightning status page
kubectl port-forward -n tidb svc/test-lightning-tidb-lightning 8289:8289
View http://localhost:8289 in web browser
2、销毁TiDB Lightning
目前,TiDB Lightning 只能在线下恢复数据。当恢复过程结束、TiDB 集群需要向外部应用提供服务时,可以销毁 TiDB Lightning 以节省开支。
执行以下命令删除删除 tidb-lightning :helm uninstall ${release_name} -n ${namespace}
[root@k8s-master lightning]# helm uninstall test-lightning -ntidb
release "test-lightning" uninstalled
3.故障诊断
如果 TiDB Lightning 未能成功恢复数据,且已配置将 checkpoint 信息存储在源数据所在目录、其他用户配置的数据库或存储目录中,可采用以下步骤进行手动干预:
- 运行
kubectl logs -n ${namespace} ${pod_name}
查看 log。
如果使用远程模式进行数据恢复,且异常发生在从网络存储下载数据的过程中,则依据 log 信息进行处理后,直接重新部署 tidb-lightning 进行数据恢复。否则,继续按下述步骤进行处理。
- 依据 log 并参考 TiDB Lightning 故障排除指南,了解各故障类型的处理方法。
-
对于不同的故障类型,分别进行处理:
-
如果需要使用 tidb-lightning-ctl 进行处理:
-
设置
values.yaml
的dataSource
以确保新Job
将使用发生故障的Job
已有的数据源及 checkpoint 信息:- 如果使用本地模式或 Ad hoc 模式,则
dataSource
无需修改。 - 如果使用远程模式,则修改
dataSource
为 Ad hoc 模式。其中dataSource.adhoc.pvcName
为原 Helm chart 创建的 PVC 名称,dataSource.adhoc.backupName
为待恢复数据的 backup 名称。
- 如果使用本地模式或 Ad hoc 模式,则
-
修改
values.yaml
中的failFast
为false
并创建用于使用 tidb-lightning-ctl 的Job
。- TiDB Lightning 会依据 checkpoint 信息检测前一次数据恢复是否发生错误,当检测到错误时会自动中止运行。
- TiDB Lightning 会依据 checkpoint 信息来避免对已恢复数据的重复恢复,因此创建该
Job
不会影响数据正确性。
-
当新
Job
对应的 pod 运行后,使用kubectl logs -n ${namespace} ${pod_name}
查看 log 并确认新Job
中的 tidb-lightning 已停止进行数据恢复,即 log 中包含类似以下的任意信息:tidb lightning encountered error
tidb lightning exit
-
执行
kubectl exec -it -n ${namespace} ${pod_name} -it -- sh
命令进入容器。 -
运行
cat /proc/1/cmdline
,获得启动脚本。 -
根据启动脚本中的命令行参数,参考 TiDB Lightning 故障排除指南并使用 tidb-lightning-ctl 进行故障处理。
-
故障处理完成后,将
values.yaml
中的failFast
设置为true
并再次创建新的Job
用于继续数据恢复。
-
-
如果不需要使用 tidb-lightning-ctl 进行处理:
-
参考 TiDB Lightning 故障排除指南进行故障处理。
-
设置
values.yaml
的dataSource
以确保新Job
将使用发生故障的Job
已有的数据源及 checkpoint 信息:- 如果使用本地模式或 Ad hoc 模式,则
dataSource
无需修改。 - 如果使用远程模式,则修改
dataSource
为 Ad hoc 模式。其中dataSource.adhoc.pvcName
为原 Helm chart 创建的 PVC 名称,dataSource.adhoc.backupName
为待恢复数据的 backup 名称。
- 如果使用本地模式或 Ad hoc 模式,则
-
根据新的
values.yaml
创建新的Job
用于继续数据恢复。
-
-
- 故障处理及数据恢复完成后,参考销毁 TiDB Lightning 删除用于数据恢复的
Job
及用于故障处理的Job
。