TiFlashクラスタのトラブルシューティング
このセクションでは、 TiFlash の使用時によく発生する問題、その理由、および解決策について説明します。
TiFlash が起動できない
この問題はさまざまな理由で発生する可能性があります。以下の手順に従ってトラブルシューティングを行うことをお勧めします。
システムが RedHat Enterprise Linux 8 であるかどうかを確認します。
RedHat Enterprise Linux 8 には
libnsl.soシステム ライブラリがありません。次のコマンドを使用して手動でインストールできます。dnf install libnslシステムの
ulimitパラメータ設定を確認してください。ulimit -n 1000000PD Controlツールを使用して、ノード (同じ IP およびポート) 上でオフラインにできなかったTiFlashインスタンスがあるかどうかを確認し、インスタンスを強制的にオフラインにします。詳細な手順については、 TiFlashクラスターでのスケールインを参照してください。
上記の方法で問題を解決できない場合は、PingCAP またはコミュニティからTiFlashログ ファイルと支持を得ますを保存してください。
TiFlashレプリカは常に利用できない
これは、設定エラーや環境の問題によりTiFlashが異常な状態にあるためです。障害のあるコンポーネントを特定するには、次の手順を実行します。
PD が
Placement Rules機能を有効にしているかどうかを確認します。echo 'config show replication' | /path/to/pd-ctl -u http://${pd-ip}:${pd-port}trueが返された場合は、次のステップに進みます。falseが返された場合は配置ルール機能を有効にする返し、次のステップに進みます。
TiFlash - Summary モニタリング パネルの
UpTimeを表示して、 TiFlashプロセスが正しく動作しているかどうかを確認します。TiFlashプロキシのステータスが正常であるかどうかを
pd-ctlまで確認します。echo "store" | /path/to/pd-ctl -u http://${pd-ip}:${pd-port}TiFlashプロキシの
store.labels{"key": "engine", "value": "tiflash"}などの情報が含まれます。この情報をチェックして、 TiFlashプロキシを確認できます。pd buddyがログを正しく出力できるかどうかを確認します (ログ パスは、[flash.flash_cluster] 構成項目の値logです。デフォルトのログ パスは、 TiFlash構成ファイルで構成されているtmpディレクトリの下にあります)。構成されたレプリカの数がクラスター内の TiKV ノードの数以下であるかどうかを確認します。そうでない場合、PD はデータをTiFlashに複製できません。
echo 'config placement-rules show' | /path/to/pd-ctl -u http://${pd-ip}:${pd-port}default: countの値を再確認します。注記:
- 配置ルールが有効で複数のルールが存在する場合、以前に構成された
max-replicas、location-labels、およびisolation-level有効になりません。レプリカ ポリシーを調整するには、配置ルールに関連するインターフェイスを使用します。 - 配置ルールが有効で、デフォルト ルールが 1 つだけ存在する場合、TiDB は、 
max-replicas、location-labels、またはisolation-level構成が変更されると、このデフォルト ルールを自動的に更新します。 
- 配置ルールが有効で複数のルールが存在する場合、以前に構成された
 マシン ( TiFlashノードの
store存在する) の残りのディスク容量が十分であるかどうかを確認します。デフォルトでは、残りのディスク容量がstore容量 (low-space-ratioパラメータで制御される) の 20% 未満の場合、PD はこのTiFlashノードにデータをスケジュールできません。
一部のクエリはRegion Unavailableエラーを返します
TiFlashの負荷が重すぎて、 TiFlashデータ レプリケーションが遅れる場合、一部のクエリでRegion Unavailableエラーが返されることがあります。
この場合、 TiFlashノードをさらに追加することで負荷圧力のバランスをとることができます。
データファイルの破損
データ ファイルの破損に対処するには、次の手順を実行します。
- 対応するTiFlashノードを停止するには、 TiFlashノードを停止しますを参照してください。
 - TiFlashノードの関連データを削除します。
 - クラスターにTiFlashノードを再デプロイします。
 
TiFlash解析が遅い
MPP モードでサポートされていない演算子または関数がステートメントに含まれている場合、TiDB は MPP モードを選択しません。したがって、声明の分析は遅くなります。この場合、 EXPLAINステートメントを実行して、MPP モードでサポートされていない演算子または関数を確認できます。
create table t(a datetime);
alter table t set tiflash replica 1;
insert into t values('2022-01-13');
set @@session.tidb_enforce_mpp=1;
explain select count(*) from t where subtime(a, '12:00:00') > '2022-01-01' group by a;
show warnings;
この例では、TiDB 5.4 以前のバージョンではsubtime機能がサポートされていないため、TiDB が MPP モードを選択しないことを警告メッセージが示しています。
+---------+------+-----------------------------------------------------------------------------+
> | Level   | Code | Message                                                                     |
+---------+------+-----------------------------------------------------------------------------+
| Warning | 1105 | Scalar function 'subtime'(signature: SubDatetimeAndString, return type: datetime) is not supported to push down to tiflash now.       |
+---------+------+-----------------------------------------------------------------------------+
データはTiFlashにレプリケートされません
TiFlashノードをデプロイし、(ALTER 操作を実行して) レプリケーションを開始した後、データはそこにレプリケートされません。この場合、次の手順に従って問題を特定して対処できます。
ALTER table <tbl_name> set tiflash replica <num>コマンドを実行してレプリケーションが成功したかどうかを確認し、出力を確認します。- 出力がある場合は、次のステップに進みます。
 - 出力がない場合は、 
