Graceful Exit
v3.3 以降、StarRocks は Graceful Exit をサポートしています。
概要
Graceful Exit は、StarRocks FE、BE、CN ノードの非破壊的なアップグレードと再起動をサポートするために設計されたメカニズムです。その主な目的は、ノードの再起動、ローリングアップグレード、またはクラスターのスケーリングなどのメンテナンス操作中に、実行中のクエリやデータ取り込みタスクへの影響を最小限に抑えることです。
Graceful Exit は以下を保証します:
- ノードは、終了が始まると新しいタスクの受け入れを停止します。
- 既存のクエリとロードジョブは、制御された時間枠内で完了することが許可されます。
- システムコンポーネント(FE/BE/CN)は、クラスターが正しくトラフィックを再ルーティングするように状態変更を調整します。
Graceful Exit のメカニズムは、FE と BE/CN ノードで異なります。以下に説明します。
FE Graceful Exit メカニズム
トリガーシグナル
FE Graceful Exit は以下で開始されます:
stop_fe.sh -g
これは SIGUSR1 シグナルを送信し、デフォルトの終了(-g オプションなし)は SIGTERM シグナルを送信します。
ロードバランサーの認識
シグナルを受信すると:
- FE は
/api/healthエンドポイントでHTTP 500 を即座に返します。 - ロードバランサーは約15秒以内に劣化状態を検出し、この FE への新しい接続のルーティングを停止します。
接続ドレインとSHUTDOWNロジック
Follower FE
- 読み取り専用クエリを処理します。
- FE ノードにアクティブなセッションがない場合、接続は即座に閉じられます。
- SQL が実行中の場合、FE ノードは実行が終了するのを待ってからセッションを閉じます。
Leader FE
-
読み取りリクエストの処理は、Follower と同じです。
-
書き込みリクエストの処理には以下が必要です:
- BDBJE のクローズ。
- 新しいリーダー選出の完了を許可。
- 後続の書き込みを新しく選出されたリーダーにリダイレクト。
タイムアウト制御
クエリが長時間実行される場合、FE は60秒(--timeout オプションで設定可能)後に強制終了します。
BE/CN Graceful Exit メカニズム
トリガーシグナル
BE Graceful Exit は以下で開始されます:
stop_be.sh -g
CN Graceful Exit は以下で開始されます:
stop_cn.sh -g
これは SIGTERM シグナルを送信し、デフォルトの終了(-g オプションなし)は SIGKILL シグナルを送信します。
状態遷移
シグナルを受信すると:
- BE/CN ノードは自分自身をEXITINGとマークします。
- 新しいクエリフラグメントを拒否し、
INTERNAL_ERRORを返します。 - 既存のフラグメントの処理を続行します。