このページでは、Memorystore for Valkey のアーキテクチャが高可用性(HA)を提供、サポートする方法について説明します。このページでは、推奨される HA 構成を使用してインスタンスのパフォーマンスと安定性を向上させる方法についても説明します。
高可用性
Memorystore for Valkey は、クライアントがマネージド Memorystore for Valkey ノードに直接アクセスする高可用性アーキテクチャを基盤として構築されています。クライアントは、Memorystore for Valkey インスタンスに接続するの説明に従って、個々のエンドポイントに接続することでこれを行います。
シャードに直接接続すると、次のメリットがあります。
直接接続では中間ホップが回避されるため、クライアントと Memorystore for Valkey ノード間のラウンドトリップ時間(クライアント レイテンシ)が最小限に抑えられます。
クラスタモードが有効になっている場合、各シャードは独立して障害が発生するように設計されているため、直接接続により単一障害点を回避できます。たとえば、複数のクライアントからのトラフィックがスロット(キースペース チャンク)を過負荷にした場合、シャード障害はスロットの処理を担当するシャードに影響を限定します。
推奨構成
信頼性が向上するため、シングルゾーン インスタンスではなく、高可用性のマルチゾーン インスタンスを作成することをおすすめします。ただし、レプリカなしでインスタンスをプロビジョニングする場合は、シングルゾーン インスタンスを選択することをおすすめします。詳細については、シングルゾーン インスタンスを使用するタイミングをご覧ください。
インスタンスの高可用性を有効にするには、シャードごとに少なくとも 1 つのレプリカをプロビジョニングする必要があります。これは、インスタンスの作成時に行うか、シャードごとに少なくとも 1 つのレプリカにレプリカ数をスケーリングできます。レプリカは、計画メンテナンス中や予期しないシャード障害が発生した場合に自動フェイルオーバーを提供します。
クライアントのベスト プラクティスのガイダンスに沿ってクライアントを構成することをおすすめします。推奨されるベスト プラクティスを使用することで、クライアントはダウンタイムなしでインスタンスの次の項目を自動的に処理できます。
- ロール(自動フェイルオーバー)
- エンドポイント(ノードの置換)
- クラスタモード有効に関連するスロット割り当ての変更(コンシューマーのスケールアウトとスケールイン)
レプリカ
高可用性の Memorystore for Valkey インスタンスはリージョン リソースです。Memorystore for Valkey は、シャードのプライマリ VM とレプリカ VM を複数のゾーンに分散して、ゾーンの停止から保護します。Memorystore for Valkey では、シャードあたり 0 ~ 5 個のレプリカを持つインスタンスがサポートされています。
レプリカを使用すると、読み取りスループットを向上させることができますが、データが古くなる可能性があります。
- クラスタモードが有効:
READONLYコマンドを使用して、クライアントがレプリカから読み取ることができる接続を確立します。 - クラスタモードが無効: リーダー エンドポイントに接続して、使用可能なレプリカに接続します。
クラスタモードが有効なインスタンスの例
次の図は、クラスタモードが有効なインスタンスの例を示しています。
3 つのシャードとシャードごとに 0 個のレプリカを持つインスタンスの例

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

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

クラスタモードが無効になっているインスタンスの例
次の図は、クラスタモードが無効なインスタンスの例を示しています。
複数のレプリカを含むインスタンスの例