SELECT * FROM information_schema.tiflash_replicaコマンドを実行して、 TiFlashレプリカが作成されたかどうかを確認します。そうでない場合は、ALTER table ${tbl_name} set tiflash replica ${num}コマンドを再度実行し、他のステートメント (たとえば、add index) が実行されたかどうかを確認するか、DDL の実行が成功したかどうかを確認します。 
TiFlashリージョンのレプリケーションが正しく実行されているかどうかを確認します。
progressに変更があるかどうかを確認します。- 「はい」の場合、 TiFlashレプリケーションは正しく実行されます。
 - 「いいえ」の場合、 TiFlashレプリケーションは異常です。 
tidb.logで、Tiflash replica is not availableというログを検索します。該当テーブルのprogress更新されているか確認してください。そうでない場合は、tiflash logで詳細を確認してください。たとえば、tiflash logのうちlag_region_info検索して、どのリージョンが遅れているかを確認します。 
pd-ctlを使用して配置ルール機能が有効になっているかどうかを確認します。
echo 'config show replication' | /path/to/pd-ctl -u http://<pd-ip>:<pd-port>trueが返された場合は、次のステップに進みます。falseが返された場合は配置ルール機能を有効にする返し、次のステップに進みます。
max-replicas構成が正しいかどうかを確認します。値
max-replicasがクラスター内の TiKV ノードの数を超えない場合は、次のステップに進みます。値
max-replicasがクラスター内の TiKV ノードの数より大きい場合、PD はデータをTiFlashノードに複製しません。この問題に対処するには、max-replicasクラスター内の TiKV ノードの数以下の整数に変更します。
注記:
max-replicasのデフォルトは 3 です。本番環境では、この値は通常、TiKV ノードの数よりも少なくなります。テスト環境では、値を 1 にすることができます。curl -X POST -d '{ "group_id": "pd", "id": "default", "start_key": "", "end_key": "", "role": "voter", "count": 3, "location_labels": [ "host" ] }' <http://172.16.x.xxx:2379/pd/api/v1/config/rule>TiDB がテーブルの配置ルールを作成したかどうかを確認します。
TiDB DDL Owner のログを検索し、TiDB が PD に配置ルールを追加するように通知したかどうかを確認します。パーティション化されていないテーブルの場合は、
ConfigureTiFlashPDForTableを検索します。パーティション化されたテーブルの場合は、ConfigureTiFlashPDForPartitions検索します。- キーワードが見つかった場合は、次のステップに進みます。
 - そうでない場合は、トラブルシューティングのために対応するコンポーネントのログを収集します。
 
PD がテーブルの配置ルールを設定しているかどうかを確認します。
curl http://<pd-ip>:<pd-port>/pd/api/v1/config/rules/group/tiflashコマンドを実行して、現在の PD 上のすべてのTiFlash配置ルールを表示します。 ID がtable-<table_id>-rルールが見つかった場合、PD は配置ルールを正常に構成しました。PD が適切にスケジュールを設定しているかどうかを確認します。
pd.logファイルでtable-<table_id>-rキーワードを検索し、add operatorのような動作をスケジュールします。- キーワードが見つかった場合、PD は適切にスケジュールを設定します。
 - そうでない場合、PD は適切にスケジュールを設定しません。
 
データレプリケーションが停止する
TiFlash上のデータ レプリケーションが正常に開始された後、一定期間経過してもすべてまたは一部のデータがレプリケートされない場合は、次の手順を実行して問題を確認または解決できます。
ディスク容量を確認してください。
ディスク容量比率が
low-space-ratioの値より大きいかどうかを確認します (デフォルトは 0.8。ノードの容量使用率が 80% を超えると、ディスク容量の枯渇を避けるために、PD はこのノードへのデータの移行を停止します)。- ディスク使用率が値
low-space-ratio以上の場合、ディスク容量が不足しています。ディスク容量を確保するには、${data}/flash/フォルダ配下の不要なファイルspace_placeholder_fileなどを削除します (必要に応じて、ファイルを削除した後、reserve-spaceを 0MB に設定します)。 - ディスク使用率が値
low-space-ratio未満の場合、ディスク容量は十分です。次のステップに進みます。 
- ディスク使用率が値
 down peerがあるかどうかを確認します (down peerあるとレプリケーションが停止する可能性があります)。pd-ctl region check-down-peerコマンドを実行して、down peerがあるかどうかを確認します。存在する場合は、pd-ctl operator add remove-peer <region-id> <tiflash-store-id>コマンドを実行して削除します。
データのレプリケーションが遅い
原因はさまざまです。次の手順を実行することで問題に対処できます。
レプリケーションを高速化するには、
store limitを増やします。TiFlashの負荷を調整します。
TiFlashの負荷が高すぎると、レプリケーションが遅くなる可能性があります。 TiFlashインジケーターの負荷は、Grafana のTiFlash- Summaryパネルで確認できます。
Applying snapshots Count:TiFlash-summary>raft>Applying snapshots CountSnapshot Predecode Duration:TiFlash-summary>raft>Snapshot Predecode DurationSnapshot Flush Duration:TiFlash-summary>raft>Snapshot Flush DurationWrite Stall Duration:TiFlash-summary>Storage Write Stall>Write Stall Durationgenerate snapshot CPU:TiFlash-Proxy-Details>Thread CPU>Region task worker pre-handle/generate snapshot CPU
サービスの優先順位に基づいて負荷を調整し、最適なパフォーマンスを実現します。