問題のトラブルシューティング

このページでは、さまざまなエラーのシナリオと、それらのエラーを解決するためのガイダンスについて説明します。

レプリケーションのシナリオ

このセクションでは、クラスタで発生する可能性のあるレプリケーションの問題について説明します。

レプリケーションの遅延をモニタリングするにはどうすればよいですか?

Memorystore for Redis Cluster には /cluster/replication/maximum_offset_diff 指標があります。この指標は、プライマリ クラスタ内のノードの最大レプリケーション オフセット差分(バイト単位)をモニタリングします。

レプリケーション オフセットの差を小さくすることで、レプリカは増分同期オペレーションをフル同期オペレーションよりも頻繁に、低コストで実行できます。

maximum_offset_diff 指標のしきい値を設定することをおすすめします。しきい値を超えると、Memorystore for Redis Cluster はアラートで通知します。

クラスタのノードタイプに基づいて、次のようにしきい値を設定することをおすすめします。

  • ノードタイプが redis-shared-core-nanoredis-standard-smallredis-highmem-mediumredis-highcpu-medium、または redis-standard-large の場合は、しきい値を 64 MB 未満に設定します。

  • ノードタイプが redis-highmem-xlarge または redis-highmem-2xlarge の場合は、しきい値を 1 GB 未満に設定します。

接続性エラーのシナリオ

このセクションでは、クラスタで発生する可能性のある接続性の問題について説明します。

ファイアウォール ルールによる接続エラー

ファイアウォール ルールでは、Memorystore for Redis Cluster で使用されるポートをブロックすることによる接続エラーが発生することがあります。クラスタの両方の Private Service Connect エンドポイントで、TCP ポート 11000 ~ 13047 を許可します。これらのエンドポイントの詳細については、予約済みネットワーク アドレスをご覧ください。

組織のポリシーによる接続エラー

クラスタへの Private Service Connect 接続をブロックする組織のポリシーが設定されている可能性があります。

組織のポリシーで .restrictPrivateServiceConnectProducer ポリシーを使用している場合は、フォルダ 961333125034(Memorystore for Redis Cluster 専用のフォルダ)を許可します。次に例を示します。

name: organizations/Consumer-org-1/policies/compute.restrictPrivateServiceConnectProducer
spec:
    rules:
      - values:
          allowedValues:
          - under:folders/961333125034

組織のポリシーで .disablePrivateServiceConnectCreationForConsumers ポリシーを使用している場合は、SERVICE_PRODUCERS を許可します。次に例を示します。

name: organizations/Consumer-org-1/policies/compute.disablePrivateServiceConnectCreationForConsumers
spec:
    rules:
      - values:
          allowedValues:
          - SERVICE_PRODUCERS

応答しない接続による接続エラー

Memorystore for Redis Cluster への応答のない接続を検出するようにクライアント アプリケーションを構成することを強くおすすめします。応答のない接続が検出された場合、クライアントは接続をリセットする必要があります。復元力のあるアプリケーションを構築するには、次のクライアント構成をおすすめします。

  • TCP keep-alive パラメータを構成する: 接続がアイドル状態の場合でも、クライアントが応答のない接続を積極的に検出して切断するように、TCP keepalive timeTCP keepalive intervalTCP keepalive probes パラメータを設定します。たとえば、TCP keepalive time パラメータを 30 秒、TCP keepalive interval を 10 秒、TCP keepalive probes を 3 に設定すると、クライアントは 1 分以内に応答のないアイドル状態の接続をリセットします。
  • TCP ユーザー タイムアウトを構成する: 未処理のリクエストがあり、応答を停止している接続をリセットするために、クライアントでこのタイムアウトを設定します。たとえば、タイムアウトを 15 秒に設定すると、クライアントは未処理のリクエストがある応答のない接続を 15 秒後にリセットします。

CPU 使用率のシナリオ

このセクションでは、クラスタで発生する可能性がある CPU 使用率の問題について説明します。

クラスタの出力バッファの容量が不足している

