Memorystore for Redis のベスト プラクティス

このページは、Memorystore for Redis の最適な使用に関するガイダンスです。このページでは、回避すべき潜在的な問題についても説明します。

トラブルシューティングのシナリオの一覧については、トラブルシューティングをご覧ください。

RDB のエクスポート

RDB バックアップをエクスポートする場合は、次のガイダンスを使用します。

リソースを大量に消費するオペレーション

標準階層の Redis インスタンスの場合、次のオペレーションではオペレーション中に追加のメモリが使用されます。

バージョン アップグレード、スケーリング、手動フェイルオーバーは、レプリケーションのために追加のメモリが使用されます(標準階層の場合)。これらのオペレーションは、標準階層インスタンスのアップグレード動作で説明しているレプリケーション プロセスに従います。

インポート / エクスポートのオペレーションでは、これらのオペレーションに関連付けられた Redis の分岐プロセスやコピーオンライトでのデータ管理のために、追加メモリが必要です。

リソース集約型のオペレーションのデメリットを軽減するには、次を行う必要があります。

  • オペレーション中に、maxmemory 構成をインスタンスの容量の 80% に引き下げます。これにより、正常なオペレーションに十分なオーバーヘッドが操作が提供されます。
  • システムメモリ使用率の指標をモニタリングして、これらのオペレーションのいずれかを実行する前に、この指標が 80% を下回ることを確認してください。
  • インスタンスのトラフィックが少ない期間(夜間や週末など)に、これらのオペレーションを実行します。
  • これらのオペレーションを実行する前に、指数バックオフで再試行ロジックを実行しておく必要があります。

接続の再試行が必要なオペレーションとシナリオ

次の操作とシナリオでは、ネットワークと Redis インスタンスの間のネットワーク接続が切断されます。

これらのオペレーションにより、一時的な接続ブレークを必要とするインスタンスが変更されます。アプリケーションが自動的に再接続され、引き続き正常に機能するように、これらのオペレーションを実行する前に指数バックオフで再試行ロジックを設定しておく必要があります。

定期的なメンテナンス

Memorystore for Redis インスタンスでは、定期的にメンテナンスが実施されます。詳細については、Memorystore for Redis のメンテナンス ポリシーをご覧ください。

定期的なメンテナンスに備えるために、次のベスト プラクティスを実施してください。

メモリ管理

オープンソース Redis では、よく知られるメモリの断片化が発生するため、メモリ管理が難しくなる場合があります。メモリ負荷が高い場合は、インスタンスの maxmemory 構成を下げて、オーバーヘッドを設定することをおすすめします。

Memorystore インスタンスのメモリ プレッシャーをモニタリングする最善の方法は、システムメモリ使用率の指標を使用することです。Memorystore for Redis のメモリを管理する方法について詳しくは、メモリ管理のベスト プラクティスをご覧ください。

アイドル状態の接続の管理

接続が適切に終了されていない場合、時間の経過とともに Memorystore インスタンスへの接続数が増加することがあります。これは特に、容量階層に基づいて最大接続数の制限を課す転送中の暗号化を使用している場合に、パフォーマンスに悪影響を与える可能性があります。この問題を軽減するには、timeout Redis 構成パラメータを使用することをおすすめします。このパラメータを使用すると、アイドル状態のクライアント接続が自動的に終了するまでの秒数を設定できます。

アクセスの透明性のリソース名

機密データは Memorystore for Redis リソース名に保存しないでください。リソース名とは、Memorystore for Redis インスタンス名や、タグなどのインスタンス メタデータを指します。リソース名に保存されたデータは、 Google Cloud アクセスの透明性によって保護されるとは限りません。また、組織のアクセスの透明性に関するコンプライアンス要件と競合する可能性があります。

一部のサーバーレス環境に必要なサーバーレス VPC アクセス コネクタ

一部のサーバーレス環境では、Memorystore for Redis に接続するためにサーバーレス VPC アクセス コネクタが必要です。これらの環境のいずれかを使用して接続する場合は、プロジェクト用のサーバーレス VPC アクセス コネクタを設定します。

ネットワーキング

プライベート サービス アクセス接続モードを使用することをおすすめします。Memorystore for Redis では、プライベート サービス アクセスとダイレクト ピアリングの 2 つの接続モードを使用します。プライベート サービス アクセス接続モードでは、IP 範囲の管理がシンプルになり、必要に応じて共有 VPC を使用できます。

インスタンスを作成した後に、接続モードを変更することはできません。

詳しくは、ネットワーキングをご覧ください。

モニタリングとアラート

Redis インスタンスのメモリ使用量に関する主要な指標を得るために、モニタリングアラートの使用をおすすめします。また、受信するキャッシュ リクエストに対して Redis インスタンスがどの程度効率的に応答しているかもわかります。

次のデフォルトのアラートを設定する必要があります。

CPU 使用率のベスト プラクティス

高コストな redis コマンドの不適切な使用は、高レイテンシ、低い応答性、接続の問題につながります。スタンダード ティアのインスタンスは、障害復旧時に高可用性を提供し、プライマリ ノードとレプリカノード間の非同期レプリケーションに依存します。いずれかのノードで Redis メインスレッドをブロックする高コストのコマンド処理が行われている場合、レプリケーションが影響を受ける可能性があります。問題が解決せず、ロケーションが停止した場合は、停止したロケーションに書き込まれた最新のデータが他のロケーションで使用できない場合があります。

レプリカが読み取りレプリカとして指定されている場合、Cloud Monitoring を使用して、メインスレッド CPU 秒redis.googleapis.com/stats/cpu_utilization_main_thread)指標にアラートを設定し、CPU 使用率がプライマリ ノードで 0.8 秒、各レプリカノードで 0.5 秒を超えないようにすることをおすすめします。

Redis インスタンスが推奨値を超えている場合は、インスタンスを上位の容量ティアスケーリングするか、CPU 使用率の高いオペレーションを回避するためにトラブルシューティング手順に従うことをおすすめします。

リソースを大量に消費するコマンド

リソースを大量に消費する Redis コマンドは使用しないことを強くおすすめします。これらのコマンドを使用すると、次のパフォーマンスの問題が発生する可能性があります。

  • レイテンシが高く、クライアントがタイムアウトする
  • メモリ使用量を増やすコマンドが原因のメモリ不足
  • Redis メインスレッドがブロックされているため、ノードのレプリケーションと同期中にデータ損失が発生する
  • ヘルスチェック、オブザーバビリティ、レプリケーションの不足

次の表に、リソースを大量に消費する Redis コマンドの例と、リソース効率の高い代替コマンドを示します。

カテゴリ リソースを大量に消費するコマンド リソース効率の高い代替手段
キースペース全体で実行する KEYS SCAN
可変長鍵セットに対して実行する LRANGE クエリに使用する範囲のサイズを制限します。
ZRANGE クエリに使用する範囲のサイズを制限します。
HGETALL HSCAN
SMEMBERS SSCAN
スクリプトの実行をブロックする EVAL スクリプトが無限に実行されないようにします。
EVALSHA スクリプトが無限に実行されないようにします。
ファイルとリンクを削除する DELETE UNLINK
パブリッシュとサブスクライブ PUBLISH SPUBLISH
SUBSCRIBE SSUBSCRIBE