RDB スナップショットについて

このページでは、Memorystore for Redis の RDB スナップショットの概要を説明します。このページでは、オープンソースの Redis RDB スナップショットと Memorystore のインポート/エクスポート機能について理解していることを前提としています。

RDB スナップショットを有効化、無効化、モニタリングする方法については、RDB スナップショットの管理をご覧ください。

Memorystore for Redis は主にインメモリ キャッシュとして使用されます。Memorystore をキャッシュとして使用する場合、アプリケーションはキャッシュデータの損失を許容するか、永続ストアからキャッシュを簡単に再入力できます。ただし、Memorystore インスタンスのダウンタイムやインスタンスデータの完全な損失により、アプリケーションのダウンタイムが長くなるユースケースもあります。

高可用性の主なメカニズムとして Standard Tier を使用することをおすすめします。さらに、スタンダード ティアのインスタンスで RDB スナップショットを有効にすると、キャッシュのフラッシュを引き起こす可能性のある障害に対して保護が強化されます。スタンダード ティアでは、複数のレプリカを備えた高可用性インスタンスが提供されます。プライマリに障害が発生した場合は、自動フェイルオーバーを使用して高速に復旧できます。

場合によっては、スタンダード ティアのインスタンスで重大な障害が発生した場合、スナップショット バックアップからデータを復元することもできます。これらのシナリオでは、自動バックアップと RDB スナップショットからデータを復元する機能により、データ損失に対する保護を強化できます。RDB スナップショットを有効にすると、必要に応じて最新の RDB スナップショットから復元が行われます。

RDB スナップショットは、復旧後にある程度データの鮮度が古くても問題にならないユースケースに適しています。RDB スナップショットを使用して、ベーシック ティア インスタンスのバックアップと復元を自動化することもできます。

RDB スナップショットの概要

RDB スナップショット機能の動作は次のとおりです。

  • 永続ストレージに、ユーザーによって指定された間隔で完全なポイントインタイム スナップショットを保存します。

  • 定期的なスナップショットの頻度とスケジュールは、ご自身で選択できます。スナップショット間隔の最小値は 1h、最大値は 24h です。

  • ベーシック ティア インスタンスは、障害が原因でインスタンスが再起動されるたび、スケーリング オペレーションが実行されるたび、またはインスタンスの OSS Redisバージョンのアップグレードが実行されるたびに、最新のスナップショットからデータを回復します。

  • デフォルトでは、スタンダード ティアのインスタンスはスナップショットではなくレプリカからデータを復元します。ただし、レプリカが使用できず、プライマリとレプリカの両方が再起動された場合、スタンダード ティアのインスタンスはスナップショットからデータを復元します。

  • インスタンスの料金に追加料金は発生しません。

その他の動作

  • スナップショットはインスタンスの復旧に使用されます。手動で復元することはできません。どの時点においても、復元に成功した最後のスナップショットのみが使用できます。RDB スナップショットに加えて、エクスポートとインポートを使用して、データを手動でバックアップおよび復元できます。

  • スタンダード ティアのインスタンスでは、プライマリのメモリと CPU の使用量を最小限に抑えるために、レプリカでスナップショットが作成されます。スナップショットがプライマリ ノードから取得されることはありません。

制約

  • Redis バージョン 5.0 以降を使用している Memorystore for Redis インスタンスで使用できます。

  • インスタンスにキーが多い(約 2 億個以上)場合は、RDB スナップショットと復元が遅くなることがあります。このキーの量では、Redis サーバー自体がスナップショットと復元の速度を低下させるボトルネックになる可能性があります。

RDB スナップショットのスケジュール設定

インスタンスの作成時に RDB スナップショットを有効にする場合は、スナップショットの間隔を指定する必要があります。開始時間を指定するオプションもあります。これらを組み合わせて、スナップショットの日ごとのスケジュールを定義します。設定可能な間隔は 1h6h12h24h です。たとえば、開始時刻を午前 4 時に設定し、間隔を 1 時間に設定すると、スナップショットは、有効になっている日の午前 4 時 に開始し、それ以降は 1 時間ごとに繰り返し実行されます。