クラスタの出力バッファの容量が不足した場合は、次の操作を行います。

  • maxmemory パラメータに小さい値を設定します。
  • allkeys-lru maxmemory ポリシーを使用します。

クラスタのメモリがいっぱいになり、新しい書き込みが発生すると、Memorystore for Redis Cluster はクラスタの maxmemory ポリシーに基づいてキーを削除し、書き込み用にスペースを確保します。allkeys-lru ポリシーは、キーセット全体から最も長い間使用されていない(LRU)キーを削除します。

クラスタの maxmemory と使用済みメモリをモニタリングすることをおすすめします。これにより、クラスタがプロビジョニングされたクラスタ容量に達したかどうかを確認できます。また、maxmemory パラメータの値を減らすことで、オーバーヘッド用のスペースを増やすことができます。

クラスタの外部指標が表示されないのはなぜですか?

クラスタの CPU 使用率が高い場合や、クラスタのリソースが枯渇した場合(接続が多すぎるなど)、クラスタが誤動作し、外部指標が欠落する可能性があります。

クラスタのレイテンシの原因を特定する

発生しているレイテンシがクラスタに起因するものか、クライアント アプリケーションとネットワーク環境に起因するものかを判断するには、redis-cli ツールを使用して継続的なレイテンシ テストを実行します。

クラスタのレイテンシの原因を特定するには、次の操作を行います。

  1. クラスタと同じリージョンと VPC ネットワークにある Compute Engine VM に接続します。

  2. まだインストールしていない場合は、VM に redis-cli ツールをインストールします。

    • Debian または Ubuntu ベースの VM の場合は、次のコマンドを実行します。

      sudo apt-get install redis-tools
      
    • RHEL または CentOS ベースの VM の場合は、次のコマンドを実行します。

      sudo yum install redis
      
  3. クラスタのレイテンシをミリ秒単位で測定するには、次のコマンドを実行します。

    redis-cli --latency -h DISCOVERY_ENDPOINT_ADDRESS -p PORT
    

    クラスタで転送中の暗号化を使用する場合は、--tls フラグを追加して、接続する認証局(CA)を指定する必要があります。

    次のように置き換えます。

    • DISCOVERY_ENDPOINT_ADDRESS: クラスタの検出エンドポイントの IP アドレス。
    • PORT: クラスタの検出エンドポイント用に予約されているポート番号。通常、このポート番号は 6379 です。
  4. コマンドを数分間実行します。このツールは、サーバーに継続的に ping を送信し、最小値、最大値、平均レイテンシ値を計算します。

  5. コマンドの実行を停止して結果を表示するには、Ctrl+C を押します。

コマンドの出力で平均レイテンシが常に低い(通常は 1 ミリ秒以下)場合、クラスタは正常で、迅速に応答しています。

コマンドでサーバーのパフォーマンスが正常に表示されるにもかかわらず、クライアント アプリケーションで遅延が発生する場合は、次の問題がレイテンシの原因となっている可能性があります。

  • ネットワーク: クライアントとクラスタ間の異なるリージョンまたはゾーン間でルーティングされるトラフィックにより、ネットワーク遅延が大幅に発生する可能性があります。
  • クライアント: クライアントでの CPU またはメモリの使用率が高い、接続プールの枯渇、アプリケーション ロジックのボトルネックにより、クライアントが経験する合計ラウンドトリップ時間が増加する可能性があります。

永続性のシナリオ

このセクションでは、クラスタで発生する可能性のある永続性の問題について説明します。

書き込みトラフィックが、AOF 書き換えによる Memorystore for Redis Cluster のスペースの圧縮と再利用の能力を超えている

この状況が発生すると、追記専用ファイル(AOF)が書き換えプロセスで管理できるよりも速く増大します。これにより、ディスクが枯渇し、書き込みエラーが発生し、レプリカの作成と完全同期を必要とするオペレーションがブロックされます。

Memorystore for Redis Cluster は、書き込みスループットを調整するガードレールを実装しました。これにより、AOF の書き換えは、持続的な高書き込みワークロードに対応できます。