災害対策に Neptune ストリームクロスリージョンレプリケーションを使用する - Amazon Neptune

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

災害対策に Neptune ストリームクロスリージョンレプリケーションを使用する

Neptune は、クロスリージョンフェイルオーバー機能を実装する 2 つの方法を提供します。

  • クロスリージョンスナップショットのコピーと復元

  • Neptune ストリームを使用して、2 つの異なるリージョンの 2 つのクラスター間でデータをレプリケートします。

クロスリージョンスナップショットのコピーと復元では、異なるリージョンの Neptune クラスターを復旧する際の運用オーバーヘッドが最小限に抑えられます。ただし、リージョン間でスナップショットをコピーするには、スナップショットが Neptune クラスターのフルバックアップであるため、データ転送にかなりの時間がかかることがあります。その結果、クロスリージョンスナップショットのコピーと復元は、目標復旧時点 (RPO) の時間と目標復旧時間 (RTO) の時間のみを必要とするシナリオに使用できます。

目標復旧時点 (RPO) は、バックアップ間の時間によって測定されます。これは、最後のバックアップが作成されてからデータベースをリカバリする時点までの間に損失する可能性のあるデータの量を定義します。

目標復旧時間 (RTO) は、リカバリオペレーションの実行にかかる時間によって測定されます。これは、障害発生後に DB クラスターが復旧されたデータベースにフェイルオーバーするのにかかる時間です。

Neptune ストリームは、バックアップ Neptune クラスターをプライマリ本番クラスターと常に同期させる方法を提供します。障害が発生すると、データベースはバックアップクラスターにフェイルオーバーします。これにより、データは常にバックアップクラスターにコピーされるため、RPO と RTO が数分に短縮されます。これは、いつでもフェイルオーバーターゲットとしてすぐに利用できるためです。

この方法で Neptune ストリームを使用する場合の欠点は、レプリケーションコンポーネントの維持に必要な運用オーバーヘッドと、2 番目の Neptune DB クラスターを常にオンラインにするコストの両方が大きな場合があることです。

Neptune から Neptune へのレプリケーションセットアップ

プライマリの本番 DB クラスターは、特定のソースリージョンの VPC に存在します。災害対策の目的で、別のリカバリリージョンでレプリケートまたはエミュレートする必要があるのは、主に次の 3 つです。

  • クラスターに格納されているデータ。

  • プライマリクラスターの設定。これには、IAM 認証を使用するかどうか、暗号化されているかどうか、DB クラスターパラメータ、インスタンスパラメータ、インスタンスサイズなどが含まれます)。

  • ターゲット VPC、セキュリティグループなど、使用するネットワークトポロジ。

次のような Neptune 管理 API を使用して、その情報を収集できます。

収集した情報を使用して、次の手順を使用して、障害が発生した場合に本番クラスターをフェイルオーバーできる別のリージョンにバックアップクラスターをセットアップできます。

1: Neptune ストリームを有効にします。

ModifyDBClusterParameterGroup を使用して neptune_streams パラメータを 1 に設定します。次に、DB クラスター内のすべてのインスタンスを再起動して、変更を有効にします。

Neptune ストリームを有効にした後に、ソース DB クラスターで少なくとも 1 つの追加または更新操作を実行することをお勧めします。これにより、本番クラスタをバックアップクラスタに再同期するときに後で参照できるデータポイントが変更ストリームに追加されます。

2: バックアップクラスターを設定するリージョンに新しい VPC を作成します。

プライマリクラスターとは異なるリージョンに新しい Neptune DB クラスターを作成する前に、クラスターをホストするターゲットリージョンに新しい VPC を確立する必要があります。プライマリクラスターとバックアップクラスター間の接続は、異なる VPC 内のプライベートサブネット間のトラフィックを使用する VPC ピアリングによって確立されます。ただし、2 つの VPC 間で VPC ピアリングを確立するには、重複する CIDR ブロックまたは IP アドレススペースがあってはなりません。これは、デフォルトの VPC の CIDR ブロックが常に同じであるため、両方のリージョンでデフォルト VPC を使用することはできません (172.31.0.0/16)。

以下の条件を満たしている限り、ターゲットリージョンで既存の VPC を使用できます。

  • プライマリクラスターが配置されている VPC の CIDR ブロックと重複する CIDR ブロックはありません。

  • プライマリクラスターがある VPC と同じ CIDR ブロックを持つ別の VPC とピアリングされていません。

ターゲットリージョンに適切な VPC がない場合は、Amazon EC2 CreateVpc API を使用して作成します。

3: プライマリクラスターのスナップショットを作成し、それをターゲットバックアップリージョンとして復元します。

次に、本番クラスターのコピーであるターゲットバックアップリージョン内の適切な VPC に新しい Neptune クラスターを作成します。

