TiDB Lightningバックエンド
バックエンドは、 TiDB Lightningがターゲット クラスタにデータをインポートする方法を決定します。
TiDB Lightningは次のバックエンドをサポートしています。
Local-backend : tidb-lightningは、最初にデータをキーと値のペアにエンコードし、並べ替えてローカルの一時ディレクトリに保存し、これらのキーと値のペアをSST ファイルとして各 TiKV ノードにアップロードします。次に、TiKV はこれらのSST ファイルをクラスターに取り込みます。 Local-backend の実装は Importer-backend の実装と同じですが、外部のtikv-importerコンポーネントには依存しません。
Importer-backend : tidb-lightningは、最初に SQL または CSV データを KV ペアにエンコードし、外部プログラムに依存してこれらの KV ペアをソートし、 tikv-importerノードに直接取り込みます。
TiDB バックエンド: tidb-lightningは、最初にこれらのデータを SQL INSERTステートメントにエンコードし、これらのステートメントを TiDB ノードで直接実行します。
ノート:
複数のTiDB Lightningインスタンスを使用して同じターゲットにデータをインポートする場合は、一度に 1 つのバックエンドのみを適用します。たとえば、ローカル バックエンド モードと TiDB バックエンド モードの両方で同時に同じ TiDB クラスターにデータをインポートすることはできません。
デフォルトでは、複数のTiDB Lightningインスタンスを開始して、同じ TiDB クラスターにデータをインポートすることはできません。代わりに、 並行輸入品機能を使用できます。
バックエンド モードの選択方法
- データ インポートのターゲット クラスターが v4.0 以降のバージョンである場合は、他の 2 つのモードよりも使いやすく、パフォーマンスが高い Local-backend モードを最初に使用することを検討してください。
- データ インポートのターゲット クラスターが v3.x 以前のバージョンである場合は、Importer-backend モードを使用することをお勧めします。
- データ インポートのターゲット クラスターがオンラインの運用環境にある場合、またはデータ インポートのターゲット テーブルに既にデータがある場合は、TiDB バックエンド モードを使用することをお勧めします。
TiDB Lightningローカルバックエンド
TiDB v4.0.3 以降、ローカル バックエンド機能がTiDB Lightningに導入されました。この機能を使用して、v4.0.0 以降の TiDB クラスターにデータをインポートできます。
ローカル バックエンドの展開
ローカル バックエンド モードでTiDB Lightningをデプロイするには、 TiDB Lightningの導入を参照してください。
TiDB Lightning TiDB バックエンド
ノート:
TiDB v4.0 以降、PingCAP はローダツールを維持しなくなりました。 v5.0 以降、ローダーのドキュメントは利用できなくなりました。ローダーの機能はTiDB Lightningに切り替えることを強くお勧めします。
TiDB バックエンドのデプロイ
TiDB バックエンドを使用する場合、 tikv-importerをデプロイする必要はありません。 標準展開手順と比較すると、TiDB バックエンドのデプロイには次の 2 つの違いがあります。
tikv-importerを含むすべてのステップをスキップできます。- TiDB バックエンドを使用することを宣言するには、構成を変更する必要があります。
ハードウェア要件
TiDB バックエンドを使用したTiDB Lightningの速度は、TiDB の SQL 処理速度によって制限されます。したがって、ローエンドのマシンでも可能なパフォーマンスを最大限に引き出すことができます。推奨されるハードウェア構成は次のとおりです。
- 16個の論理コアCPU
- データ ソース全体を格納するのに十分な大きさの SSD、より高速な読み取り速度を優先する
- 1 ギガビット ネットワーク カード
手動展開
tikv-importerをダウンロードして構成する必要はありません。 TiDB Lightningはここからダウンロードできます。
tidb-lightningを実行する前に、構成ファイルに次の行を追加します。
[tikv-importer]
backend = "tidb"
またはtidb-lightningを実行するときに--backend tidb引数を指定します。
Configuration / コンフィグレーションの説明とサンプル
このセクションでは、 TiDB Lightningでのタスク設定のサンプルを提供します。
# tidb-lightning task configuration
[lightning]
# Checks whether the cluster satisfies the minimum requirement before starting.
check-requirements = true
# Each table is split into one "index engine" to store indices, and multiple
# "data engines" to store row data. These settings control the maximum
# concurrent number for each type of engines.
# Controls the maximum number of tables that can be imported in parallel. For TiDB-backend, the default value is the number of CPU cores.
index-concurrency = 40
# Controls the maximum number of "data engines" allowed to be imported in parallel. The default value is the number of CPU cores. The value should be no less than the value of index-concurrency.
table-concurrency = 40
# The number of concurrent SQL statements executed. It is set to the number of logical CPU cores by default. The bottleneck of TiDB-backend is usually not the CPU. You can increase this value based on the actual load of the downstream cluster to optimize the write speed. At the same time, when adjusting this configuration, it is recommended to adjust the index-concurrency and table-concurrency to the same value.
region-concurrency = 40
# Logging
level = "info"
# The directory to which the log is output. If it is empty (default), the file is saved to /tmp/lightning.log.{timestamp}. If you want the logs to be written to the system standard output, set it to "-".
file = "tidb-lightning.log"
[checkpoint]
# Whether to enable checkpoints.
# While importing data, TiDB Lightning records which tables have been imported, so
# even if TiDB Lightning or some other component crashes, you can start from a known
# good state instead of restarting from scratch.
enable = true
# Where to store the checkpoints.
# - file (default): store as a local file (requires v2.1.1 or later)
# - mysql: store into a remote MySQL-compatible database
driver = "file"
# The schema name (database name) to store the checkpoints
# Enabled only when `driver = "mysql"`.
# schema = "tidb_lightning_checkpoint"
# The data source name (DSN) indicating the location of the checkpoint storage.
#
# For the "file" driver, the DSN is a path. If the path is not specified, Lightning would
# default to "/tmp/CHECKPOINT_SCHEMA.pb".
#
# For the "mysql" driver, the DSN is a URL in the form of "USER:PASS@tcp(HOST:PORT)/".
# If the URL is not specified, the TiDB server from the [tidb] section is used to
# store the checkpoints. You should specify a different MySQL-compatible
# database server to reduce the load of the target TiDB cluster.
#dsn = "/tmp/tidb_lightning_checkpoint.pb"
# Whether to keep the checkpoints after all data are imported. If false, the
# checkpoints are deleted. Keeping the checkpoints can aid debugging but
# might leak metadata about the data source.
# keep-after-success = false
[tikv-importer]
# use the TiDB-backend.
backend = "tidb"
# Action to do when trying to insert a duplicated entry in the "tidb" backend.
# - replace: use new entry to replace the existing entry
# - ignore: keep the existing entry, and ignore the new entry
# - error: report error and quit the program
# on-duplicate = "replace"
[mydumper]
# Block size for file reading. Keep it longer than the longest string of
# the data source.
# read-block-size = "64KiB"
# Minimum size (in terms of source data file) of each batch of import.
# TiDB Lightning splits a large table into multiple data engine files according to this size.
# batch-size = 107_374_182_400 # Byte (default = 100 GB)
# Local source data directory or the URL of the external storage.
data-source-dir = "/data/my_database"
# the input data in a "strict" format speeds up processing.
# "strict-format = true" requires that:
# in CSV, every value cannot contain literal new lines (U+000A and U+000D, or \r and \n) even
# when quoted, which means new lines are strictly used to separate rows.
# "Strict" format allows TiDB Lightning to quickly locate split positions of a large file for parallel processing.
# However, if the input data is not "strict", it may split a valid data in half and
# corrupt the result.
# The default value is false for safety instead of speed.
strict-format = false
# If strict-format is true, TiDB Lightning splits large CSV files into multiple chunks to process in
# parallel. max-region-size is the maximum size of each chunk after splitting.
# max-region-size = 268_435_456 # Byte (default = 256 MB)
# Only import tables if these wildcard rules are matched. See the corresponding section for details.
filter = ['*.*', '!mysql.*', '!sys.*', '!INFORMATION_SCHEMA.*', '!PERFORMANCE_SCHEMA.*', '!METRICS_SCHEMA.*', '!INSPECTION_SCHEMA.*']
# Configures how CSV files are parsed.
[mydumper.csv]
# Separator between fields, should be an ASCII character.
separator = ','
# Quoting delimiter, can either be an ASCII character or empty string.
delimiter = '"'
# Whether the CSV files contain a header.
# If `header` is true, the first line will be skipped.
header = true
# Whether the CSV contains any NULL value.
# If `not-null` is true, all columns from CSV cannot be NULL.
not-null = false
# When `not-null` is false (that is, CSV can contain NULL),
# fields equal to this value will be treated as NULL.
null = '\N'
# Whether to interpret backslash escapes inside fields.
backslash-escape = true
# If a line ends with a separator, remove it.
trim-last-separator = false
[tidb]
# Configuration of any TiDB server from the cluster.
host = "172.16.31.1"
port = 4000
user = "root"
password = ""
# The default SQL mode used to parse and execute the SQL statements.
sql-mode = "ONLY_FULL_GROUP_BY,NO_ENGINE_SUBSTITUTION"
# Whether to use TLS for SQL connections. Valid values are:
# * "" - force TLS (same as "cluster") if [tidb.security] section is populated, otherwise same as "false"
# * "false" - disable TLS
# * "cluster" - force TLS and verify the server's certificate with the CA specified in the [tidb.security] section
# * "skip-verify" - force TLS but do not verify the server's certificate (insecure!)
# * "preferred" - same as "skip-verify", but if the server does not support TLS, fallback to unencrypted connection
# tls = ""
# Specifies certificates and keys for TLS-enabled MySQL connections.
# [tidb.security]
# Public certificate of the CA. Set to empty string to disable TLS for SQL.
# ca-path = "/path/to/ca.pem"
# Public certificate of this service. Default to copy of `security.cert-path`
# cert-path = "/path/to/lightning.pem"
# Private key of this service. Default to copy of `security.key-path`
# key-path = "/path/to/lightning.key"
# Configures the background periodic actions.
# Supported units: h (hour), m (minute), s (second).
[cron]
# Duration between which an import progress is printed to the log.
log-progress = "5m"
構成項目の詳細な説明については、 TiDB LightningConfiguration / コンフィグレーションを参照してください。
紛争解決
TiDB バックエンドは、既に入力されているテーブルへのインポートをサポートしています。ただし、新しいデータは、古いデータとの一意キーの競合を引き起こす可能性があります。このタスク構成を使用して、競合を解決する方法を制御できます。
[tikv-importer]
backend = "tidb"
on-duplicate = "replace" # or "error" or "ignore"
Loader からTiDB Lightningへの移行 TiDB バックエンド
データを TiDB クラスターにインポートする必要がある場合、TiDB バックエンドを使用するTiDB Lightningはローダの機能を完全に置き換えることができます。次のリストは、ローダー構成をTiDB Lightning構成に変換する方法を示しています。
TiDB Lightning Importer バックエンド
インポーター バックエンド モードのデプロイ
このセクションでは、インポーター バックエンド モードでTiDB Lightningを手動でデプロイするを実行する方法について説明します。
ハードウェア要件
tidb-lightningとtikv-importerは、どちらもリソースを大量に消費するプログラムです。それらを 2 台の別々のマシンにデプロイすることをお勧めします。
最高のパフォーマンスを実現するには、次のハードウェア構成を使用することをお勧めします。
tidb-lightning:- 32 以上の論理コア CPU
- データ ソース全体を格納するのに十分な大きさの SSD、より高速な読み取り速度を優先する
- 10 ギガビット ネットワーク カード (300 MB/秒以上で転送可能)
tidb-lightningは、実行時にすべての CPU コアを完全に消費するため、専用のマシンにデプロイすることを強くお勧めします。不可能な場合は、tidb-lightningをtidb-serverなどの他のコンポーネントと一緒にデプロイし、CPU 使用率をregion-concurrency設定で制限することができます。
tikv-importer:- 32 以上の論理コア CPU
- 40 GB 以上のメモリ
- 1 TB+ SSD、より高い IOPS を優先 (≥ 8000 を推奨)
- ディスクは、上位 N 個のテーブルの合計サイズ (
N=max(index-concurrency, table-concurrency)) より大きくする必要があります。
- ディスクは、上位 N 個のテーブルの合計サイズ (
- 10 ギガビット ネットワーク カード (300 MB/秒以上で転送可能)
tikv-importerは、実行時にすべての CPU、ディスク I/O、およびネットワーク帯域幅を完全に消費するため、専用のマシンにデプロイすることを強くお勧めします。
十分な数のマシンがある場合は、複数のtidb lightning + tikv importerサーバーを展開し、それぞれが個別のテーブル セットで動作して、データを並行してインポートできます。
TiDB Lightningを手動でデプロイ
ステップ 1: TiDB クラスターをデプロイする
データをインポートする前に、クラスター バージョン 2.0.9 以降の TiDB クラスターをデプロイする必要があります。最新バージョンを使用することを強くお勧めします。
導入手順はTiDB クイック スタート ガイドにあります。
ステップ 2: TiDB Lightningインストール パッケージをダウンロードする
TiDB エンタープライズ ツールのダウンロード ページを参照して、 TiDB Lightningパッケージをダウンロードします (TiDB クラスターと同じバージョンを選択してください)。
ステップ 3: tikv-importer開始する
インストール パッケージから
bin/tikv-importerをアップロードします。構成する
tikv-importer.toml.# TiKV Importer configuration file template # Log file log-file = "tikv-importer.log" # Log level: trace, debug, info, warn, error, off. log-level = "info" # Listening address of the status server. status-server-address = "0.0.0.0:8286" [server] # The listening address of tikv-importer. tidb-lightning needs to connect to # this address to write data. addr = "0.0.0.0:8287" [import] # The directory to store engine files. import-dir = "/mnt/ssd/data.import/"上記は重要な設定のみを示しています。設定の完全なリストについては、セクションConfiguration / コンフィグレーションを参照してください。
tikv-importerを実行します。nohup ./tikv-importer -C tikv-importer.toml > nohup.out &
ステップ 4: tidb-lightningを開始する
ツール セットから
bin/tidb-lightningとbin/tidb-lightning-ctlをアップロードします。データ ソースを同じマシンにマウントします。
構成する
tidb-lightning.toml.以下のテンプレートに表示されない構成の場合、 TiDB Lightningは構成エラーをログ ファイルに書き込み、終了します。[lightning] # The concurrency number of data. It is set to the number of logical CPU # cores by default. When deploying together with other components, you can # set it to 75% of the size of logical CPU cores to limit the CPU usage. # region-concurrency = # Logging level = "info" file = "tidb-lightning.log" [tikv-importer] # The listening address of tikv-importer. Change it to the actual address. addr = "172.16.31.10:8287" [mydumper] # mydumper local source data directory data-source-dir = "/data/my_database" [tidb] # Configuration of any TiDB server from the cluster host = "172.16.31.1" port = 4000 user = "root" password = "" # Table schema information is fetched from TiDB via this status-port. status-port = 10080上記は重要な設定のみを示しています。設定の完全なリストについては、セクションConfiguration / コンフィグレーションを参照してください。
tidb-lightningを実行します。コマンドラインでコマンドを直接実行すると、SIGHUP シグナルを受信したためにプロセスが終了する場合があります。代わりに、nohupコマンドを含む bash スクリプトを実行することをお勧めします。nohup ./tidb-lightning -config tidb-lightning.toml > nohup.out &