クロスゾーン高可用性 (HA) 機能は、単一のアベイラビリティーゾーンの障害によるサービス中断を防ぎ、ビジネスの安定性を確保します。このトピックでは、クロスゾーン HA の使用方法と、クロスゾーン CU の課金を停止する方法について説明します。
仕組み
Realtime Compute for Apache Flink のワークスペースは、CU で測定される 2 種類の計算リソース、[シングルゾーン] と [クロスゾーン] をサポートしています。これらの CU タイプは、シングルゾーン名前空間とクロスゾーン名前空間に対応します。以下に、2 種類の名前空間の違いを説明します。
-
[シングルゾーン] 名前空間では、Realtime Compute for Apache Flink は選択されたリージョン内で最適なコンピューティングアベイラビリティーゾーンを割り当てます。同一リージョン内のアベイラビリティーゾーンは、内部ネットワークを介して相互接続されています。コンピューティングレイヤーは、アベイラビリティーゾーン間でリソースを透過的にスケジュールし、在庫をプールしてリソースの弾力性と負荷分散を向上させます。
-
[クロスゾーン] 名前空間は、クロスゾーン HA を提供します。ジョブが実行されているアベイラビリティーゾーンで障害が発生した場合、ジョブは自動的に同一リージョン内の安定したアベイラビリティーゾーンにフェイルオーバーします。この設計により、単一のアベイラビリティーゾーンの障害によるサービス中断が防止され、ジョブの高可用性が確保されます。
基本概念
|
概念 |
説明 |
|
ゾーン |
リージョン内の物理的なエリアで、電源とネットワークが独立しています。リージョン内のゾーンは、低遅延のネットワークで相互接続されています。 |
|
目標復旧時点 (RPO) |
障害発生時に許容されるデータ損失の最大量です。Flink のクロスゾーンモードでは、チェックポイントの状態はゾーン冗長 OSS ストレージに永続化されるため、RPO はデータ整合性と一貫性を保証する OSS ゾーン冗長ストレージの RPO と同等になります。 |
|
目標復旧時間 (RTO) |
障害発生後にサービスを回復するために必要な時間です。Flink のクロスゾーンモードでは、RTO は分単位であり、JobManager のスイッチオーバー、リソース割り当て、状態の回復、データリプレイが含まれます。 |
|
JobManager |
ジョブのスケジューリング、チェックポイントの調整、リソース管理を担当する Flink のコントロールノードです。クロスゾーンデプロイでは、アクティブ/スタンバイモードで実行されます。 |
|
TaskManager |
オペレータータスクの実行とランタイム状態の保存を担当する Flink の計算ノードです。 |
|
チェックポイント |
障害回復のためにジョブの状態を外部ストレージ (OSS) に永続化する Flink の定期的な状態スナップショットメカニズムです。 |
|
状態バックエンド |
Flink の状態ストレージエンジンです。増分状態スナップショットは、チェックポイント時にリモートストレージに書き込まれます。 |
障害回復メカニズム
Flink は、チェックポイントと自動障害回復メカニズムを使用して、ゾーンで障害が発生したときにジョブが自動的に回復することを保証します。
-
チェックポイントの永続化:ジョブの実行中、状態スナップショットは定期的に OSS (ゾーン冗長ストレージ) に非同期で書き込まれるため、ゾーンで障害が発生しても状態データは失われません。
-
JobManager のアクティブ/スタンバイスイッチオーバー:アクティブな JobManager で障害が発生すると、スタンバイの JobManager が ZooKeeper を介して新しいリーダーとして選出され、ジョブ管理を引き継ぎます。
-
TaskManager の再スケジューリング:障害が発生したゾーンの TaskManager が失われた後、ResourceManager は残りのゾーンで新しい TaskManager をリクエストし、影響を受けたタスクを再スケジュールします。
-
状態の回復:新しくスケジュールされた TaskManager は、最新のチェックポイントから状態を復元します。RocksDB 状態バックエンドは増分回復をサポートしており、回復時間を短縮します。
-
データリプレイ:リプレイ可能なデータソース (Kafka など) を使用すると、チェックポイントに記録されたオフセットから消費が再開され、exactly-once セマンティクスが維持され、データの損失や重複がなくなります。
障害シナリオと回復
シングルゾーン障害
ゾーンで障害が発生した場合、Flink は次のように処理します。
-
障害検出:JobManager は、障害が発生したゾーンからの TaskManager のハートビートがタイムアウトしたことを検出し、それらのノードを利用不可としてマークします。
-
JobManager のスイッチオーバー:アクティブな JobManager が障害の発生したゾーンにあった場合、スタンバイの JobManager が移行され、起動します。
-
タスクの再スケジューリング:ResourceManager は、残りのゾーンで新しい TaskManager リソースをリクエストし、影響を受けたタスクを再スケジュールします。
-
状態の回復:新しい TaskManager は、最新のチェックポイントからジョブの状態を復元します。
-
データリプレイ:ソースはチェックポイントのオフセットから (例えば Kafka から) 消費を再開し、処理を続行します。
-
クライアントの透過性:Flink ジョブのソースとシンクは、アップストリームおよびダウンストリームシステムに自動的に再接続するため、回復プロセスはそれらに対して透過的です。
回復メトリック:
|
メトリック |
値 |
|
RPO (データ損失) |
0 (チェックポイントの状態はゾーン冗長 OSS ストレージに永続化されるため、RPO はデータ整合性と一貫性を保証する OSS ゾーン冗長ストレージの RPO と同等になります。) |
|
RTO (サービス回復時間) |
分単位 (1〜10 分、状態のサイズとチェックポイントの間隔に依存します) |
注意事項
-
エンドツーエンドの高可用性を実現するには、アップストリームおよびダウンストリームシステムも高可用性である必要があります。
-
Realtime Compute for Apache Flink が外部のアップストリームおよびダウンストリームシステムにゾーンをまたいでアクセスする場合、ミリ秒レベルの遅延が発生する可能性があります。サービスレベルアグリーメント (SLA) は、アベイラビリティーゾーン間のネットワーク遅延が 3 ms 以内であることを保証します。詳細については、「リージョン内のアベイラビリティーゾーン間の平均ネットワーク遅延」をご参照ください。この遅延は、Tair を除くほとんどのアップストリームおよびダウンストリームシステムで許容範囲内です。ビジネスの遅延要件を評価して、クロスゾーン HA を有効にするかどうかを判断することを推奨します。
-
ハイブリッド課金のワークスペースでクロスゾーン HA を有効にすると、障害発生時にサブスクリプションリソース上のジョブの移行と回復が優先されます。従量課金の計算リソース上のジョブについては、追加料金なしでベストエフォート型の回復が試みられます。
リージョンと課金
現在、[クロスゾーン] 計算リソースの購入をサポートしているのは、Intel X86 アーキテクチャと [サブスクリプション] 課金方法 (ハイブリッド課金を含む) を使用するワークスペースのみです。これらのリソースは、[シングルゾーン] リソースより高価です。対応リージョンと料金の詳細については、「サブスクリプション」をご参照ください。
ワークスペースが従量課金方法を使用している場合は、まずサブスクリプションに切り替え、次に方法 2 と 方法 3 をご参照ください。
[クロスゾーン] デプロイモードのワークスペースを従量課金方法に変更することはできません。
クロスゾーン HA の有効化と使用
方法 1:ワークスペース作成時にクロスゾーン名前空間を作成する
-
Realtime Compute for Apache Flink ワークスペースを作成する際に、クロスゾーン名前空間を自動的に作成できます。
Intel X86 アーキテクチャと[サブスクリプション] 課金方法を使用するワークスペースの場合、[デプロイモード] を [クロスゾーン] に設定し、[クロスゾーン] CU タイプの [コンピューティングリソースクォータ] を指定し、2 つの異なるアベイラビリティーゾーンから vSwitch を選択します。詳細については、「Realtime Compute for Apache Flink のアクティベート」をご参照ください。
ワークスペースを作成すると、システムは自動的に
workspace-name-default-haという名前のクロスゾーン名前空間を生成します。 -
対象のクロスゾーン名前空間の名前をクリックして、その中でジョブを作成し実行します。
名前空間リストでは、[CU タイプ] 列に [クロスゾーン] と表示されていることでクロスゾーン名前空間を識別できます。名前空間名をクリックして入ります。
方法 2:クロスゾーン CU を追加して名前空間を作成する
この方法は、ワークスペース作成時に [デプロイモード] が [クロスゾーン] に設定されていなかった場合に使用します。[クロスゾーン] CU を追加してから、クロスゾーン名前空間を作成できます。
-
クロスゾーン CU を追加します。
-
対象のワークスペースの [操作] 列で、 を選択します。
-
[CU タイプの追加] をクリックします。
-
クロスゾーンタイプの目標 CU 数を入力し、vSwitch を選択します。
対象の VPC 内にあり、Realtime Compute for Apache Flink がサポートするアベイラビリティーゾーン内の既存の vSwitch のみが表示されます。利用可能な vSwitch がない場合は、vSwitch を作成できます。
重要ワークスペースに [クロスゾーン] CU を追加した後、ネットワークアクセスの問題を回避するために、新しいアベイラビリティーゾーンの vSwitch の CIDR ブロックをアップストリームおよびダウンストリームシステムの許可リストに追加してください。
サービス利用規約を読んで同意し、[OK] をクリックします。
-
契約を選択し、[OK] をクリックして支払いを完了します。
-
-
[クロスゾーン] 名前空間を追加します。詳細については、「名前空間の追加」をご参照ください。
-
クロスゾーン名前空間でジョブを作成し実行します。詳細については、「名前空間へのアクセス」をご参照ください。
方法 3:名前空間のクロスゾーン HA を有効にする
-
ワークスペースに、対象の名前空間に割り当てられている CU と同数の未割り当ての クロスゾーン CU があることを確認します。
未割り当てのクロスゾーン CU の数が不足している場合は、[リソースの再設定] をクリックして、ワークスペースにクロスゾーン CU を追加するか、他のクロスゾーン名前空間から余剰のクロスゾーン CU を解放できます。詳細については、「リソースの調整」をご参照ください。
-
対象の名前空間の [操作] 列で、[高可用性を有効にする] をクリックし、次に [OK] をクリックします。
[OK] をクリックすると、システムは名前空間内のシングルゾーン CU を同数のクロスゾーン CU に置き換え、元のシングルゾーン CU をワークスペースに返します。その後、これらの CU を再割り当てするか、リソースをスケールダウンしてコストを削減できます。
例えば、ワークスペース A に 5 つのシングルゾーン CU と 5 つのクロスゾーン CU があるとします。名前空間 A には 2 つのシングルゾーン CU が割り当てられています。名前空間 A のクロスゾーン HA を有効にすると、割り当てられていた 2 つのシングルゾーン CU はワークスペース A の未割り当てのシングルゾーンリソースプールに戻されます。その後、2 つのクロスゾーン CU が名前空間 A に割り当てられます。次の表は、クロスゾーン HA を有効にする前と後のワークスペースのリソース状況を比較したものです。
ステータス
シングルゾーン CU
クロスゾーン CU
有効化前
2/5
0/5
有効化後
0/5
2/5
-
変換されたクロスゾーン名前空間でジョブを作成し実行します。詳細については、「名前空間へのアクセス」をご参照ください。
名前空間のクロスゾーン HA の無効化
クロスゾーン名前空間の作成方法に関わらず、この機能を無効にするには次の手順に従います。ただし、クロスゾーン HA を無効にしても課金は停止しません。課金を停止するには、「クロスゾーン CU のサブスクリプション解除」をご参照ください。
-
ワークスペースに、対象のクロスゾーン名前空間に割り当てられている CU と同数の未割り当てのシングルゾーン CU があることを確認します。
未割り当てのシングルゾーン CU の数が不足している場合は、[リソースの再設定] をクリックして、ワークスペースにシングルゾーン CU を追加するか、他のシングルゾーン名前空間から余剰のシングルゾーン CU を解放できます。詳細については、「リソースの調整」をご参照ください。
-
対象の名前空間の [操作] 列で、[高可用性を無効にする] をクリックし、次に [OK] をクリックします。
クロスゾーン HA を無効にすると、リソースの変更は有効化プロセスの逆になります。プロセスが完了した後にのみ、名前空間の通常の使用を再開できます。
クロスゾーン CU のサブスクリプション解除
ワークスペースの [割り当て済み] クロスゾーン CU の数が 0 の場合、クロスゾーン料金は請求されません。クロスゾーン CU のサブスクリプションを解除するには、次の手順を実行します。
-
ワークスペース内のすべての名前空間でクロスゾーン HA が無効になっていることを確認します。
詳細については、「名前空間のクロスゾーン HA の無効化」をご参照ください。
-
ワークスペース内のクロスゾーン CU の目標数を 0 に設定します。
-
対象のワークスペースの [操作] 列で、 を選択します。
-
クロスゾーン CU タイプの [目標 CU] の値を 0 に変更します。
-
規約に同意し、[OK] をクリックします。
-
関連ドキュメント
-
名前空間のリソースを調整する方法については、「リソースの調整」をご参照ください。
-
vSwitch を変更する方法については、「vSwitch の変更」をご参照ください。