Lightning for CSV:快速指南

注意事项

在使用 tidb-lightning 前,需注意以下事项:

tidb-lightning 运行后,TiDB 集群将无法正常对外提供服务。 集群会变为“导入模式”,并产生大量未压缩的文件,继而消耗 CPU 并导致迟延 (stall)。 若 tidb-lightning 崩溃,集群仍会留在“导入模式” 。需要使用 tidb-lightning-ctl 手动将集群转回“普通模式”:

bin/tidb-lightning-ctl -switch-mode=normal

硬件需求

tidb-lightningtikv-importer 这两个组件皆为资源密集程序,建议各自单独部署。 为了优化效能,建议硬件配置如下:

tidb-lightning 32+ 逻辑核 CPU 足够储存整个 SQL dump 数据源的 SSD 硬盘,读取速度越快越好 使用万兆网卡,带宽需 300 MB/s 以上 运行过程默认会打满 CPU,建议单独部署。条件不允许的情况下可以和其他组件 (比如 TiDB-server) 部署在同一台机器上,然后通过配置 region-concurrency 限制 tidb-lightning 的 CPU 使用。

tikv-importer 32+ 逻辑核 CPU 32 GB+ 内存 1 TB+ SSD 硬盘,IOPS 越高越好(要求 ≥8000) 使用万兆网卡,带宽需 300 MB/s 以上 运行过程中 CPU、I/O 和网络带宽都可能打满,建议单独部署。

CSV 文件命名

  • CSV 文件的文件名必须类似于 db_name.table_name.csv
  • 如果有切分成多个 CSV 文件的话,文件名必须类似于
  • db_name.table_name.003.csv

表结构

  • 在 TiDB 中预先 create database db_name
  • 在 TiDB 中预先 create table table_name

登录中控机,准备 tidb-lightning 和 tikv-importer

下载 Lightning for CSV

wget https://download.pingcap.org/tidb-lightning-test-xx-latest-linux-amd64.tar.gz

解压

tar -zxvf tidb-lightning-test-xx-latest-linux-amd64.tar.gz

拷贝覆盖 ansible 中的 lightning 相关组件

cp -R .../tidb-lightning-test-xx-latest-linux-amd64/bin .../tidb-ansible/resources/

使用 ansible 部署 tidb-lightning

编辑 …/tidb-ansible/inventory.ini ,分别配置一个 IP 来部署 tidb-lightningtikv-importer

...
[importer_server]
192.168.20.9

[lightning_server]
192.168.20.10
...

编辑 group_vars/lightning_server.yml ,配置 CSV 文件路径

---
dummy:

# 获取 mydumper SQL dump 的路径。
data_source_dir: "{{ deploy_dir }}/mydumper"

编辑 group_vars/importer_server.yml,配置 SST 文件路径

---
dummy:

# 储存引擎文件的路径。需存放在空间足够大的分区。
import_dir: "{{ deploy_dir }}/data.import"

优化系统配置

ansible-playbook bootstrap.yml -l lightning_server_ip,importer_server_ip --extra-vars "dev_mode=True"    

开始部署

ansible-playbook deploy.yml -l lightning_server_ip,importer_server_ip

登录 tidb-lightning 服务器,调整配置文件

编辑 tidb-lightning 配置文件

vi {{ deploy_dir }}/conf/tidb-lightning.toml

修改 no-schema = true

[mydumper]

no-schema = true

tidb-lightning.toml 尾部增加代码块

[mydumper.csv] separator = ‘,’ delimiter = ‘"’ header = true not-null = false null = ‘N’ backslash-escape = true trim-last-separator = false

{{ deploy_dir }}/mydumper 下存放 Example CSV

ID,Region,Count 1,“East”,32 2,“South”,N 3,“West”,10 4,“North”,39

启动服务

登录 tikv-importer 的服务器,并执行以下命令来启动 Importer。

{{deploy_dir}}/scripts/start_importer.sh

同路径下的 stop_importer.sh 为停止脚本

登录 tidb-lightning 的服务器,并执行以下命令来启动 Lightning,开始导入过程。

{{deploy_dir}}scripts/start_lightning.sh

同路径下的 stop_lightning.sh 为停止脚本