重要
このページは英語版のページを機械翻訳しています。原文はこちらからご覧ください。

TiKVControlユーザーガイド

TiKV Control( tikv-ctl )は、クラスタの管理に使用されるTiKVのコマンドラインツールです。そのインストールディレクトリは次のとおりです。

  • クラスタがTiUPを使用して展開されている場合、 tikv-ctlのディレクトリが~/.tiup/components/ctl/{VERSION}/のディレクトリにあります。

TiUPでTiKVコントロールを使用する

ノート:

使用するコントロールツールのバージョンは、クラスタのバージョンと一致していることをお勧めします。

tikv-ctltiupコマンドにも統合されています。次のコマンドを実行して、 tikv-ctlツールを呼び出します。

tiup ctl tikv
Starting component `ctl`: /home/tidb/.tiup/components/ctl/v4.0.8/ctl tikv
TiKV Control (tikv-ctl)
Release Version:   4.0.8
Edition:           Community
Git Commit Hash:   83091173e960e5a0f5f417e921a0801d2f6635ae
Git Commit Branch: heads/refs/tags/v4.0.8
UTC Build Time:    2020-10-30 08:40:33
Rust Version:      rustc 1.42.0-nightly (0de96d37f 2019-12-19)
Enable Features:   jemalloc mem-profiling portable sse protobuf-codec
Profile:           dist_release

A tool for interacting with TiKV deployments.
USAGE:
    TiKV Control (tikv-ctl) [FLAGS] [OPTIONS] [SUBCOMMAND]
FLAGS:
    -h, --help                    Prints help information
        --skip-paranoid-checks    Skip paranoid checks when open rocksdb
    -V, --version                 Prints version information
OPTIONS:
        --ca-path <ca_path>              Set the CA certificate path
        --cert-path <cert_path>          Set the certificate path
        --config <config>                Set the config for rocksdb
        --db <db>                        Set the rocksdb path
        --decode <decode>                Decode a key in escaped format
        --encode <encode>                Encode a key in escaped format
        --to-hex <escaped-to-hex>        Convert an escaped key to hex key
        --to-escaped <hex-to-escaped>    Convert a hex key to escaped key
        --host <host>                    Set the remote host
        --key-path <key_path>            Set the private key path
        --pd <pd>                        Set the address of pd
        --raftdb <raftdb>                Set the raft rocksdb path
SUBCOMMANDS:
    bad-regions           Get all regions with corrupt raft
    cluster               Print the cluster id
    compact               Compact a column family in a specified range
    compact-cluster       Compact the whole cluster in a specified range in one or more column families
    consistency-check     Force a consistency-check for a specified region
    decrypt-file          Decrypt an encrypted file
    diff                  Calculate difference of region keys from different dbs
    dump-snap-meta        Dump snapshot meta file
    encryption-meta       Dump encryption metadata
    fail                  Inject failures to TiKV and recovery
    help                  Prints this message or the help of the given subcommand(s)
    metrics               Print the metrics
    modify-tikv-config    Modify tikv config, eg. tikv-ctl --host ip:port modify-tikv-config -n
                          rocksdb.defaultcf.disable-auto-compactions -v true
    mvcc                  Print the mvcc value
    print                 Print the raw value
    raft                  Print a raft log entry
    raw-scan              Print all raw keys in the range
    recover-mvcc          Recover mvcc data on one node by deleting corrupted keys
    recreate-region       Recreate a region with given metadata, but alloc new id for it
    region-properties     Show region properties
    scan                  Print the range db range
    size                  Print region size
    split-region          Split the region
    store                 Print the store id
    tombstone             Set some regions on the node to tombstone by manual
    unsafe-recover        Unsafely recover the cluster when the majority replicas are failed

tiup ctl tikvの後に、対応するパラメータとサブコマンドを追加できます。

一般的なオプション

