バックエンドの廃止
説明
このステートメントは、クラスターからBEノードを安全に廃止するために使用されます。この操作は非同期です。
構文
ALTER SYSTEM DECOMMISSION BACKEND "<be_identifier>" [, "<be_identifier>" ... ]
条件:
be_identifier
: "<be_host>:<be_heartbeat_port>"
| "<backend_id>"
必須パラメータ
1. <be_host>
BE ノードのホスト名またはIPアドレスを指定できます。
2. <heartbeat_port>
BE ノードのハートビートポートです。デフォルトは9050です。
3. <backend_id>
BE ノードのIDです。
ヒント
<be_host>、<be_heartbeat_port>、および<backend_id>は、すべてSHOW BACKENDSステートメントでクエリして取得できます。
アクセス制御要件
このSQLを実行するユーザーは、少なくとも以下の権限を持つ必要があります:
| 権限 | オブジェクト | 備考 |
|---|---|---|
| NODE_PRIV |
使用上の注意
- このコマンドを実行した後、SHOW BACKENDSステートメントを使用して、デコミッショニングステータス(
SystemDecommissioned列の値がtrue)とデコミッショニング進捗(TabletNum列の値が徐々に0まで減少)を確認できます。 - 通常の状況では、
TabletNum列の値が0まで減少した後、このBEノードは削除されます。DorisがBEを自動削除することを望まない場合は、FE Masterの設定drop_backend_after_decommissionをfalseに変更できます。 - 現在のBEが比較的大量のデータを保存している場合、DECOMMISSION操作は数時間または数日間続く可能性があります。
- DECOMMISSION操作の進捗が停滞した場合、具体的にはSHOW BACKENDSステートメントの
TabletNum列が特定の値で固定されている場合、以下の状況が原因である可能性があります:- 現在のBE上のタブレットを移行するのに適した他のBEが存在しない。例えば、3レプリカのテーブルがある3ノードクラスターで、そのうちの1つのノードをデコミッションする場合、このノードは他のBEにデータを移行できません(他の2つのBEにはすでにそれぞれ1つのレプリカが存在するため)。
- 現在のBE上のタブレットがまだごみ箱にある。ごみ箱を空にしてからデコミッションを待つことができます。
- 現在のBE上のタブレットが大きすぎるため、単一のタブレットの移行が常にタイムアウトし、このタブレットを移行できない。FE Masterの設定
max_clone_task_timeout_secをより大きな値に調整できます(デフォルトは7200秒)。 - 現在のBEのタブレット上に未完了のトランザクションがある。トランザクションの完了を待つか、手動でトランザクションを中止できます。
- その他の場合、FE Masterのログで
replicas to decommissionキーワードをフィルタリングして異常なタブレットを見つけ、SHOW TABLETステートメントを使用してこのタブレットが属するテーブルを見つけ、新しいテーブルを作成し、古いテーブルから新しいテーブルにデータを移行し、最後にDROP TABLE FORCEを使用して古いテーブルを削除できます。
例
-
BEのHostとHeartbeatPortに従って、クラスターから2つのノードを安全にデコミッションする。
ALTER SYSTEM DECOMMISSION BACKEND "192.168.0.1:9050", "192.168.0.2:9050"; -
BEのIDに従って、クラスターからノードを安全に廃止します。
ALTER SYSTEM DECOMMISSION BACKEND "10002";