このページでは、標準階層の Memorystore for Redis インスタンスの高可用性(HA)について説明します。
概要
スタンダード ティアでは、データを 1 つ以上のレプリカに複製し、レプリカへの高速の自動フェイルオーバーを提供することで、Redis インスタンスを一般的な障害から保護します。
スタンダード ティアでは、1 つのプライマリと 1 つ以上のレプリカがプロビジョニングされます。readReplicaMode
が無効になっているスタンダード ティア インスタンスには、単一の非リードレプリカがあります。readReplicaMode
が有効になっているスタンダード ティア インスタンスには、1~5 個のリードレプリカがあります。readReplicaMode
が有効になっているかどうかを確認するには、リードレプリカ情報の表示をご覧ください。
Memorystore for Redis では、Redis プライマリを 1 つ以上のレプリカに複製することで高可用性を実現します。プライマリのデータに加えられた変更は、Redis 非同期レプリケーション プロトコルを使用してレプリカにコピーされます。レプリケーションは非同期なので、プライマリへの書き込みレートによっては、レプリカがプライマリより遅れる場合があります。
プライマリに障害が発生すると、インスタンスは自動的にレプリカにフェイルオーバーします。複数のレプリカが構成されたインスタンスの場合、正常なレプリケーション ラグが最小のレプリカにフェイルオーバーします。
インスタンスに 1 つの非リードレプリカが構成されている場合、すべてのアプリケーション接続がプライマリ エンドポイントに転送されます。インスタンスがリードレプリカを使用して構成されている場合は、読み取りエンドポイントを使用してすべてのレプリカに読み取りクエリを分散できます。
フェイルオーバーがトリガーされるとき
Redis プライマリに障害が発生すると、フェイルオーバーが発生します。フェイルオーバー中、プライマリ エンドポイントと読み取りエンドポイントは自動的に新しいプライマリとレプリカにリダイレクトされます。プライマリ エンドポイントへのすべての接続が切断され、昇格したリードレプリカへの読み取りエンドポイント接続も切断されます。
フェイルオーバーがアプリケーションに与える影響
プライマリがレプリカにフェイルオーバーすると、インスタンスのプライマリ エンドポイントへの既存の接続が切断されます。新しいプライマリが再接続している間、インスタンスは数秒間使用できなくなります。再接続時には、アプリケーションが同じ接続文字列または IP アドレスを使用して自動的に新しいプライマリにリダイレクトされます。フェイルオーバー後にアプリケーションを更新する必要はありません。
フェイルオーバー中に読み取りエンドポイントへの接続が存在する場合、プライマリに昇格されているレプリカへの接続が切断されます。他のレプリカへの接続は、フェイルオーバー中も引き続き処理されます。フェイルオーバーが完了し、新しいレプリカが使用可能になると、接続は新しいレプリカにリダイレクトされます。
フェイルオーバー後のインスタンス接続の再試行
フェイルオーバーが発生すると、プライマリ エンドポイントからのすべての接続が切断され、レプリカの数によっては一部の読み取り接続が終了します。
この接続の切断により、アプリケーションは接続を再確立するために再試行する必要があります。再試行ロジックには指数バックオフを使用して、インスタンスの再試行リクエストが多すぎて過負荷にならないことを確認してください。再試行ロジックを追加するだけでなく、手動フェイルオーバーでテストして、フェイルオーバーがアプリケーションに与える影響をテストする必要があります。
ほとんどの Redis クライアントには、フェイルオーバーが原因で接続が解除された場合に活用すべき組み込みの再試行機能が用意されています。
フェイルオーバーは、次のような状況で発生します。
フェイルオーバーを原因とする接続の切断に対処するためにアプリケーションに再試行ロジックを実装すると、インスタンスのパフォーマンスに大きな影響が生じることを回避できます。通常、再試行ロジックがないことが問題が発生する唯一の原因になります。
高可用性のステータスを表示する方法
Redis インスタンスの高可用性の指標は、Cloud Monitoring を使用して確認できます。Cloud Monitoring が Memorystore for Redis 用に提供している指標については、Redis インスタンスのモニタリングとモニタリング指標をご覧ください。
詳細については、Cloud Monitoring のドキュメントをご覧ください。
Redis が提供するネイティブのレプリケーション ステータスを確認する場合は、Memorystore for Redis インスタンスに対して Redis INFO コマンドを実行します。