開始時間を指定しない場合は、最初のスナップショットが可能な限り早く取得され、間隔が適用されます。たとえば、開始時刻が指定されず、間隔が 1 時間の場合、スナップショットは午前 6 時 13 分に開始して、午前 7 時 13 分、午前 8 時 13 分に繰り返し実行できます。

開始時刻を指定した場合、スナップショットが常に成功し、指定したバックアップ間隔を超えない限り、日ごとのスケジュールは一貫して尊重されます。

ただし、スナップショットは日ごとのスケジュールに基づいてトリガーすることをおすすめします。スケジュールは、いくつかの理由で最初に決定されたスケジュールから逸脱脱する可能性があります。

  • スナップショットが失敗した場合や、指定したスナップショット間隔より長くかかる場合は、現在のスナップショットが完了した直後に次のスナップショットが開始されます。

    • スナップショットが継続的に実行されてインスタンスが過負荷状態にならないように、スナップショットの作成を完了するのに十分な時間間隔を設定することをおすすめします。
  • スナップショットが日単位のスケジュールに沿ってすでに進行中の場合は、そのスナップショットが完了し、次のスナップショット時間は、最後に成功したスナップショットの開始からの間隔でのみ計算されます。

既存のスケジュールを調整する

一定の期間、RDB スナップショットの取得を一時停止したい、というシナリオが発生する可能性があります。これは、重大なイベント中にパフォーマンスに影響が及ばないようにする、またはパフォーマンスの問題をトラブルシューティングするためにスナップショットを一時的に無効にするために取られる措置です。

開始時間を先の日付に調整することで、短い期間スナップショットを一時停止できます。開始時刻を先の日付に調整すると、次のスナップショットはその日まで開始しません。これにより、最後のスナップショットが少なくとも 7 日間保持され、復元時に使用されます。

スナップショット スケジュールの調整について詳しくは、スナップショット スケジュールの調整をご覧ください。

復旧動作

ベーシック ティアの Redis インスタンスは、インスタンスが再起動されるたびに復旧をトリガーします。一般的には、オペレーションは、インスタンスのスケーリングバージョンのアップグレードのオペレーションによって再起動がトリガーされます。RDB スナップショットは、これらのオペレーション中に再起動、計画的なメンテナンス、予期しないシステム障害が発生するベーシック ティアのインスタンス データを保持します。

スタンダード ティアの Redis インスタンスは、スナップショットから読み込むのではなく、プライマリ復旧メカニズムとしてレプリカにフェイルオーバーします。スタンダード ティアのインスタンスは、レプリカからの復元に失敗したときにスナップショットから復元されます。

復元時のデータの整合性

有効にすると、RDB スナップショットはベスト エフォートで指定された間隔でバックアップを作成しますが、これは保証されません。スナップショットが失敗する理由はいくつかあります。RDB スナップショットが有効になっているときにインスタンスを構成してモニタリングする方法については、ベスト プラクティスをご覧ください。

スナップショットが複数の間隔で連続して失敗すると、最後に使用可能だったバックアップが古くなっている可能性があります。

スナップショットからの復元で最悪のデータの損失は、最後の良好なスナップショットが開始されてからの指定した間隔と、次のスナップショットをストレージに保存する時間の合計です。復旧インシデントの場合は、last_success_age 指標を使用してデータ損失の時間枠を表示します。

スケジュール設定されたスナップショットの障害を検出して修正措置を講じるように、アラートを設定することをおすすめします。アラートの設定の詳細については、スナップショットのモニタリングをご覧ください。

復旧までの時間

インスタンスがスナップショットから復元中は、インスタンスは使用できません。復元時間はスナップショットのサイズによって異なります。予測復旧時間を把握するには、Cloud Monitoring またはGoogle Cloud コンソールを使用して RDB recovery remaining time 指標を確認します。

遅い復旧の軽減

スナップショットからの復元に想定より時間がかかる場合があります。アプリケーションをできるだけ早く Redis に再接続するため、対応が必要になることがあります。

このような状況では、新しい Redis インスタンスを作成して、アプリケーション トラフィックを転送できます。元のインスタンスが復元されたら、復元したデータを新しいインスタンスに転送できます。

スナップショット障害とリカバリ障害

スナップショット エラー