フェイルオーバーがアプリケーションに与える影響
Memorystore for Valkey がレプリカをプライマリ インスタンスに昇格させると、インスタンスのプライマリ エンドポイントへの既存の接続が切断されます。自動修復とメンテナンス イベントの間、インスタンスは平均 30 秒間使用できなくなります。
インスタンスが使用可能になると、Memorystore for Valkey は同じ接続文字列または IP アドレスを使用して、アプリケーションを新しいプライマリ インスタンスに自動的にリダイレクトします。アプリケーションを更新する必要はありません。
フェイルオーバー中に読み取りエンドポイントへの接続がある場合、Memorystore for Valkey は、プライマリ インスタンスに昇格するレプリカへの接続を切断します。ただし、Memorystore for Valkey は他のレプリカへの接続をドロップしません。フェイルオーバーが完了し、新しいレプリカが使用可能になると、Memorystore for Valkey は接続を新しいレプリカにリダイレクトします。
自動フェイルオーバー
シャード内の自動フェイルオーバーは、メンテナンスまたはプライマリ ノードの予期しない障害が原因で発生することがあります。フェイルオーバー中に、レプリカがプライマリに昇格されます。レプリカを明示的に構成できます。また、内部メンテナンス中に、ダウンタイムを回避するために追加のレプリカを一時的にプロビジョニングすることもできます。
自動フェイルオーバーにより、メンテナンス アップデート中のデータ損失を防ぐことができます。メンテナンス中の自動フェイルオーバーの動作の詳細については、メンテナンス中の自動フェイルオーバーの動作をご覧ください。
フェイルオーバーとノード修復の所要時間
プライマリ ノード プロセスのクラッシュやハードウェア障害などの計画外のイベントの場合、自動フェイルオーバーに数十秒かかることがあります。この間に、システムは障害を検出し、レプリカを新しいプライマリとして選択します。
ノードの修復では、サービスが障害のあるノードを置き換えるまでに数分かかることがあります。これは、すべてのプライマリ ノードとレプリカノードに当てはまります。高可用性ではないインスタンス(レプリカがプロビジョニングされていない)の場合、障害が発生したプライマリ ノードの修復にも数分かかります。
計画外のフェイルオーバー中のクライアントの動作
障害の性質によっては、クライアント接続がリセットされる可能性があります。自動復旧後、指数バックオフを使用して接続を再試行し、プライマリ ノードとレプリカノードの過負荷を回避できます。
読み取りスループットにレプリカを使用しているクライアントは、障害が発生したノードが自動的に置き換えられるまで、一時的に容量が低下する可能性があります。
書き込みの消失
予期しない障害によるフェイルオーバー中に、Valkey のレプリケーション プロトコルの非同期性により、確認済みの書き込みが失われる可能性があります。
クライアント アプリケーションは、Valkey WAIT コマンドを利用して、実際のデータ セーフティを向上させることができます。
単一ゾーンの停止がキースペースに与える影響
このセクションでは、単一ゾーンの停止が Memorystore for Valkey インスタンスに与える影響について説明します。
マルチゾーン インスタンス
HA インスタンス: ゾーンが停止した場合、キースペース全体で読み取りと書き込みが可能ですが、一部のリードレプリカが使用できないため、読み取り容量が減少します。まれに発生する単一ゾーンの停止時にインスタンスに十分な読み取り容量が確保されるように、クラスタ容量をオーバープロビジョニングすることを強くおすすめします。停止が終了すると、影響を受けたゾーンのレプリカが復元され、クラスタの読み取り容量が構成された値に戻ります。詳細については、スケーラブルで信頼性の高いアプリのパターンをご覧ください。
非 HA インスタンス(レプリカなし): ゾーンが停止すると、影響を受けるゾーンにプロビジョニングされているキースペースの部分でデータフラッシュが発生し、停止期間中は書き込みや読み取りができなくなります。サービスが復旧すると、影響を受けたゾーンのプライマリが復元され、クラスタの容量が構成された値に戻ります。
シングルゾーン インスタンス
- HA インスタンスと非 HA インスタンスの両方: インスタンスがプロビジョニングされているゾーンが停止すると、クラスタは使用できなくなり、データはフラッシュされます。別のゾーンで障害が発生しても、クラスタは読み取りリクエストと書き込みリクエストの処理を継続します。
ベスト プラクティス
このセクションでは、高可用性とレプリカのベスト プラクティスについて説明します。
レプリカを追加する
レプリカを追加するには、RDB スナップショットが必要です。RDB スナップショットは、プロセス フォークと「コピーオンライト」メカニズムを使用して、インスタンスのスナップショットを作成します。ノードへの書き込みパターンに応じて、書き込みによってアクセスされたページがコピーされると、ノードの使用メモリが増加します。メモリ使用量は、ノード内のデータの最大 2 倍になることがあります。
ノードにスナップショットを完了するのに十分なメモリがあることを確認するには、maxmemory をノード容量の 80% に設定または維持して、20% がオーバーヘッド用に予約されるようにします。スナップショットのモニタリングに加え、このメモリ オーバーヘッドにより、ワークロードのスナップショットを正常に処理できます。また、レプリカを追加するときは、書き込みトラフィックをできるだけ減らしてください。詳細については、インスタンスのメモリ使用量をモニタリングするをご覧ください。