tikv-ctlは、次の2つの動作モードを提供します。

  • リモートモード: --hostオプションを使用して、TiKVのサービスアドレスを引数として受け入れます

    このモードでは、SSLがTiKVで有効になっている場合、 tikv-ctlは関連する証明書ファイルも指定する必要があります。例えば:

    $ tikv-ctl --ca-path ca.pem --cert-path client.pem --key-path client-key.pem --host 127.0.0.1:20160 <subcommands>
    

    ただし、 tikv-ctlがTiKVではなくPDと通信する場合があります。この場合、 --hostではなく--pdオプションを使用する必要があります。次に例を示します。

    $ tikv-ctl --pd 127.0.0.1:2379 compact-cluster
    store:"127.0.0.1:20160" compact db:KV cf:default range:([], []) success!
    
  • ローカルモード: --dbオプションを使用して、ローカルTiKVデータディレクトリパスを指定します。このモードでは、実行中のTiKVインスタンスを停止する必要があります。

特に明記されていない限り、すべてのコマンドはリモートモードとローカルモードの両方をサポートしています。

さらに、 tikv-ctlには2つの簡単なコマンド--to-hex--to-escapedがあり、これらはキーの形式に簡単な変更を加えるために使用されます。

通常、キーのescapedの形式を使用します。例えば:

$ tikv-ctl --to-escaped 0xaaff
\252\377
$ tikv-ctl --to-hex "\252\377"
AAFF

ノート:

コマンドラインでキーのescaped形式を指定する場合は、二重引用符で囲む必要があります。そうしないと、bashがバックスラッシュを食いつぶし、間違った結果が返されます。

サブコマンド、いくつかのオプションとフラグ

このセクションでは、 tikv-ctlがサポートするサブコマンドについて詳しく説明します。一部のサブコマンドは、多くのオプションをサポートしています。詳細については、 tikv-ctl --help <subcommand>を実行してください。

ラフトステートマシンの情報を表示する

raftサブコマンドを使用して、特定の時点でのRaftステートマシンのステータスを表示します。ステータス情報には、3つの構造体( RegionLocalStateRaftLocalState 、およびRegionApplyState )と、特定のログの対応するエントリの2つの部分が含まれます。

regionおよびlogサブコマンドを使用して、それぞれ上記の情報を取得します。 2つのサブコマンドは、両方ともリモートモードとローカルモードを同時にサポートします。それらの使用法と出力は次のとおりです。

$ tikv-ctl --host 127.0.0.1:20160 raft region -r 2
region id: 2
region state key: \001\003\000\000\000\000\000\000\000\002\001
region state: Some(region {id: 2 region_epoch {conf_ver: 3 version: 1} peers {id: 3 store_id: 1} peers {id: 5 store_id: 4} peers {id: 7 store_id: 6}})
raft state key: \001\002\000\000\000\000\000\000\000\002\002
raft state: Some(hard_state {term: 307 vote: 5 commit: 314617} last_index: 314617)
apply state key: \001\002\000\000\000\000\000\000\000\002\003
apply state: Some(applied_index: 314617 truncated_state {index: 313474 term: 151})

リージョンサイズを表示する

sizeコマンドを使用して、リージョンサイズを表示します。

$ tikv-ctl --data-dir /path/to/tikv size -r 2
region id: 2
cf default region size: 799.703 MB
cf write region size: 41.250 MB
cf lock region size: 27616

特定の範囲のMVCCを表示するためにスキャンします

scanコマンドの--fromおよび--toオプションは、2つのエスケープされた形式のrawキーを受け入れ、 --show-cfフラグを使用して、表示する必要のある列ファミリーを指定します。

$ tikv-ctl --data-dir /path/to/tikv scan --from 'zm' --limit 2 --show-cf lock,default,write
key: zmBootstr\377a\377pKey\000\000\377\000\000\373\000\000\000\000\000\377\000\000s\000\000\000\000\000\372
         write cf value: start_ts: 399650102814441473 commit_ts: 399650102814441475 short_value: "20"
key: zmDB:29\000\000\377\000\374\000\000\000\000\000\000\377\000H\000\000\000\000\000\000\371
         write cf value: start_ts: 399650105239273474 commit_ts: 399650105239273475 short_value: "\000\000\000\000\000\000\000\002"
         write cf value: start_ts: 399650105199951882 commit_ts: 399650105213059076 short_value: "\000\000\000\000\000\000\000\001"

