高可用性とレプリカ

このページでは、Memorystore for Valkey のアーキテクチャがどのように高可用性(HA)をサポートし、提供しているかについて説明します。また、インスタンスのパフォーマンスと安定性の向上に役立つ推奨構成についても説明します。

高可用性

Memorystore for Valkey は、クライアントがマネージド Memorystore for Valkey ノードに直接アクセスする高可用性アーキテクチャ上に構築されています。クライアントは、Memorystore for Valkey インスタンスに接続するで説明されているように、個々のエンドポイントに接続することでこれを行います。

シャードに直接接続すると、次のメリットがあります。

  • 直接接続では中間ホップが回避されるため、クライアントと Valkey ノード間のラウンドトリップ時間(クライアントのレイテンシ)が最小限に抑えられます。

  • クラスタモードが有効になっている場合、各シャードは独立して失敗するように設計されているため、直接接続では単一障害点が回避されます。たとえば、複数のクライアントからのトラフィックがスロット(キースペース チャンク)をオーバーロードした場合、シャードの障害により、スロットの処理を担当するシャードへの影響が制限されます。

シングルゾーン インスタンスよりも信頼性が高いため、高可用性のマルチゾーン インスタンスを作成することをおすすめします。ただし、レプリカなしでインスタンスをプロビジョニングする場合は、シングルゾーン インスタンスを選択することをおすすめします。詳細については、シングルゾーン インスタンスを使用する状況をご覧ください。

インスタンスの高可用性を有効にするには、シャードごとに少なくとも 1 つのレプリカノードをプロビジョニングする必要があります。これは、インスタンスの作成時に行うことも、レプリカ数をスケーリングしてシャードあたり少なくとも 1 つのレプリカにすることもできます。レプリカは、自動フェイルオーバーを計画メンテナンス中や予期しないシャード障害時に提供します。

クライアントのベスト プラクティスのガイダンスに従ってクライアントを構成する必要があります。推奨されるベスト プラクティスを使用することで、クライアントはダウンタイムなしでインスタンスの次の項目を自動的に処理できます。

  • ロール(自動フェイルオーバー)

  • エンドポイント(ノードの交換)

  • クラスタモードが有効になっている場合に関連するスロット割り当ての変更(コンシューマのスケールアウトとスケールイン)

レプリカ

高可用性の Memorystore for Valkey インスタンスはリージョン リソースです。Memorystore for Valkey は、ゾーンの停止を防ぐために、シャードのプライマリ VM とレプリカ VM を複数のゾーンに分散します。Memorystore for Valkey では、ノードあたり 0 ~ 5 個のレプリカを持つインスタンスがサポートされています。

レプリカを使用すると、データの鮮度が低下する可能性がある代わりに、読み取りスループットを向上させることができます。

  • クラスタモードが有効: READONLY コマンドを使用して、クライアントがレプリカから読み取れる接続を確立します。
  • クラスタモードが無効: リーダー エンドポイントに接続して、使用可能な レプリカに接続します。

クラスタモードが有効になっているインスタンスの形状

次の図は、クラスタモードが有効になっているインスタンスの形状を示しています。

3 つのシャードとノードごとに 0 個のレプリカを持つインスタンス形状

ノードが 3 つのゾーンに均等に分割されたレプリカがない Memorystore for Valkey クラスタモードが有効なインスタンス。

3 つのシャードとノードごとに 1 つのレプリカを持つインスタンス形状

ノードごとに 1 個のレプリカがあり、ノードが 3 つのゾーンに均等に分割された Memorystore for Valkey クラスタモードが有効なインスタンス。

3 つのシャードとノードごとに複数のレプリカを持つインスタンス形状

ノードごとに複数のレプリカがあり、ノードが 3 つのゾーンに均等に分割された Memorystore for Valkey クラスタモードが有効なインスタンス。

クラスタモードが無効になっているインスタンスの形状

次の図は、クラスタモードが無効になっているインスタンスの形状を示しています。

複数のレプリカを持つインスタンス形状

複数のレプリカがあり、ノードが 3 つのゾーンに均等に分割された Memorystore for Valkey クラスタモードが無効なインスタンス。

自動フェイルオーバー

