写点什么

TiDB Operator 数据导入

  • 2022-12-16
    北京
  • 本文字数:2705 字

    阅读完需:约 9 分钟

作者: 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-backendLocal-backendTiDB-backend。关于这三种后端的区别和选择,请参阅 TiDB Lightning 文档


  • 对于 Importer-backend 后端,需要分别部署 tikv-importer 与 tidb-lightning。


注意:Importer-backend 后端在 TiDB 5.3 及之后的版本被废弃。如果必须使用 Importer-backend 后端,请参考 v1.2 及以前的旧版文档部署 tikv-importer。


  • 对于 Local-backend 后端,只需要部署 tidb-lightning。


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 {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.3NAME: test-lightningLAST DEPLOYED: Fri Dec  2 16:49:26 2022NAMESPACE: tidbSTATUS: deployedREVISION: 1TEST SUITE: NoneNOTES: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-lightning2. Check tidb-lightning logs  kubectl logs -n tidb -l app.kubernetes.io/name=test-lightning-tidb-lightning3. 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 {namespace}


[root@k8s-master lightning]# helm uninstall test-lightning -ntidbrelease "test-lightning" uninstalled
复制代码

3. 故障诊断

如果 TiDB Lightning 未能成功恢复数据,且已配置将 checkpoint 信息存储在源数据所在目录、其他用户配置的数据库或存储目录中,可采用以下步骤进行手动干预:


  1. 运行 kubectl logs -n ${namespace} ${pod_name} 查看 log。


如果使用远程模式进行数据恢复,且异常发生在从网络存储下载数据的过程中,则依据 log 信息进行处理后,直接重新部署 tidb-lightning 进行数据恢复。否则,继续按下述步骤进行处理。


  1. 依据 log 并参考 TiDB Lightning 故障排除指南,了解各故障类型的处理方法。


  1. 对于不同的故障类型,分别进行处理:

  2. 如果需要使用 tidb-lightning-ctl 进行处理:

  3. 设置 values.yamldataSource 以确保新 Job 将使用发生故障的 Job 已有的数据源及 checkpoint 信息:

  4. 如果使用本地模式或 Ad hoc 模式,则 dataSource 无需修改。

  5. 如果使用远程模式,则修改 dataSource 为 Ad hoc 模式。其中 dataSource.adhoc.pvcName 为原 Helm chart 创建的 PVC 名称,dataSource.adhoc.backupName 为待恢复数据的 backup 名称。

  6. 修改 values.yaml 中的 failFastfalse 并创建用于使用 tidb-lightning-ctl 的 Job

  7. TiDB Lightning 会依据 checkpoint 信息检测前一次数据恢复是否发生错误,当检测到错误时会自动中止运行。

  8. TiDB Lightning 会依据 checkpoint 信息来避免对已恢复数据的重复恢复,因此创建该 Job 不会影响数据正确性。

  9. 当新 Job 对应的 pod 运行后,使用 kubectl logs -n ${namespace} ${pod_name} 查看 log 并确认新 Job 中的 tidb-lightning 已停止进行数据恢复,即 log 中包含类似以下的任意信息:

  10. tidb lightning encountered error

  11. tidb lightning exit

  12. 执行 kubectl exec -it -n ${namespace} ${pod_name} -it -- sh 命令进入容器。

  13. 运行 cat /proc/1/cmdline,获得启动脚本。

  14. 根据启动脚本中的命令行参数,参考 TiDB Lightning 故障排除指南并使用 tidb-lightning-ctl 进行故障处理。

  15. 故障处理完成后,将 values.yaml 中的 failFast 设置为 true 并再次创建新的 Job 用于继续数据恢复。

  16. 如果不需要使用 tidb-lightning-ctl 进行处理:

  17. 参考 TiDB Lightning 故障排除指南进行故障处理。

  18. 设置 values.yamldataSource 以确保新 Job 将使用发生故障的 Job 已有的数据源及 checkpoint 信息:

  19. 如果使用本地模式或 Ad hoc 模式,则 dataSource 无需修改。

  20. 如果使用远程模式,则修改 dataSource 为 Ad hoc 模式。其中 dataSource.adhoc.pvcName 为原 Helm chart 创建的 PVC 名称,dataSource.adhoc.backupName 为待恢复数据的 backup 名称。

  21. 根据新的 values.yaml 创建新的 Job 用于继续数据恢复。


  1. 故障处理及数据恢复完成后,参考销毁 TiDB Lightning 删除用于数据恢复的 Job 及用于故障处理的 Job


发布于: 刚刚阅读数: 2
用户头像

TiDB 社区官网:https://tidb.net/ 2021-12-15 加入

TiDB 社区干货传送门是由 TiDB 社区中布道师组委会自发组织的 TiDB 社区优质内容对外宣布的栏目,旨在加深 TiDBer 之间的交流和学习。一起构建有爱、互助、共创共建的 TiDB 社区 https://tidb.net/

评论

发布
暂无评论
TiDB Operator数据导入_迁移_TiDB 社区干货传送门_InfoQ写作社区