特定のキーのMVCCを表示する

scanコマンドと同様に、 mvccコマンドを使用して特定のキーのMVCCを表示できます。

$ tikv-ctl --data-dir /path/to/tikv mvcc -k "zmDB:29\000\000\377\000\374\000\000\000\000\000\000\377\000H\000\000\000\000\000\000\371" --show-cf=lock,write,default
key: zmDB:29\000\000\377\000\374\000\000\000\000\000\000\377\000H\000\000\000\000\000\000\371
         write cf value: start_ts: 399650105239273474 commit_ts: 399650105239273475 short_value: "\000\000\000\000\000\000\000\002"
         write cf value: start_ts: 399650105199951882 commit_ts: 399650105213059076 short_value: "\000\000\000\000\000\000\000\001"

このコマンドでは、キーはエスケープされた形式のrawキーでもあります。

生のキーをスキャンする

raw-scanコマンドは、RocksDBから直接スキャンします。データキーをスキャンするには、キーに'z'のプレフィックスを追加する必要があることに注意してください。

--from--toのオプションを使用して、スキャンする範囲を指定します(デフォルトでは無制限)。印刷するキーの最大数を制限するには、 --limitを使用します(デフォルトでは30)。 --cfを使用して、スキャンするcfを指定します( default 、またはwriteのいずれかにlockます)。

$ ./tikv-ctl --data-dir /var/lib/tikv raw-scan --from 'zt' --limit 2 --cf default
key: "zt\200\000\000\000\000\000\000\377\005_r\200\000\000\000\000\377\000\000\001\000\000\000\000\000\372\372b2,^\033\377\364", value: "\010\002\002\002%\010\004\002\010root\010\006\002\000\010\010\t\002\010\n\t\002\010\014\t\002\010\016\t\002\010\020\t\002\010\022\t\002\010\024\t\002\010\026\t\002\010\030\t\002\010\032\t\002\010\034\t\002\010\036\t\002\010 \t\002\010\"\t\002\010s\t\002\010&\t\002\010(\t\002\010*\t\002\010,\t\002\010.\t\002\0100\t\002\0102\t\002\0104\t\002"
key: "zt\200\000\000\000\000\000\000\377\025_r\200\000\000\000\000\377\000\000\023\000\000\000\000\000\372\372b2,^\033\377\364", value: "\010\002\002&slow_query_log_file\010\004\002P/usr/local/mysql/data/localhost-slow.log"

Total scanned keys: 2

キーの値を出力するには、 printコマンドを使用します。

リージョンの状態の詳細を記録するために、TiKVはリージョンのSSTファイルにいくつかの統計を書き込みます。これらのプロパティを表示するには、 region-propertiesサブコマンドでtikv-ctlを実行します。

$ tikv-ctl --host localhost:20160 region-properties -r 2
num_files: 0
num_entries: 0
num_deletes: 0
mvcc.min_ts: 18446744073709551615
mvcc.max_ts: 0
mvcc.num_rows: 0
mvcc.num_puts: 0
mvcc.num_versions: 0
mvcc.max_row_versions: 0
middle_key_by_approximate_size:

プロパティを使用して、リージョンが正常であるかどうかを確認できます。そうでない場合は、それらを使用してリージョンを修正できます。たとえば、リージョンを手動でmiddle_key_approximate_sizeで分割します。

各TiKVのコンパクトデータを手動で

compactコマンドを使用して、各TiKVのデータを手動で圧縮します。 --fromおよび--toオプションを指定すると、それらのフラグもエスケープされたrawキーの形式になります。

  • --hostオプションを使用して、圧縮を実行する必要があるTiKVを指定します。
  • -dオプションを使用して、圧縮を実行するRocksDBを指定します。オプションの値はkvraftです。
  • --threadsオプションを使用すると、TiKV圧縮の同時実行性を指定でき、デフォルト値は8です。一般に、同時実行性が高いほど圧縮速度が速くなりますが、サービスに影響を与える可能性があります。シナリオに基づいて、適切な同時実行数を選択する必要があります。
  • --bottommostオプションを使用して、TiKVが圧縮を実行するときに最下部のファイルを含めるか除外します。値のオプションはdefault 、およびskip force 。デフォルト値はdefaultです。
    • defaultは、圧縮フィルター機能が有効になっている場合にのみ、最下部のファイルが含まれることを意味します。
    • skipは、TiKVが圧縮を実行するときに最下部のファイルが除外されることを意味します。
    • forceは、TiKVが圧縮を実行するときに、最下部のファイルが常に含まれることを意味します。
