TiDB Lightning 没有打开断点续传,tikv-importer 被 oom killer 后,tidb-lightning 重试成功后倒入数据报错:checksum mismatched remote vs local错误

为提高效率,提问时请提供以下信息,问题描述清晰可优先响应。

  • 【TiDB 版本】:v3.0.5
  • 【问题描述】:importer和tidb-lightning的镜像都是pingcap/tidb-lightning:v3.0.1。使用官方helm chart在k8s上部署的TiDB集群,然后利用mydumper从mysql导出数据,再利用tidb-lightning进行导入。其中有一个表较大,数据加索引约为7G(其他表正常导入)。曾多次出现不同问题,最近一次为checksum mismatched remote vs local(实际"checkpoint":{“enable”:false),日志如下: logs-from-tidb-lightning-in-cloud-lightning-tidb-lightning-6cx84.txt (58.0 KB)

另:曾出现过内存不足,导致importer被oom杀死的问题,但是import已设置write-buffer-size = “1GB”(机器为16GB,importer占用为10+%左右,但是bugg/cache占用了10G,打开lightning后逐步上升),这个又可以如何限制呢?

请参考此错误方法处理,多谢

tidb-lightning-ctl --config conf/tidb-lightning.toml --checkpoint-error-destroy=all

已经执行过了,但是提示需要设置tidb.port和tidb.addr,默认tidb-lightning.toml里面没有这些配置,我已经修改添加了配置,然后还是一样提示。实际上应该改哪个配置文件呢?

另:曾出现过内存不足,导致importer被oom杀死的问题,但是import已设置write-buffer-size = “1GB”(机器为16GB,importer占用为10+%左右,但是bugg/cache占用了10G,打开lightning后逐步上升),这个又可以如何限制呢?

谢谢~

  1. tidb-lightning-ctl --config conf/tidb-lightning.toml --checkpoint-error-destroy=all 执行时具体报错是什么?
  2. 参考此文档,可以尝试调小这些参数,降低内存使用

image

我这边调整配置后:

tikv-importer的配置

    [metric]
    job = "tikv-importer"
    interval = "15s"
    address = "localhost:9091"
    [rocksdb.defaultcf]
    # 数据在刷新到硬盘前能存于内存的容量上限。
    write-buffer-size = "300MB"
    # 内存中写缓冲器的最大数量。
    max-write-buffer-number = 4

    [import]
    # 存储引擎文件的文件夹路径
    # import-dir = "/mnt/ssd/data.import/"
    # 处理 RPC 请求的线程数
    num-threads = 6
    # 导入 job 的并发数。
    num-import-jobs = 6
    # 同时打开引擎文档的最大数量。
    max-open-engines = 6

tidb-lightning的配置

  [lightning]
  level = "info"

  index-concurrency = 2
  table-concurrency = 4

导入6G多数据观察,tidb-importer自身占用内存不多,在10%以内,但是buff/cache一直增加到12G+(机器16G),导致kswapd0被拉起,然后cpu也爆了,之后tikv-importer被杀死了:

/var/log/messages:May 17 08:46:37 k8s-node3 kernel: Killed process 21807 (tikv-importer), UID 0, total-vm:64302516kB, anon-rss:1229264kB, file-rss:0kB, shmem-rss:0kB

然后基于lightning的三次重连机制,重新连上tike-importer(importer被重启了),然后lightning接着处理数据,却发现数据不一致了(因为importer被重启,前面的数据已被清空?):

error="checksum mismatched remote vs local => (checksum: 4170902639172750923 vs 13751442013468909453) (total_kvs: 5930807 vs 71169684) (total_bytes:7023389858 vs 10333979527)"]

然后就总是导入不进去了。。小白我这边准备看看是否可以设置linux内存使用和释放限制,或者请问有其他好方法么?或者importer有相关参数可以设置?

我这边解决问题了,原因是我使用本地存储(local-storage-provisoner)时,创建pv的命令是

mkdir -p /data/k8s/test-tidb-tikv && mount -t tmpfs test-tidb-tikv /data/k8s/test-tidb-tikv/

(当初在网上看的)只有这样才能把目录挂成一个设备,现在才懂tmpfs是挂到内存上去了,导致一导入大数据就把内存爆了:sweat: 现在我换回手动创建pv了,数据是放到硬盘上,能正常导入数据了~~

ps:主要是k8s的存储种类使用不熟悉,导致问题出现。

:+1: ,感谢您的反馈