TiDB Operator 数据导入
作者: lqbyz 原文来源:https://tidb.net/blog/09631779
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
根据 TiDB Lightning 所使用的后端类型,将配置文件中的 backend 字段设置为 local
配置断点续传
第二步、配置数据源
配置本地模式
第三步、部署 TiDB Lightning
helm install {namespace} –set failFast=true -f tidb-lightning-values.yaml –version=${chart_version}
2、销毁 TiDB Lightning
目前,TiDB Lightning 只能在线下恢复数据。当恢复过程结束、TiDB 集群需要向外部应用提供服务时,可以销毁 TiDB Lightning 以节省开支。
执行以下命令删除删除 tidb-lightning :helm uninstall {namespace}
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 名称。修改
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 名称。根据新的
values.yaml
创建新的Job
用于继续数据恢复。
故障处理及数据恢复完成后,参考销毁 TiDB Lightning 删除用于数据恢复的
Job
及用于故障处理的Job
。
版权声明: 本文为 InfoQ 作者【TiDB 社区干货传送门】的原创文章。
原文链接:【http://xie.infoq.cn/article/e29902ecec6dc5a2eed9d7acc】。文章转载请联系作者。
评论