$ tikv-ctl --data-dir /path/to/tikv compact -d kv
success!

TiKVクラスタ全体のコンパクトなデータを手動で

compact-clusterコマンドを使用して、TiKVクラスタ全体のデータを手動で圧縮します。このコマンドのフラグは、 compactコマンドのフラグと同じ意味と使用法を持っています。

リージョンをトゥームストーンに設定します

tombstoneコマンドは通常、同期ログが有効になっておらず、電源を切るとRaftステートマシンに書き込まれたデータの一部が失われる状況で使用されます。

TiKVインスタンスでは、このコマンドを使用して、一部のリージョンのステータスをトゥームストーンに設定できます。次に、インスタンスを再起動すると、それらのリージョンはスキップされ、それらのリージョンの破損したRaftステートマシンによって引き起こされる再起動の失敗を回避します。これらのリージョンには、Raftメカニズムを介して読み取りと書き込みを続行できるように、他のTiKVインスタンスに十分な正常なレプリカが必要です。

通常、 remove-peerコマンドを使用して、このリージョンの対応するピアを削除できます。

pd-ctl operator add remove-peer <region_id> <store_id>

次に、 tikv-ctlツールを使用して、対応するTiKVインスタンスのリージョンをトゥームストーンに設定し、起動時にこのリージョンのヘルスチェックをスキップします。

tikv-ctl --data-dir /path/to/tikv tombstone -p 127.0.0.1:2379 -r <region_id>
success!

ただし、場合によっては、このリージョンのこのピアをPDから簡単に削除できないため、 tikv-ctl--forceオプションを指定して、ピアをトゥームストーンに強制的に設定できます。

tikv-ctl --data-dir /path/to/tikv tombstone -p 127.0.0.1:2379 -r <region_id>,<region_id> --force
success!

ノート:

  • tombstoneコマンドは、ローカルモードのみをサポートします。
  • -pオプションの引数は、 httpプレフィックスなしのPDエンドポイントを指定します。 PDエンドポイントを指定することは、PDがTombstoneに安全に切り替えることができるかどうかを照会することです。

TiKVにconsistency-check要求を送信します

consistency-checkコマンドを使用して、特定のリージョンの対応するラフト内のレプリカ間の整合性チェックを実行します。チェックが失敗すると、TiKV自体がパニックになります。 --hostで指定されたTiKVインスタンスがリージョンリーダーでない場合、エラーが報告されます。

$ tikv-ctl --host 127.0.0.1:20160 consistency-check -r 2
success!
$ tikv-ctl --host 127.0.0.1:20161 consistency-check -r 2
DebugClient::check_region_consistency: RpcFailure(RpcStatus { status: Unknown, details: Some("StringError(\"Leader is on store 1\")") })

ノート:

  • consistency-checkコマンドを使用することはお勧めしません。これは、TiDBのガベージコレクションと互換性がなく、誤ってエラーを報告する可能性があるためです。
  • このコマンドは、リモートモードのみをサポートします。
  • このコマンドがsuccess!を返した場合でも、TiKVがパニックになるかどうかを確認する必要があります。これは、このコマンドがリーダーの整合性チェックを要求する提案にすぎず、チェックプロセス全体が成功したかどうかをクライアントから知ることができないためです。

スナップショットメタをダンプ

このサブコマンドは、指定されたパスでスナップショットメタファイルを解析し、結果を出力するために使用されます。

TiKVの起動中にリージョンをチェックしないようにするには、 tombstoneコマンドを使用して、RaftステートマシンがTombstoneにエラーを報告するリージョンを設定します。このコマンドを実行する前に、 bad-regionsコマンドを使用してエラーのあるリージョンを見つけ、自動処理のために複数のツールを組み合わせます。