シャード内の自動フェイルオーバーは、メンテナンスまたはプライマリ ノードの予期しない障害が原因で発生する可能性があります。フェイルオーバー中、レプリカはプライマリに昇格します。レプリカは明示的に構成できます。また、サービスは内部メンテナンス中に一時的に追加のレプリカをプロビジョニングして、ダウンタイムを回避することもできます。

自動フェイルオーバーにより、メンテナンス アップデート中のデータ損失を防ぐことができます。メンテナンス中の自動フェイルオーバーの動作の詳細については、メンテナンス中の自動フェイルオーバーの動作をご覧ください。

フェイルオーバーとノードの修復時間

自動フェイルオーバーには、プライマリ ノード プロセスのクラッシュやハードウェア障害などの計画外イベントの場合、数十秒程度の時間がかかることがあります。この間、システムは障害を検出し、新しいプライマリとなるレプリカを選択します。

ノードの修復には、サービスが障害のあるノードを交換するのに数分かかることがあります。これは、すべてのプライマリ ノードとレプリカノードに当てはまります。高可用性でないインスタンス(レプリカがプロビジョニングされていない)の場合、障害のあるプライマリ ノードの修復にも数分かかります。

計画外フェイルオーバー時のクライアントの動作

障害の性質によっては、クライアント接続がリセットされる可能性があります。自動復旧後、プライマリ ノードとレプリカノードのオーバーロードを避けるため、指数バックオフを使用して接続を再試行する必要があります。

読み取りスループットにレプリカを使用するクライアントは、障害のあるノードが自動的に置き換えられるまで、容量が一時的に低下することに備えておく必要があります。

書き込みの損失

予期しない障害によるフェイルオーバー中、Valkey のレプリケーション プロトコルの非同期性により、確認済みの書き込みが失われる可能性があります。

クライアント アプリケーションは、Valkey WAIT コマンドを利用して、実際のデータの安全性を向上させることができます。

単一ゾーンの停止がキースペースに与える影響

このセクションでは、単一ゾーンの停止が Memorystore for Valkey インスタンスに与える影響について説明します。

マルチゾーン インスタンス

  • HA インスタンス: ゾーンが停止した場合、キースペース全体で読み取りと書き込みが可能ですが、一部のリードレプリカが使用できないため、読み取り容量が減少します。単一ゾーンの停止というまれな事態に備えて、インスタンスに十分な読み取り容量を確保できるように、クラスタ容量をオーバープロビジョニングすることを強くおすすめします。停止が終了すると、影響を受けるゾーンのレプリカが復元され、クラスタの読み取り容量が構成済みの値に戻ります。詳細については、スケーラブルで信頼性の高いアプリのパターンをご覧ください。

  • 非 HA インスタンス(レプリカなし): ゾーンが停止した場合、影響を受けるゾーンでプロビジョニングされたキースペースの部分でデータフラッシュが発生し、停止中は書き込みや読み取りに使用できなくなります。停止が終了すると、影響を受けるゾーンのプライマリが復元され、クラスタの容量が構成済みの値に戻ります。

シングルゾーン インスタンス

  • HA インスタンスと非 HA インスタンスの両方: インスタンスがプロビジョニングされているゾーンが停止すると、クラスタが使用できなくなり、データがフラッシュされます。別のゾーンが停止した場合、クラスタは読み取りリクエストと書き込みリクエストの処理を続行します。

ベスト プラクティス

このセクションでは、高可用性とレプリカに関するベスト プラクティスについて説明します。

レプリカを追加する

レプリカを追加するには、RDB スナップショットが必要です。RDB スナップショットは、プロセス フォークと 「コピーオンライト」メカニズムを使用して、インスタンスの スナップショットを作成します。ノードへの書き込みパターンによっては、書き込みによってアクセスされたページがコピーされるため、ノードの使用メモリが増加します。メモリ フットプリントは、ノード内のデータのサイズの 2 倍になることがあります。

ノードにスナップショットを完了するのに十分なメモリがあることを確認するには、オーバーヘッド用に 20% を予約できるように、 set maxmemory を ノード容量の 80% に維持または設定します。スナップショットのモニタリングに加え、このメモリ オーバーヘッドにより、ワークロードのスナップショットを正常に処理できます。また、レプリカを追加するときは、書き込みトラフィックをできるだけ減らしてください。詳細については、インスタンスのメモリ使用量をモニタリングするをご覧ください。