2 つのゾーンにまたがる 3 つのデータセンターアーキテクチャは、1 つのリージョンにある 2 つのプライマリデータセンターと、2 番目のリージョンにある 1 つのセカンダリデータセンターに PolarDB-X インスタンスをデプロイします。このトポロジーは、目標復旧時点 (RPO) がゼロのクロスリージョン高可用性を提供し、金融業界におけるレベル 4 からレベル 6 のディザスタリカバリ要件を満たします。
このトピックでは、このアーキテクチャの仕組み、それを支えるメカニズム、および管理に必要な操作について説明します。
サポートされているバージョン
このアーキテクチャには、Apsara Stack DBStack V1.2.1 以降が必要です。
ディザスタリカバリレベル
| レベル | 目標復旧時間 (RTO) | RPO | デプロイメント要件 |
|---|---|---|---|
| レベル 4 | ≤ 30 分 | 0 | ゾーンディザスタリカバリまたはジオディザスタリカバリ |
| レベル 5 | ≤ 15 分 | 0 | ジオディザスタリカバリ、リモートリージョンに少なくとも 1 つのレプリカ |
| レベル 6 | ≤ 1 分 | 0 | ジオディザスタリカバリ、リモートリージョンに少なくとも 2 つのレプリカ |
PolarDB-X は、Paxos 多数決コンセンサスプロトコルに基づいて 5 つのレプリカを使用し、クロスリージョンで RPO = 0 を実現します。プライマリデータセンターが完全に障害を起こした場合、リモートセカンダリインスタンスは上記の RTO 制約内でサービスを回復します。
仕組み
このトポロジーの PolarDB-X インスタンスは、5 つのレプリカを実行します。1 つのリージョンにある 2 つのプライマリデータセンターに 4 つのレプリカ、別のリージョンにある 1 つのセカンダリデータセンターに 1 つのレプリカが分散されます。多数決同期には、少なくとも 3 つのレプリカからの応答が必要です。
プライマリデータセンター内では、4 つのレプリカが低レイテンシのローカルネットワークを介して通信します。多数決同期は通常、約 1 ミリ秒で完了します。プライマリデータセンターとセカンダリデータセンター間のネットワークレイテンシは約 30 ミリ秒で、これは金融サービスなどの業界におけるクロスリージョン接続の一般的な値です。
このアーキテクチャを確実に機能させる 4 つのメカニズムを次に示します。
重み付け選出メカニズム:不要なクロスリージョンレイテンシを回避するために、リーダー選出をローカルに保ちます。
動的レプリカ調整:データセンター障害後に低レイテンシの多数決同期を復元します。
単一レプリカの強制起動:両方のプライマリデータセンターが障害を起こした場合に、セカンダリデータセンターがリクエストを処理できるようにします。
リモートセカンダリインスタンス:RTO 要件を満たすためにジオディザスタリカバリを提供します。
障害シナリオと対応
| 障害シナリオ | 範囲 | 対応 |
|---|---|---|
| リーダーレプリカ障害 | プライマリデータセンター | リーダー再選出がトリガーされます。トラフィック再ルーティングを最小限に抑えるため、同じデータセンター内のフォロワーが優先されます。 |
| フォロワーレプリカ障害 | プライマリデータセンター | 対応不要。 |
| フォロワーレプリカ障害 | セカンダリデータセンター | 対応不要。 |
| プライマリデータセンター障害 | 2 つのプライマリデータセンターのうち 1 つ | 5 つのレプリカは動的に 3 つのレプリカにスペックダウンされます。クロスリージョン同期が発生する場合があります。 |
| セカンダリデータセンター障害 | — | プライマリデータセンターには 4 つのレプリカが残ります。Paxos プロトコルパフォーマンスには影響ありません。 |
| 両方のプライマリデータセンターが障害 | リージョン障害 | セカンダリデータセンターには 1 つのレプリカが残ります。force_single_mode を実行して、そのレプリカを単一レプリカモードで起動します。ビジネストラフィックをリモートセカンダリインスタンスに切り替えます。 |
| セカンダリデータセンターが障害 | リージョン障害 | 対応不要。 |
主要メカニズム
重み付け選出メカニズム
PolarDB-X は重み付け選出メカニズムを適用し、リーダー再選出が同じデータセンター内のレプリカを優先するようにすることで、不要なクロスリージョンレイテンシを回避します。
レプリカ選出の重み:
| データセンター | レプリカの役割 | 選出の重み |
|---|---|---|
| プライマリデータセンター 1 | リーダー | 9 |
| プライマリデータセンター 1 | フォロワー | 7 |
| プライマリデータセンター 2 | フォロワー | 5 |
| プライマリデータセンター 2 | フォロワー | 3 |
| セカンダリデータセンター | フォロワー | 1 |
このメカニズムには 2 つの部分があります。
楽観的重み付け選出:各ノードは、リーダー選出を開始する前に計算された遅延を待ちます。遅延はノードの重みに反比例するため、重みの高いノードが最初に選出を開始します。
強制重み付け選出:新しいリーダーがすべてのノードの中で最高の重みを持っていないことを検出した場合、すぐに書き込みを受け入れるのではなく、譲渡フェーズに入ります。このフェーズ中、ノードはハートビートシグナル (例: 1 ~ 2 秒ごと) を送信します。譲渡フェーズが終了する前に重みの高いノードが応答した場合、リーダーシップはそのノードに転送されます。
たとえば、プライマリデータセンター 1 のリーダーが障害を起こした場合、同じデータセンター内のフォロワー (重み 7) が他のすべてのフォロワーよりも優先され、トラフィックはローカルに保たれます。
レプリカ数の動的調整
プライマリデータセンターが障害を起こし、3 つのレプリカしか残っていない場合、多数決同期にはセカンダリデータセンターのレプリカを含める必要があり、約 30 ミリ秒のクロスリージョンレイテンシが追加されます。このトレードオフを管理するには、次のコマンドを使用してレプリカ数を調整します。
| 移行 | コマンド | 備考 |
|---|---|---|
| 5 つのレプリカから 3 つのレプリカへ | downgrade_follower | 2 つのフォロワーを学習者 (learner) に変換します |
| 3 つのレプリカから 5 つのレプリカへ | upgrade_learner | 2 つの学習者 (learner) をフォロワーに戻します。アップグレードする前にレプリケーションログが最新であることを確認してください |
| 1 つのレプリカから 3 つのレプリカへ | add_follower | 新しいレプリカを学習者 (learner) として追加します。ログが最新になると自動的にフォロワーに昇格されます |
単一レプリカの強制起動
両方のプライマリデータセンターが障害を起こした場合、セカンダリデータセンターに残っている単一のレプリカだけでは多数決コンセンサス要件を満たすことができません。force_single_mode を実行してシステムを単一レプリカモードに強制的に移行し、すべてのフォロワーレプリカを無効にすることで、残りのレプリカがリクエストを処理できるようにします。
プライマリデータセンターが回復すると、PolarDB-X は分散システムを増分的に再構築します。
レプリカを 1 つから 3 つに増やす:
add_followerを実行します。レプリカを 3 つから 5 つに増やす:
upgrade_learnerを実行します。
リモートセカンダリインスタンス
分散データベースシステムでは、分散トランザクション中に Paxos グループ間でレプリケーションの進捗が異なる場合があります。調整がないと、部分的にレプリケートされたトランザクションのデータがセカンダリインスタンスに表示され、トランザクションの不整合が発生する可能性があります。
PolarDB-X は、リモートリージョンにデプロイされた Change Data Capture (CDC) ログノードを使用してこれに対処します。これらのノードは分散トランザクションをソートおよび再編成し、アトミックレプリケーションを保証します。これにより、データがプライマリインスタンスからセカンダリインスタンスに移動する際に、トランザクションが部分的にコミットされることはありません。この保証は、通常のディザスタリカバリ訓練と実際のフェールオーバーの両方で有効です。
レプリケーションとフェールオーバーの仕組みは、2 つの設計上の考慮事項によって規定されます。
プライマリインスタンスのレプリケーション:プライマリインスタンスはクロスリージョン Paxos プロトコルを使用し、少なくとも 3 つのレプリカからの応答が必要です。4 つのレプリカがプライマリデータセンターにあるため、多数決同期は通常ローカルで完了します。セカンダリデータセンターのリモートレプリカは非同期で応答するため、クロスリージョンレイテンシはプライマリインスタンスの書き込みパフォーマンスに影響しません。
セカンダリインスタンスのレプリケーション:セカンダリインスタンスはリモートリージョンにあります。CDC ログノードは、データをほぼリアルタイムでリージョン間でレプリケートします。レプリケーションレイテンシが発生する可能性がありますが、アトミックトランザクションレプリケーションにより、セカンダリインスタンスが部分的にコミットされたトランザクションを反映することはありません。
一般的な操作とメンテナンス (O&M)
クイックリファレンス: シナリオとコマンド
| シナリオ | 操作 |
|---|---|
| 1 つのプライマリデータセンターが障害 | downgrade_follower を実行して 5 つのレプリカを 3 つに減らします |
| プライマリデータセンターが回復 | upgrade_learner を実行して 5 つのレプリカを復元します |
| 両方のプライマリデータセンターが障害 | force_single_mode を実行して単一レプリカモードを開始し、トラフィックをセカンダリインスタンスに切り替えます |
| リージョン障害後にセカンダリデータセンターが回復 | add_follower を実行してレプリカを追加し、次に upgrade_learner |
このトポロジーでのインスタンス作成
PolarDB-X インスタンスを作成する際は、[トポロジー] パラメーターを 2つのリージョンにまたがる3つのデータセンター に設定します。
インスタンスのトポロジー表示
インスタンスの[基本情報]ページで、[トポロジー情報]セクションで、すべてのリソースのゾーンの詳細を確認できます。
フェールオーバーの実行
事前準備
書き込みパフォーマンスへの影響を軽減するため、トラフィックの少ない期間にフェールオーバーをスケジュールしてください。
[基本情報] ページで、現在のトポロジーを確認し、どのデータセンターをプライマリゾーンとして指定するかを確認します。
手順
PolarDB for Xscale コンソールにログインします。
上部のナビゲーションバーで、ターゲットインスタンスが配置されているリージョンを選択します。
[インスタンス] ページで、[PolarDB-X 2.0] タブをクリックします。
ターゲットインスタンスを見つけて、その ID をクリックします。
[基本情報] ページで、[トポロジ情報] セクションの右上隅にある [プライマリゾーンの指定] をクリックします。
「[指定プライマリゾーン]」ダイアログボックスで、「[データセンター]」、「[プライマリゾーン]」、および「[スイッチモード]」パラメーターを設定します。
[OK] をクリックします。
フェールオーバー後
通常の書き込みトラフィックを再開する前に、[トポロジー情報] セクションに新しいプライマリゾーンが反映されていることを確認してください。