メタデータのリカバリー
このトピックでは、FE ノードがさまざまな例外に遭遇した場合に、StarRocks クラスター内のメタデータをリカバリーする方法について説明します。
一般的に、次のいずれかの問題が発生した場合にのみ、メタデータのリカバリーを行う必要があります。
遭遇した問題を確認し、対応するセクションで提供されている解決策に従い、推奨されるアクションを実行してください。
FE が再起動に失敗する
FE ノードは、メタデータが破損しているか、ロールバック後にクラスターと互換性がない場合に再起動に失敗することがあります。
ロールバック後のメタデータの非互換性
StarRocks クラスターをダウングレードする際、メタデータがダウングレード前と互換性がない場合、FEs は再起動に失敗することがあります。
クラスターをダウングレードする際に次の例外が発生した場合、この問題を特定できます。
UNKNOWN Operation Type xxx
次の手順に従ってメタデータをリカバリーし、FE を起動できます。
-
すべての FE ノードを停止します。
-
すべての FE ノードのメタデータディレクトリ
meta_dirをバックアップします。 -
すべての FE ノードの設定ファイル fe.conf に設定
metadata_ignore_unknown_operation_type = trueを追加します。 -
すべての FE ノードを起動し、データとメタデータが完全であるか確認します。
-
データとメタデータが完全である場合、次のステートメントを実行してメタデータのイメージファイルを作成します。
ALTER SYSTEM CREATE IMAGE; -
新しいイメージファイルがすべての FE ノードのディレクトリ meta/image に転送された後、すべての FE 設定ファイルから設定
metadata_ignore_unknown_operation_type= trueを削除し、FE ノードを再起動します。
メタデータの破損
BDBJE メタデータと StarRocks メタデータの両方の破損は、再起動の失敗を引き起こします。
BDBJE メタデータの破損
VLSN バグ
次のエラーメッセージに基づいて VLSN バグを特定できます。
recoveryTracker should overlap or follow on disk last VLSN of 6,684,650 recoveryFirst= 6,684,652 UNEXPECTED_STATE_FATAL: Unexpected internal state, unable to continue. Environment is invalid and must be closed.
次の手順に従ってこの問題を修正できます。
-
この例外を投げる FE ノードのメタデータディレクトリ
meta_dirをクリア します。 -
Leader FE ノードをヘルパーとして使用して FE ノードを再起動します。
# <leader_ip> を Leader FE ノードの IP アドレス (priority_networks) に置き換え、
# <leader_edit_log_port> (デフォルト: 9010) を Leader FE ノードの edit_log_port に置き換えます。
./fe/bin/start_fe.sh --helper <leader_ip>:<leader_edit_log_port> --daemon
- このバグは StarRocks v3.1 で修正されています。この問題を回避するには、クラスターを v3.1 以降にアップグレードしてください。
- この解決策は、FE ノードの半数以上がこの問題に遭遇した場合には適用できません。最後の手段 に従って問題を修正する必要があります。
RollbackException
次のエラーメッセージに基づいてこの問題を特定できます。
must rollback 1 total commits(1 of which were durable) to the earliest point indicated by transaction id=-14752149 time=2022-01-12 14:36:28.21 vlsn=28,069,415 lsn=0x1174/0x16e durable=false in order to rejoin the replication group. All existing ReplicatedEnvironment handles must be closed and reinstantiated. Log files were truncated to file 0x4467, offset 0x269, vlsn 28,069,413 HARD_RECOVERY: Rolled back past transaction commit or abort. Must run recovery by re-opening Environment handles Environment is invalid and must be closed.
この問題は、Leader FE ノードが BDBJE メタデータを書き込むが、ハングする前に Follower FE ノードに同期できない場合に発生します。再起動後、元の Leader は Follower になり、メタデータが破損します。
この問題を解決するには、このノードを再起動して不正なメタデータを消去するだけです。
ReplicaWriteException
FE ログ fe.log からキーワード removeReplicaDb に基づいてこの問題を特定できます。
Caused by: com.sleepycat.je.rep.ReplicaWriteException: (JE 18.3.16) Problem closing transaction 25000090. The current state is:REPLICA. The node transitioned to this state at:Fri Feb 23 01:31:00 UTC 2024 Problem seen replaying entry NameLN_TX/14 vlsn=1,902,818,939 isReplicated="1" txn=-953505106 dbop=REMOVE Originally thrown by HA thread: REPLICA 10.233.132.23_9010_1684154162022(6)
at com.sleepycat.je.rep.txn.ReadonlyTxn.disallowReplicaWrite(ReadonlyTxn.java:114) ~[starrocks-bdb-je-18.3.16.jar:?]
at com.sleepycat.je.dbi.DbTree.checkReplicaWrite(DbTree.java:880) ~[starrocks-bdb-je-18.3.16.jar:?]
at com.sleepycat.je.dbi.DbTree.doCreateDb(DbTree.java:579) ~[starrocks-bdb-je-18.3.16.jar:?]
at com.sleepycat.je.dbi.DbTree.createInternalDb(DbTree.java:507) ~[starrocks-bdb-je-18.3.16.jar:?]
at com.sleepycat.je.cleaner.ExtinctionScanner.openDb(ExtinctionScanner.java:357) ~[starrocks-bdb-je-18.3.16.jar:?]
at com.sleepycat.je.cleaner.ExtinctionScanner.prepareForDbExtinction(ExtinctionScanner.java:1703) ~[starrocks-bdb-je-18.3.16.jar:?]
at com.sleepycat.je.dbi.DbTree.doRemoveDb(DbTree.java:1208) ~[starrocks-bdb-je-18.3.16.jar:?]
at com.sleepycat.je.dbi.DbTree.removeReplicaDb(DbTree.java:1261) ~[starrocks-bdb-je-18.3.16.jar:?]
at com.sleepycat.je.rep.impl.node.Replay.applyNameLN(Replay.java:996) ~[starrocks-bdb-je-18.3.16.jar:?]
at com.sleepycat.je.rep.impl.node.Replay.replayEntry(Replay.java:722) ~[starrocks-bdb-je-18.3.16.jar:?]
at com.sleepycat.je.rep.impl.node.Replica$ReplayThread.run(Replica.java:1225) ~[starrocks-bdb-je-18.3.16.jar:?]
この問題は、失敗した FE ノードの BDBJE バージョン (v18.3.*) が Leader FE ノードのバージョン (v7.3.7) と一致しない場合に発生します。
次の手順に従ってこの問題を修正できます。
-
失敗した Follower または Observer ノードを削除します。
-- Follower ノードを削除するには、<follower_host> を Follower ノードの IP アドレス (priority_networks) に置き換え、
-- <follower_edit_log_port> (デフォルト: 9010) を Follower ノードの edit_log_port に置き換えます。
ALTER SYSTEM DROP FOLLOWER "<follower_host>:<follower_edit_log_port>";
-- Observer ノードを削除するには、<observer_host> を Observer ノードの IP アドレス (priority_networks) に置き換え、
-- <observer_edit_log_port> (デフォルト: 9010) を Observer ノードの edit_log_port に置き換えます。
ALTER SYSTEM DROP OBSERVER "<observer_host>:<observer_edit_log_port>"; -
失敗したノードをクラスターに再追加します。
-- Follower ノードを追加します。
ALTER SYSTEM ADD FOLLOWER "<follower_host>:<follower_edit_log_port>";
-- Observer ノードを追加します。
ALTER SYSTEM ADD OBSERVER "<observer_host>:<observer_edit_log_port>"; -
失敗したノードのメタデータディレクトリ
meta_dirをクリアします。 -
Leader FE ノードをヘルパーとして使用して失敗したノードを再起動します。
# <leader_ip> を Leader FE ノードの IP アドレス (priority_networks) に置き換え、
# <leader_edit_log_port> (デフォルト: 9010) を Leader FE ノードの edit_log_port に置き換えます。
./fe/bin/start_fe.sh --helper <leader_ip>:<leader_edit_log_port> --daemon -
失敗したノードが正常な状態に回復した後、クラスター内の BDBJE パッケージを starrocks-bdb-je-18.3.16.jar にアップグレードする必要があります (または StarRocks クラスターを v3.0 以降にアップグレードします)。この際、まず Follower を、次に Leader をアップグレードします。
InsufficientLogException
次のエラーメッセージに基づいてこの問題を特定できます。
xxx INSUFFICIENT_LOG: Log files at this node are obsolete. Environment is invalid and must be closed.
この問題は、Follower ノードが完全なメタデータ同期を必要とする場合に発生します。次のいずれかの状況が発生した場合に発生する可能性があります。
- Follower ノードのメタデータが Leader ノードのメタデータよりも遅れており、Leader ノードがすでにメタデータのチェックポイントを実行している場合。Follower ノードはメタデータの増分更新を実行できず、完全なメタデータ同期が必要です。
- 元の Leader ノードがメタデータを書き込み、チェックポイントを実行しますが、ハングする前に Follower FE ノードに同期できません。再起動後、Follower ノードになります。不正なメタデータがチェックポイントされているため、Follower ノードはメタデータの増分削除を実行できず、完全なメタデータ同期が必要です。
この例外は、新しい Follower ノードがクラスターに追加されたときにスローされます。この場合、何もアクションを取る必要はありません。この例外が既存の Follower ノードまたは Leader ノードに対してスローされた場合、ノードを再起動するだけで問題を解決できます。