バックアップリージョンに本番クラスターのコピーを作成します。
  1. ターゲットのバックアップリージョンで、本番 DB クラスターで使用されるパラメータとパラメータグループを再作成します。これを、CreateDBClusterParameterGroup および CreateDBParameterGroupModifyDBClusterParameterGroup および ModifyDBParameterGroup を使用して行うことができます。

    CopyDBClusterParameterGroup および CopyDBParameterGroup API は現在クロスリージョンコピーをサポートしていないという点に注意してください。

  2. CreateDBClusterSnapshot を使用して、本番リージョンの VPC に本番クラスターのスナップショットを作成します。

  3. CopyDBClusterSnapshot を使用して、ターゲットバックアップリージョンの VPC にスナップショットをコピーします。

  4. RestoreDBClusterFromSnapshot を使用して、コピーしたスナップショットを使用して、ターゲットバックアップリージョンの VPC 内に新しい DB クラスターを作成します。プライマリ本番クラスターからコピーした構成設定とパラメータを使用します。

  5. 新しい Neptune クラスターは現在存在しますが、インスタンスは一切含まれていません。CreateDBInstance を使用して、本番クラスターのライターインスタンスと同じインスタンスタイプとサイズを持つ新しいプライマリ/ライターインスタンスを作成します。フェイルオーバーの前に、バックアップインスタンスを使用してターゲットリージョンでの読み取り I/O の処理を行わない限り、この時点で追加のリードレプリカを作成する必要はありません。

4: プライマリクラスターの VPC と新しいバックアップクラスターの VPC 間の VPC ピアリングを確立します。

VPC ピアリングを設定することで、プライマリクラスターの VPC が単一のプライベートネットワークであるかのようにバックアップクラスターの VPC と通信できるようになります。これを行うには、以下のステップを行います:

  1. 本番クラスターの VPC から、CreateVpcPeeringConnection API を呼び出し、ピアリング接続を確立します。

  2. ターゲットバックアップクラスターの VPC から、AcceptVpcPeeringConnection API を呼び出し、ピアリング接続を受け入れます。

  3. 本番クラスターの VPC から、CreateRoute API を使用して、VPC ピアリングプレフィクスリストを使用するように、すべてのトラフィックをターゲット VPC の CIDR ブロックにリダイレクトする VPC のルートテーブルにルートを追加します。

  4. 同様に、ターゲットバックアップクラスターの VPC から、CreateRoute API を使用して、プライマリクラスターの VPC にトラフィックをルーティングする VPC のルートテーブルにルートを追加します。

5: Neptune ストリームレプリケーションインフラストラクチャをセットアップします。

両方のクラスターがデプロイされ、両方のリージョン間のネットワーク通信が確立されたら、Neptune から Neptune AWS CloudFormation テンプレートを使用して、データレプリケーションをサポートする追加のインフラストラクチャで Neptune ストリームコンシューマー Lambda 関数をデプロイします。これは、プライマリ本番クラスターの VPC で実行します。

この AWS CloudFormation スタックに提供する必要があるパラメータは次のとおりです。

  • NeptuneStreamEndpoint — プライマリクラスターのストリームエンドポイント (URL 形式)。例: https://(cluster name):8182/pg/stream

  • QueryEngine   –  これは gremlinsparql、または openCypher のいずれかである必要があります。

  • RouteTableIds — DynamoDB VPC エンドポイントとモニタリング VPC エンドポイントの両方にルートを追加できます。

    2 つの追加パラメータ、すなわち CreateMonitoringEndpoint および CreateDynamoDBEndpoint は、プライマリクラスターの VPC にまだ存在しない場合は true に設定する必要があります。すでに存在する場合は、false に設定されていることを確認してください。設定されていない場合、 AWS CloudFormation 作成は失敗します。

  • SecurityGroupIds — Lambda コンシューマーがプライマリクラスターの Neptune ストリームエンドポイントと通信するために使用するセキュリティグループを指定します。

    ターゲットバックアップクラスターで、このセキュリティグループから発信されるトラフィックを許可するセキュリティグループをアタッチします。

  • SubnetIds — Lambda コンシューマーがプライマリクラスターと通信するために使用できる、プライマリクラスターの VPC 内のサブネット ID のリスト。

  • TargetNeptuneClusterEndpoint — ターゲットのバックアップクラスターのクラスターエンドポイント (ホスト名のみ)。

  • TargetAWSRegion – などのターゲットバックアップクラスターの AWS リージョンus-east-1)。このパラメータは、クロス AWS リージョンレプリケーションの場合と同様に、ターゲットバックアップクラスターのリージョンが Neptune ソースクラスターのリージョンと異なる場合にのみ指定する必要があります。ソースリージョンとターゲットリージョンが同じ場合、このパラメータはオプションです。

    TargetAWSRegion 値が Neptune がサポートする有効な AWS リージョンではない場合、プロセスは失敗することに注意してください。

  • VPC — プライマリクラスターの VPC の ID。

その他のパラメータはすべて、デフォルト値のままにしておくことができます。

AWS CloudFormation テンプレートがデプロイされると、Neptune はプライマリクラスターからバックアップクラスターへの変更のレプリケーションを開始します。このレプリケーションは、Lambda コンシューマー関数によって生成された CloudWatch ログでモニタリングできます。

その他の考慮事項

  • プライマリクラスターとバックアップクラスター間で IAM 認証を使用する必要がある場合は、 AWS CloudFormation テンプレートを呼び出すときに設定することもできます。

  • プライマリクラスターで保存時の暗号化が有効になっている場合は、スナップショットをターゲットリージョンにコピーするときに、関連する KMS キーを管理し、ターゲットリージョンに新しい KMS キーを関連付ける方法を検討します。

  • ベストプラクティスは、アプリケーションで使用される Neptune エンドポイントの前で DNS CNAME を使用することです。その後、ターゲットのバックアップクラスタに手動でフェイルオーバーする必要がある場合は、これらの CNAME をターゲットクラスタまたはインスタンスのエンドポイントを指すように変更できます。