$ tikv-ctl --data-dir /path/to/tikv bad-regions
all regions are healthy

コマンドが正常に実行されると、上記の情報が出力されます。コマンドが失敗すると、不良リージョンのリストが出力されます。現在、検出できるエラーには、 last indexの不一致、およびapply indexログの損失が含まれcommit index 。スナップショットファイルの損傷などの他の条件については、さらにサポートが必要です。

リージョンのプロパティを表示する

  • /path/to/tikvでデプロイされたTiKVインスタンスのリージョン2のプロパティをローカルで表示するには:

    $ tikv-ctl --data-dir /path/to/tikv/data region-properties -r 2
    
  • 127.0.0.1:20160で実行されているTiKVインスタンスのリージョン2のプロパティをオンラインで表示するには:

    $ tikv-ctl --host 127.0.0.1:20160 region-properties -r 2
    

TiKV構成を動的に変更する

modify-tikv-configコマンドを使用して、構成引数を動的に変更できます。現在、動的に変更できるTiKV構成項目と詳細な変更は、SQLステートメントを使用した構成の変更と一致しています。詳細については、 TiKV構成をオンラインで変更するを参照してください。

  • -nは、構成アイテムのフルネームを指定するために使用されます。オンラインで変更できる構成項目のリストについては、 TiKV構成をオンラインで変更するを参照してください。
  • -vは、構成値を指定するために使用されます。

shared block cacheのサイズを設定します:

tikv-ctl --host ip:port modify-tikv-config -n storage.block-cache.capacity -v 10GB
success

shared block cacheが無効になっている場合、 writeblock cache sizeを設定します。

tikv-ctl --host ip:port modify-tikv-config -n rocksdb.writecf.block-cache-size -v 256MB
success
tikv-ctl --host ip:port modify-tikv-config -n raftdb.defaultcf.disable-auto-compactions -v true
success
tikv-ctl --host ip:port modify-tikv-config -n raftstore.sync-log -v false
success

圧縮率の制限により累積圧縮保留バイトが発生する場合は、 rate-limiter-auto-tunedモードを無効にするか、圧縮フローの上限を設定します。

tikv-ctl --host ip:port modify-tikv-config -n rocksdb.rate-limiter-auto-tuned -v false
success
tikv-ctl --host ip:port modify-tikv-config -n rocksdb.rate-bytes-per-sec -v "1GB"
success

リージョンに複数のレプリカの障害からサービスを回復させる(注意して使用)

unsafe-recover remove-fail-storesコマンドを使用して、障害が発生したマシンをリージョンのピアリストから削除できます。このコマンドを実行する前に、ターゲットTiKVストアのサービスを停止して、ファイルロックを解除する必要があります。

-sオプションは、コンマで区切られた複数のstore_idを受け入れ、 -rフラグを使用して関連するリージョンを指定します。特定のストア内のすべてのリージョンでこの操作を実行する必要がある場合は、 --all-regionsを指定するだけです。

警告
  • 誤操作が発生した場合、クラスタの復旧が困難になる場合があります。潜在的なリスクを認識し、本番環境でこの機能を使用しないようにしてください。
  • --all-regionsオプションを使用する場合、クラスタに接続されている残りのすべてのストアでこのコマンドを実行する必要があります。損傷した店舗を復旧する前に、これらの健全な店舗がサービスの提供を停止していることを確認する必要があります。そうしないと、リージョンレプリカのピアリストに一貫性がないため、 split-regionまたはremove-peerを実行したときにエラーが発生します。これにより、他のメタデータ間の不整合がさらに発生し、最終的にリージョンが使用できなくなります。
  • remove-fail-storesを実行すると、削除されたノードを再起動したり、これらのノードをクラスタに追加したりすることはできません。そうしないと、メタデータに一貫性がなくなり、最終的にリージョンが使用できなくなります。