失敗したスナップショットは Cloud Monitoring に報告され、スナップショットはすぐに再試行されます。スナップショットが連続して失敗すると、復元されたデータが古くなっていくため、復元時に失われるデータ量が増えます。スナップショットの失敗を検出してトラブルシューティングする方法については、スナップショットのモニタリングをご覧ください。

復元の失敗

復旧に失敗することはまれですが、起きることがあります。復元に失敗すると、インスタンスはデータなしで復元されます。

おすすめの方法

RDB スナップショットを使用してインスタンスをバックアップする場合、最適な結果を得るには、次のベスト プラクティスに従ってください。

メモリ管理

RDB スナップショットは、プロセス フォークと「コピーオンライト」メカニズムを使用して、インスタンスのスナップショットを作成します。インスタンスへの書き込みのパターンによっては、書き込みによってアクセスされたページがコピーされるにつれて、インスタンスの使用メモリが増加します。最悪の場合、メモリ フットプリントはインスタンス内のデータの 2 倍になる可能性があります。

インスタンスにスナップショットの完了に十分なメモリがあることを確認するには、maxmemory-gb をインスタンス容量の 80% に設定して、20% をオーバーヘッド用に予約する必要があります。詳細については、メモリ管理のベスト プラクティスをご覧ください。スナップショットのモニタリングに加え、このメモリ オーバーヘッドにより、ワークロードのスナップショットを正常に処理できます。

古いスナップショット

古いスナップショットからインスタンスを復元すると、大量の古くなったキー、またはスキーマの変更などのデータベースに対するその他の変更を調整しようとするため、アプリケーションのパフォーマンスに問題が発生する可能性があります。

スナップショットが古すぎると思われる場合、またはスナップショットとの調整が難しい他の重要な変更がインスタンスに発生している場合は、RDB スナップショットを無効にしてから再度有効にできます。これにより、既存のスナップショットが削除されるため、古いスナップショットからの復元を回避できます。

古いスナップショットをモニタリングするには、RDB スナップショット last_status と RDB スナップショット last_success_age指標にアラートを設定します。

スナップショットからの長期的な復元

redis.googleapis.com/server/uptime 指標にアラートを設定して、インスタンスが利用不可能になった場合に通知するようにすることをおすすめします。

インスタンスが利用できず、スナップショットからの復元に時間がかかりすぎる場合は、新しい Redis インスタンスを作成してトラフィックを転送できます。元の Redis インスタンスが復元したら、復元したデータを新しいインスタンスに転送できます。

RDB スナップショットのパフォーマンスへの影響

ワークロード パターンによっては、RDB スナップショットがインスタンスのパフォーマンスに影響し、アプリケーションのレイテンシが増加する可能性があります。

アプリケーションで許容できるデータ損失の量に応じて、インスタンス トラフィックが少ない期間に実行するように RDB スナップショットをスケジュールすることで、RDB スナップショットのパフォーマンスへの影響を最小限に抑えることができます。

開始時刻と間隔を使用して、必要な時間のスナップショットをスケジュールします。たとえば、負荷が午前 1 時から午前 4 時まで非常に低い場合は、開始時刻を午前 3 時に設定し、間隔を 24 時間に設定します。

システムの負荷が一定で、スナップショットが頻繁に必要な場合は、パフォーマンスへの影響を慎重に評価し、ワークロードに RDB スナップショットを使用するメリットを比較検討してください。

スナップショットのモニタリング

スナップショットをモニタリングし、失敗したスナップショットのアラートを設定することが重要です。スナップショットの失敗は、インスタンスの負荷が大きすぎて、スナップショットからの復元が不可能な状態が継続することを表している可能性があります。

スナップショットのモニタリングに使用できる指標のリストについては、RDB スナップショットの指標をご覧ください。失敗したスナップショットの通知を受け取るには、RDB スナップショット last_status 指標のアラートを設定します。Google Cloud コンソールを使用してエラーを確認することもできます。

パフォーマンスへの影響をモニタリングする

CPU 使用率、メモリ使用量など、Cloud Monitoring を介して利用できる指標を表示して、スナップショットが Memorystore インスタンスに与える影響をモニタリングできます。パフォーマンスの問題が検出されたときに、RDB スナップショットの in_progress 指標を使用して、スナップショットが進行中かどうかを判断できます。

次のステップ