暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

TiDB Operator数据导入

PingCAP 2023-06-27
239

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。

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 releasenamepingcap/tidblightningnamespace={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 信息存储在源数据所在目录、其他用户配置的数据库或存储目录中,可采用以下步骤进行手动干预:

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

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

  1. 依据 log 并参考 TiDB Lightning 故障排除指南 ,了解各故障类型的处理方法。
  2. 对于不同的故障类型,分别进行处理:
    1. 如果需要使用 tidb-lightning-ctl 进行处理:
      1. 设置 values.yamldataSource 以确保新 Job 将使用发生故障的 Job 已有的数据源及 checkpoint 信息:
        • 如果使用本地模式或 Ad hoc 模式,则 dataSource 无需修改。
        • 如果使用远程模式,则修改 dataSource 为 Ad hoc 模式。其中 dataSource.adhoc.pvcName 为原 Helm chart 创建的 PVC 名称, dataSource.adhoc.backupName 为待恢复数据的 backup 名称。
      2. 修改 values.yaml 中的 failFastfalse 并创建用于使用 tidb-lightning-ctl 的 Job
        • TiDB Lightning 会依据 checkpoint 信息检测前一次数据恢复是否发生错误,当检测到错误时会自动中止运行。
        • TiDB Lightning 会依据 checkpoint 信息来避免对已恢复数据的重复恢复,因此创建该 Job 不会影响数据正确性。
      3. 当新 Job 对应的 pod 运行后,使用 kubectl logs -n ${namespace} ${pod_name} 查看 log 并确认新 Job 中的 tidb-lightning 已停止进行数据恢复,即 log 中包含类似以下的任意信息:
        • tidb lightning encountered error
        • tidb lightning exit
      4. 执行 kubectl exec -it -n ${namespace} ${pod_name} -it -- sh 命令进入容器。
      5. 运行 cat /proc/1/cmdline ,获得启动脚本。
      6. 根据启动脚本中的命令行参数,参考 TiDB Lightning 故障排除指南 并使用 tidb-lightning-ctl 进行故障处理。
      7. 故障处理完成后,将 values.yaml 中的 failFast 设置为 true 并再次创建新的 Job 用于继续数据恢复。
    2. 如果不需要使用 tidb-lightning-ctl 进行处理:
      1. 参考 TiDB Lightning 故障排除指南 进行故障处理。
      2. 设置 values.yamldataSource 以确保新 Job 将使用发生故障的 Job 已有的数据源及 checkpoint 信息:
        • 如果使用本地模式或 Ad hoc 模式,则 dataSource 无需修改。
        • 如果使用远程模式,则修改 dataSource 为 Ad hoc 模式。其中 dataSource.adhoc.pvcName 为原 Helm chart 创建的 PVC 名称, dataSource.adhoc.backupName 为待恢复数据的 backup 名称。
      3. 根据新的 values.yaml 创建新的 Job 用于继续数据恢复。
  3. 故障处理及数据恢复完成后,参考 销毁 TiDB Lightning 删除用于数据恢复的 Job 及用于故障处理的 Job
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论