tikv-ctl --data-dir /path/to/tikv unsafe-recover remove-fail-stores -s 3 -r 1001,1002
success!
tikv-ctl --data-dir /path/to/tikv unsafe-recover remove-fail-stores -s 4,5 --all-regions

次に、TiKVを再起動した後、リージョンは残りの正常なレプリカでサービスを提供し続けることができます。このコマンドは、複数のTiKVストアが破損または削除された場合によく使用されます。

ノート:

  • このコマンドは、指定されたリージョンのピアが配置されているすべてのストアに対して実行する必要があります。
  • このコマンドはローカルモードのみをサポートします。正常に実行されるとsuccess!を出力します。

MVCCデータ破損から回復する

MVCCデータの破損が原因でTiKVが正常に実行できない状況では、 recover-mvccコマンドを使用します。 3つのCF(「デフォルト」、「書き込み」、「ロック」)をクロスチェックして、さまざまな種類の不整合から回復します。

  • -rオプションを使用して、関係するリージョンをregion_idで指定します。
  • -pオプションを使用して、PDエンドポイントを指定します。
$ tikv-ctl --data-dir /path/to/tikv recover-mvcc -r 1001,1002 -p 127.0.0.1:2379
success!

  • このコマンドはローカルモードのみをサポートします。正常に実行されるとsuccess!を出力します。
  • -pオプションの引数は、 httpプレフィックスなしのPDエンドポイントを指定します。 PDエンドポイントを指定することは、指定されたregion_idが検証されているかどうかを照会することです。
  • このコマンドは、指定されたリージョンのピアが配置されているすべてのストアに対して実行する必要があります。

Ldbコマンド

ldbコマンドラインツールは、複数のデータアクセスおよびデータベース管理コマンドを提供します。いくつかの例を以下に示します。詳細については、 tikv-ctl ldbの実行時に表示されるヘルプメッセージを参照するか、RocksDBのドキュメントを確認してください。

データアクセスシーケンスの例:

既存のRocksDBをHEXにダンプするには:

$ tikv-ctl ldb --hex --db=/tmp/db dump

既存のRocksDBのマニフェストをダンプするには:

$ tikv-ctl ldb --hex manifest_dump --path=/tmp/db/MANIFEST-000001

--column_family=<string>コマンドラインを使用して、クエリが対象となる列ファミリーを指定できます。

--try_load_optionsは、データベースオプションファイルをロードしてデータベースを開きます。データベースの実行中は、このオプションを常にオンにしておくことをお勧めします。デフォルトのオプションでデータベースを開くと、LSMツリーが混乱し、自動的に回復できない場合があります。

暗号化メタデータをダンプします

encryption-metaサブコマンドを使用して、暗号化メタデータをダンプします。サブコマンドは、データファイルの暗号化情報と使用されるデータ暗号化キーのリストの2種類のメタデータをダンプできます。

データファイルの暗号化情報をダンプするには、 encryption-meta dump-fileサブコマンドを使用します。 TiKV構成ファイルを作成して、TiKV展開にdata-dirを指定する必要があります。

# conf.toml
[storage]
data-dir = "/path/to/tikv/data"

--pathオプションを使用して、対象のデータファイルへの絶対パスまたは相対パスを指定できます。データファイルが暗号化されていない場合、コマンドは空の出力を提供する可能性があります。 --pathが指定されていない場合、すべてのデータファイルの暗号化情報が出力されます。

$ tikv-ctl --config=./conf.toml encryption-meta dump-file --path=/path/to/tikv/data/db/CURRENT
/path/to/tikv/data/db/CURRENT: key_id: 9291156302549018620 iv: E3C2FDBF63FC03BFC28F265D7E78283F method: Aes128Ctr

データ暗号化キーをダンプするには、 encryption-meta dump-keyサブコマンドを使用します。 data-dirに加えて、構成ファイルで使用されている現在のマスターキーも指定する必要があります。マスターキーの設定方法については、 残りの暗号化を参照してください。また、このコマンドを使用すると、 security.encryption.previous-master-key構成は無視され、マスターキーのローテーションはトリガーされません。

# conf.toml
[storage]
data-dir = "/path/to/tikv/data"

