ディスク障害時、TiDBがどこまで対処できるか検証します
まずはTiDBストレージのコンセプトを理解しないと
ストレージレイヤーのアーキテクチャー
RowベースのTiKVクラスタと、ColumnベースのTiFlashクラスタにより構成されています。
TiKVはKey-Valueのストレージモデルを採用しているようです。
データ保存単位はRegionとStore(これが何かは後で調べようっと)。
※ 引用: https://docs.pingcap.com/tidb/stable/tidb-storage
データはどのように保存されるか
キーワードが二つありました。
- RocksDBをローカルストレージとして採用
- RocksDBは、Facebook社から提供されたOSSのスタンドアロンストレージエンジン
- Raftプロトコルにて複数マシンでレプリケーションを構成
- Raftアルゴリズムを使ってレプリカ管理など行い、マシン障害に備える
※ 引用: https://docs.pingcap.com/tidb/stable/tidb-storage
Region
Regionの中身はこんな感じのようです。
※ 引用: https://docs.pingcap.com/tidb/stable/tidb-storage
分散ACIDトランザクション
TiKVのトランザクションはGoogleのBigTableでも採用されているPercolatorモデルを採用しているとのことです。
これは興味深いので、別途検証してみようと思います。
TiDBストレージの論理構造はわかったが実態はどうよ
実際、TiKVプロセスが開いているファイルやらを確認してみました。
DockerのコンテナIDを確認
$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
17818ffab074 kindest/node:v1.21.1 "/usr/local/bin/entr…" 3 days ago Up 10 minutes 127.0.0.1:50444->6443/tcp kind-control-plane
コンテナIDを指定しログイン
$ docker exec -it 17818ffab074 /bin/bash
lsofコマンドをインストール
root@kind-control-plane:/# apt-get update
root@kind-control-plane:/# apt-get install lsof
tikv-serverのプロセスIDを確認
root@kind-control-plane:/# ps -ef | grep tikv-server | grep -v grep
root 2054 1600 4 13:09 ? 00:00:30 /tikv-server --pd=http://basic-pd:2379 --advertise-addr=basic-tikv-0.basic-tikv-peer.tidb-cluster.svc:20160 --addr=0.0.0.0:20160 --status-addr=0.0.0.0:20180 --advertise-status-addr=basic-tikv-0.basic-tikv-peer.tidb-cluster.svc:20180 --data-dir=/var/lib/tikv --capacity=0 --config=/etc/tikv/tikv.toml
上記プロセスIDを指定しオープンされているファイルを確認
TiDBストレージのディレクトリやファイル構成がなんとなく見えてきました。
- tikv-server: サイズが大きいのでこれがコア部?
- /var/lib/tikv/rocksdb.info: RocksDBの情報がここに記載されている?
- /var/lib/tikv/raftdb.info: Raft関連情報がここに記載されている?
- /var/lib/tikv/raft: MANIFEST、LOCK、.sst, .log などのファイル存在
- /var/lib/tikv/db: MANIFEST、LOCK、.sst, .log などのファイル存在
root@kind-control-plane:/# lsof -p 2054 | egrep 'REG|DIR'
tikv-serv 2054 root cwd DIR 0,442 4096 3148202 /
tikv-serv 2054 root rtd DIR 0,442 4096 3148202 /
tikv-serv 2054 root txt REG 0,442 210685000 3277893 /tikv-server
tikv-serv 2054 root mem REG 254,1 3277893 /tikv-server (stat: No such file or directory)
tikv-serv 2054 root mem REG 254,1 3278505 /usr/glibc-compat/lib/libresolv.so.2 (stat: No such file or directory)
tikv-serv 2054 root mem REG 254,1 3278492 /usr/glibc-compat/lib/libnss_dns.so.2 (stat: No such file or directory)
tikv-serv 2054 root mem REG 254,1 3278495 /usr/glibc-compat/lib/libnss_files.so.2 (stat: No such file or directory)
tikv-serv 2054 root mem REG 254,1 3278091 /lib/ld-musl-x86_64.so.1 (stat: No such file or directory)
tikv-serv 2054 root mem REG 254,1 3278468 /usr/glibc-compat/lib/libc.so.6 (stat: No such file or directory)
tikv-serv 2054 root mem REG 254,1 3278477 /usr/glibc-compat/lib/libm.so.6 (stat: No such file or directory)
tikv-serv 2054 root mem REG 254,1 3278508 /usr/glibc-compat/lib/librt.so.1 (stat: No such file or directory)
tikv-serv 2054 root mem REG 254,1 3278527 /usr/lib/libgcc_s.so.1 (stat: No such file or directory)
tikv-serv 2054 root mem REG 254,1 3278502 /usr/glibc-compat/lib/libpthread.so.0 (stat: No such file or directory)
tikv-serv 2054 root mem REG 254,1 3278474 /usr/glibc-compat/lib/libdl.so.2 (stat: No such file or directory)
tikv-serv 2054 root mem REG 254,1 3278458 /usr/glibc-compat/lib/ld-linux-x86-64.so.2 (stat: No such file or directory)
tikv-serv 2054 root 3w REG 254,1 678326 2756881 /var/lib/tikv/rocksdb.info
tikv-serv 2054 root 4w REG 254,1 318742 2756880 /var/lib/tikv/raftdb.info
tikv-serv 2054 root 21wW REG 0,442 0 3281684 /tmp/0_TIKV_LOCK_FILES/0.0.0.0_20160
tikv-serv 2054 root 22wW REG 254,1 0 2757057 /var/lib/tikv/LOCK
tikv-serv 2054 root 23r DIR 254,1 4096 2757055 /var/lib/tikv/raft
tikv-serv 2054 root 24uW REG 254,1 0 2757058 /var/lib/tikv/raft/LOCK
tikv-serv 2054 root 25r REG 254,1 10930 2756875 /var/lib/tikv/raft/000007.sst
tikv-serv 2054 root 26r REG 254,1 96153 2757039 /var/lib/tikv/raft/000004.sst
tikv-serv 2054 root 27r DIR 254,1 4096 2757055 /var/lib/tikv/raft
tikv-serv 2054 root 28r REG 254,1 13329 2756872 /var/lib/tikv/raft/000010.sst
tikv-serv 2054 root 29w REG 254,1 231 2756873 /var/lib/tikv/raft/MANIFEST-000011
tikv-serv 2054 root 30w REG 254,1 50729 2756877 /var/lib/tikv/raft/000012.log
tikv-serv 2054 root 31r DIR 254,1 4096 2757070 /var/lib/tikv/db
tikv-serv 2054 root 32uW REG 254,1 0 2757071 /var/lib/tikv/db/LOCK
tikv-serv 2054 root 33r REG 254,1 570495 2757224 /var/lib/tikv/db/000012.sst
tikv-serv 2054 root 34r REG 254,1 17583 2756908 /var/lib/tikv/db/000023.sst
tikv-serv 2054 root 35r REG 254,1 137932 2757227 /var/lib/tikv/db/000015.sst
tikv-serv 2054 root 37r DIR 254,1 4096 2757070 /var/lib/tikv/db
tikv-serv 2054 root 38r DIR 254,1 4096 2757070 /var/lib/tikv/db
tikv-serv 2054 root 39r DIR 254,1 4096 2757070 /var/lib/tikv/db
tikv-serv 2054 root 40r DIR 254,1 4096 2757070 /var/lib/tikv/db
tikv-serv 2054 root 41w REG 254,1 1037 2756878 /var/lib/tikv/db/MANIFEST-000030
tikv-serv 2054 root 43r REG 254,1 23367 2757256 /var/lib/tikv/db/000032.sst
tikv-serv 2054 root 45w REG 254,1 31332 2757258 /var/lib/tikv/db/000034.log
tikv-serv 2054 root 46r REG 254,1 3401 2756910 /var/lib/tikv/db/000037.sst
終わりに
TiDBストレージ検証の準備として、関連構成を確認できました。
各ファイルの機能など詳細まで理解できていませんが、徐々に理解を深めていきます。
次回は取り敢えず、データ破壊しどうなるか見てみます。お楽しみに。