[security.encryption.master-key]
type = "kms"
key-id = "0987dcba-09fe-87dc-65ba-ab0987654321"
region = "us-west-2"

マスターキーがAWSKMSキーの場合、 tikv-ctlはKMSキーにアクセスできる必要があることに注意してください。 AWS KMSキーへのアクセスは、環境変数、AWSデフォルト設定ファイル、またはIAMロールのいずれか適切な方を介してtikv-ctlに付与できます。使用法については、AWSドキュメントを参照してください。

--idsオプションを使用して、印刷するコンマ区切りのデータ暗号化キーIDのリストを指定できます。 --idsが指定されていない場合、すべてのデータ暗号化キーが、最新のアクティブなデータ暗号化キーのIDである現在のキーIDとともに出力されます。

コマンドを使用すると、アクションによって機密情報が公開されることを警告するプロンプトが表示されます。 「同意します」と入力して続行します。

$ ./tikv-ctl --config=./conf.toml encryption-meta dump-key
This action will expose encryption key(s) as plaintext. Do not output the result in file on disk.
Type "I consent" to continue, anything else to exit: I consent
current key id: 9291156302549018620
9291156302549018620: key: 8B6B6B8F83D36BE2467ED55D72AE808B method: Aes128Ctr creation_time: 1592938357
$ ./tikv-ctl --config=./conf.toml encryption-meta dump-key --ids=9291156302549018620
This action will expose encryption key(s) as plaintext. Do not output the result in file on disk.
Type "I consent" to continue, anything else to exit: I consent
9291156302549018620: key: 8B6B6B8F83D36BE2467ED55D72AE808B method: Aes128Ctr creation_time: 1592938357

ノート

このコマンドは、データ暗号化キーをプレーンテキストとして公開します。本番環境では、出力をファイルにリダイレクトしないでください。後で出力ファイルを削除しても、ディスクからコンテンツを完全に消去できない場合があります。

TiKV内の破損したSSTファイルにより、TiKVプロセスがパニックになる可能性があります。破損したSSTファイルをクリーンアップするには、これらのファイルの情報が必要になります。情報を取得するには、TiKVコントロールでbad-sstsコマンドを実行します。必要な情報が出力に表示されます。以下は、コマンドと出力の例です。

ノート:

このコマンドを実行する前に、実行中のTiKVインスタンスを停止してください。

$ tikv-ctl bad-ssts --data-dir </path/to/tikv> --pd <endpoint>
--------------------------------------------------------
corruption info:
data/tikv-21107/db/000014.sst: Corruption: Bad table magic number: expected 9863518390377041911, found 759105309091689679 in data/tikv-21107/db/000014.sst

sst meta:
14:552997[1 .. 5520]['0101' seq:1, type:1 .. '7A7480000000000000FF0F5F728000000000FF0002160000000000FAFA13AB33020BFFFA' seq:2032, type:1] at level 0 for Column family "default"  (ID 0)
it isn't easy to handle local data, start key:0101

overlap region:
RegionInfo { region: id: 4 end_key: 7480000000000000FF0500000000000000F8 region_epoch { conf_ver: 1 version: 2 } peers { id: 5 store_id: 1 }, leader: Some(id: 5 store_id: 1) }

suggested operations:
tikv-ctl ldb --db=data/tikv-21107/db unsafe_remove_sst_file "data/tikv-21107/db/000014.sst"
tikv-ctl --db=data/tikv-21107/db tombstone -r 4 --pd <endpoint>
--------------------------------------------------------
corruption analysis has completed

上記の出力から、破損したSSTファイルの情報が最初に印刷され、次にメタ情報が印刷されていることがわかります。

  • sst metaの部分で、 14はSSTファイル番号を意味します。 552997はファイルサイズを意味し、その後に最小および最大のシーケンス番号とその他のメタ情報が続きます。
  • overlap region部は関係する地域の情報を示しています。この情報は、PDサーバーを介して取得されます。
  • suggested operationsの部分は、破損したSSTファイルをクリーンアップするための提案を提供します。ファイルをクリーンアップしてTiKVインスタンスを再起動するという提案を受け入れることができます。