Résoudre les problèmes

Cette page décrit les différents scénarios d'erreur, les messages d'erreur associés et la procédure de dépannage pour résoudre les erreurs.

Scénarios d'erreur de connectivité

Si votre instance rencontre des problèmes de connectivité, consultez les scénarios de cette section pour savoir si l'un d'eux est à l'origine du problème.

Si ce n'est pas le cas, connectez telnet à l'un de vos nœuds Redis et exécutez de simples commandes Redis pour vérifier si l'instance répond ou pas.

Erreur de connexion provoquée par des ressources provisionnées dans des réseaux VPC différents

Pour se connecter à une instance Memorystore à partir d'une ressource Google Cloud, telle qu'une VM Compute Engine, les ressources doivent être provisionnées sur le même réseau VPC autorisé que l'instance Redis.

Toute tentative de connexion à une instance Memorystore à partir d'une ressource située dans une région ou un réseau VPC différent entraîne le message d'erreur suivant :

telnet: Unable to connect to remote host: Connection timed out

Erreur de connexion provoquée par un appairage de réseaux VPC supprimé

La création d'une instance Memorystore pour Redis crée un appairage de VPC entre votre réseau VPC et un réseau VPC interne de Google.

L'appairage de réseaux utilise le format suivant :

redis-peer-############

Si cet appairage de réseaux est supprimé, la tentative de connexion Telnet vers l'instance Redis génère le message d'erreur suivant :

telnet: Unable to connect to remote host: Connection timed out

Le moyen le plus simple de rétablir l'appairage de réseaux supprimé consiste à créer une instance Memorystore pour Redis. La création d'une instance Redis rétablit l'appairage de réseaux supprimé, de sorte que vous puissiez la supprimer et que l'instance Redis d'origine dispose de l'appairage de réseaux dont elle a besoin.

Les règles de pare-feu bloquent les adresses IP de votre instance

Des problèmes de connectivité peuvent survenir si vous créez des règles de pare-feu de sortie qui bloquent le port Redis (6379) ou l'adresse IP de l'instance.

Veillez à ne pas créer de règles de pare-feu de réseau susceptibles de bloquer la plage d'adresses IP de vos instances Redis.

Scénarios d'erreur d'utilisation élevée du processeur

Absence de réponse de l'instance Redis en raison d'une mauvaise utilisation des commandes coûteuses de Redis

Si votre instance Redis rencontre des problèmes de latence élevée, d'absence de réponse ou de connectivité, ceux-ci peuvent être dus à une mauvaise utilisation des commandes coûteuses suivantes de Redis :

Ces commandes peuvent entraîner une pression importante du processeur sur l'instance. Redis Open Source déconseille l'exécution de KEYS dans les environnements de production, mais vous pouvez utiliser SCAN, qui est une alternative plus sûre à la commande KEYS. L'utilisation de LRANGE pour interroger la totalité ou un sous-ensemble de votre espace de clés peut nécessiter des ressources de processeur élevées. L'utilisation d'un script Lua complexe avec EVAL peut entraîner une utilisation intensive du processeur.

HGETALL et ZRANGE peuvent également renvoyer un très grand nombre de clés, ce qui peut nuire aux performances de votre serveur.

Avant d'exécuter des commandes coûteuses, vous devez vérifier la taille des structures de données que la commande interroge pour vous assurer qu'elle n'entraînera pas de latence.

Si votre instance rencontre un problème de latence élevée ou d'absence de réponse, consultez les journaux côté client pour déterminer si une commande coûteuse a été exécutée. Si oui, notez l'heure. Ensuite, utilisez Cloud Monitoring pour afficher la métrique redis.googleapis.com/stats/cpu_utilization. Vérifiez si les périodes d'utilisation élevée du processeur coïncident avec les mêmes périodes d'exécution des commandes coûteuses.

Nous vous déconseillons d'exécuter la commande KEYS dans les environnements de production. Utilisez des scripts Lua moins complexes avec la commande EVAL. Pour LRANGE, réduisez le nombre de clés de la collection de clés interrogée dans une seule opération.

Scénarios d'erreur réseau

La plage d'adresses IP allouée est épuisée ou une route en conflit existe

Lorsque vous créez des ressources dans la plage d'adresses IP dédiée à Memorystore pour Redis, vous pouvez épuiser toutes les adresses, ce qui entraîne le message d'erreur ci-dessous. Il peut également y avoir une route en conflit avec l'adresse IP de l'instance Redis que vous essayez de créer.

Ces scénarios entraînent le message d'erreur suivant:

The IP ranges for the connection do not have enough available IPs. Allocate a new range or expand existing range and try again.

Vous pouvez résoudre ce problème en attribuant des adresses IP supplémentaires ou en supprimant l'écart de conflit de routes. Pour savoir comment procéder, consultez Épuisement de la plage d'adresses IP.

Aucune connexion d'accès aux services privés n'est établie pour votre réseau.

Si votre instance Redis utilise le mode de connexion d'accès aux services privés et qu'une connexion d'accès aux services privés n'existe pas pour votre réseau, l'erreur suivante peut s'afficher :

Google private service access is not enabled. Enable private service access and try again

Pour résoudre ce problème, établissez une connexion d'accès aux services privés.

L'appairage de réseaux pour l'accès aux services privés est supprimé

L'établissement d'une connexion d'accès aux services privés crée une connexion d'appairage de réseaux appelée servicenetworking-googleapis-com, qui apparaît sur la page Appairage de réseaux VPC de votre projet.

La suppression de l'appairage de réseaux entraîne l'affichage de l'erreur suivante pour les instances Redis existantes :

  • telnet: Unable to connect to remote host: Connection timed out

La suppression de l'appairage de réseaux entraîne l'affichage de l'erreur suivante lors de la création d'une instance Redis :

  • Private services access is not configured correctly. For steps on how to verify the connection, check the documentation.

Pour résoudre ce problème, suivez la dernière étape des instructions gcloud de la section Établir une connexion d'accès aux services privés.

Options de mise en réseau en conflit lors de la création d'une instance Redis

Si vous utilisez les paramètres --reserved-ip-range et --connect-mode=private-service-access, le message d'erreur suivant s'affiche :

Reserved IP range is not supported for --connect-mode private services access

Pour résoudre ce problème, utilisez soit le paramètre --reserved-ip-range avec --connect-mode=direct-peering, soit le paramètre --connect-mode=PRIVATE_SERVICE_ACCESS.

Vous ne pouvez pas utiliser les deux en même temps, car le paramètre --reserved-ip-range n'est pas compatible avec le mode de connexion d'accès aux services privés.

Dépassement du quota de sous-réseaux pour votre projet

Le nombre de sous-réseaux pouvant être créés dans votre projet est limité. Si vous dépassez ce quota, le message d'erreur suivant s'affiche :

Internal network quota exceeded. Please request higher limit here: https://forms.gle/ZfVduUGq2iSYcYGm8 ou

Unable to create instance. Network quota limit has been reached. Please request higher limit here: https://forms.gle/ZfVduUGq2iSYcYGm8

Pour résoudre ce problème, remplissez le formulaire dans le message d'erreur ou contactez l'assistance Google Cloud.

Projet de service non associé au projet hôte

Si vous utilisez un VPC partagé, votre projet de service n'est pas associé à votre projet hôte si vous recevez l'erreur suivante :

Invalid network name <network-name>. Project <project-name> referenced is not the host project for <service-project-name>.

Pour résoudre ce problème, associez votre projet de service à votre projet hôte.

Utilisation incompatible du mode de connexion par appairage direct et du réseau VPC partagé lors de la création de l'instance

Vous ne pouvez pas créer d'instance Redis dans un projet de service avec le mode de connexion par appairage direct tout en désignant un réseau VPC partagé à partir du projet hôte pour l'instance.

Le mode de connexion est défini par défaut sur direct-peering si vous ne définissez pas de valeur pour --connection-mode. Si vous essayez d'utiliser le mode de connexion par appairage direct lors de la création de l'instance et que vous choisissez également un réseau VPC partagé à partir du projet hôte comme valeur pour --network, l'erreur suivante s'affiche :

Authorized_network must exist in the same project as redis instance

Pour résoudre ce problème, veillez à spécifier le paramètre --connect-mode=PRIVATE_SERVICE_ACCESS dans votre commande de création d'instance Redis ou à choisir un réseau VPC autorisé dans le même projet que votre instance Redis.

Plages d'adresses IP Compute Engine non compatibles

Vous ne pouvez pas accéder à Memorystore pour Redis à partir de VM Compute Engine dont l'adresse IP est comprise dans la plage 172.17.0.0/16, car celle-ci est réservée à un composant interne.

Erreurs de connexion à votre instance Redis à partir d'autres ressources Google Cloud

Erreurs lors de la connexion à votre instance depuis des environnements sans serveur nécessitant un connecteur d'accès au VPC sans serveur

Si vous ne parvenez pas à vous connecter à une instance Redis à l'aide de l'un des environnements sans serveur nécessitant un connecteur d'accès au VPC sans serveur , il est possible que vous n'ayez pas configuré de connecteur d'accès au VPC sans serveur pour votre environnement.

Pour en savoir plus, consultez la section Exigences relatives au connecteur d'accès au VPC sans serveur.

Erreurs lors de la connexion à votre instance à l'aide d'un cluster Google Kubernetes Engine

Vous ne pouvez pas vous connecter à une instance Memorystore pour Redis à partir d'un cluster GKE sans activer le VPC natif/les adresses IP d'alias sur votre cluster. Il est plus simple d'activer le VPC natif/les adresses IP d'alias lors de la création du cluster GKE. Lors de la création du cluster, sélectionnez VPC natif sous Options avancées. Pour en savoir plus, consultez la page Créer des clusters de VPC natif.

Scénarios d'erreur Identity and Access Management (IAM)

Restaurer une liaison de stratégie supprimée pour un compte de service

Memorystore pour Redis utilise les comptes de service suivants pour gérer vos instances Redis :

  • service-project-number@service-networking.iam.gserviceaccount.com
  • service-project-number@cloud-redis.iam.gserviceaccount.com

La suppression des liaisons de stratégie pour ces comptes de service vous empêche de créer des instances.

Si vous essayez de créer une instance Redis à l'aide de gcloud dans ce scénario, le message d'erreur suivant peut s'afficher :

(gcloud.redis.instances.create) FAILED_PRECONDITION: A required IAM policy might be missing. Please run this command:"gcloud projects add-iam-policy-binding <YOUR-PROJECT-ID> --member='serviceAccount:service-<YOUR-PROJECT-NUMBER>@cloud-redis.iam.gserviceaccount.com' --role='roles/redis.serviceAgent'" and try again.

Pour rétablir la liaison de stratégie pour ces comptes de service, exécutez l'une des commandes suivantes en remplaçant les variables par les valeurs appropriées. Exécutez la commande associée au compte de service supprimé.

gcloud projects add-iam-policy-binding project-id --member='serviceAccount:service-project-number@service-networking.iam.gserviceaccount.com' --role='roles/servicenetworking.serviceAgent'
gcloud projects add-iam-policy-binding project-id --member='serviceAccount:service-project-number@cloud-redis.iam.gserviceaccount.com' --role='roles/redis.serviceAgent'

Erreurs de délai d'attente d'une opération

Les scénarios d'erreur suivants entraînent une absence de réponse de l'instance Redis et/ou des délais d'attente d'une opération instance/nœud.

Erreur de partition réseau

Parfois, les ressources Google Cloud ne peuvent pas communiquer entre les zones d'une région en raison d'une erreur de partition réseau sur les serveurs Google Cloud. Cela peut entraîner une perte de connexion de l'instance et renvoyer une erreur de délai d'attente.

Une fois que Google Cloud a résolu l'erreur de partition réseau pour la région ou la zone où votre instance est provisionnée, la connectivité doit reprendre normalement.

Dans ce scénario, un message d'erreur de connectivité peut s'afficher :

telnet: Unable to connect to remote host: Connection timed out

Si vous ne parvenez pas à identifier la cause de l'erreur de délai d'attente, contactez l'assistance Google Cloud.

Projet de service et projet hôte ne faisant pas partie du même périmètre de contrôle de service VPC

Si vous utilisez un VPC partagé et un périmètre de contrôle de service VPC, et que votre opération de création d'instance Redis expire, cela peut indiquer que votre projet de service et votre projet hôte ne se trouvent pas dans le même périmètre de service. Votre projet de service et votre projet hôte doivent se trouver dans le même périmètre pour que votre instance Redis puisse communiquer avec les clients se connectant via le réseau VPC partagé.

Pour vérifier la présence de ce problème, consultez les journaux d'audit de votre instance Redis pour rechercher l'erreur suivante :

violationReason: "NETWORK_NOT_IN_SAME_SERVICE_PERIMETER"

Pour résoudre ce problème, placez votre réseau hôte et votre réseau de service dans le même périmètre de service.

Résoudre les problèmes d'importation et d'exportation

Cette section décrit certains problèmes courants que vous pouvez rencontrer lors de l'utilisation de l'importation et de l'exportation pour Memorystore pour Redis.

Les boutons d'importation et d'exportation sont désactivés dans la console Google Cloud

Problème : l'utilisateur connecté à la console ne dispose pas des autorisations redis.instances.import et/ou redis.instances.export requises pour importer et/ou exporter des fichiers RDB.

Solution : accordez les autorisations à l'utilisateur et actualisez la page des détails de l'instance.

L'opération d'importation est terminée, mais les données n'ont pas été restaurées.

Si une opération d'importation se termine, mais que les données ne sont pas restaurées, recherchez d'abord un message d'erreur dans la console Google Cloud ou la ligne de commande, puis résolvez les problèmes décrits par le message d'erreur.

En cas d'échec pendant le processus d'importation, l'instance est récupérée à l'aide d'un fichier RDB vide. Vous pouvez essayer de restaurer les données en important à nouveau le même fichier RDB ou en utilisant un autre fichier RDB.

L'importation a échoué, car le fichier RDB était trop volumineux.

Si le message d'erreur "La taille d'un fichier d'importation RDB gs://bucket/object.rdb dépasse la mémoire maximale de 10 Go" s'affiche, vous devez augmenter la taille de votre instance et relancer l'importation. Vous pouvez également essayer d'importer un fichier RDB plus petit dans votre instance.

Résoudre les problèmes liés à Google Cloud CLI

Si vous rencontrez un problème où une commande de gcloud CLI n'est pas disponible ou si la commande se comporte différemment de la documentation, essayez de mettre à jour la gcloud CLI:

gcloud components update

Arrêter toutes les commandes et connexions en cours pour une instance Redis

Memorystore pour Redis étant un produit géré par Google, certaines commandes sont bloquées dans votre instance Redis afin de fournir un environnement sûr et fiable. L'une des commandes restreintes est CLIENT, qui inclut CLIENT KILL, permettant d'arrêter les commandes.

Si une commande Redis consomme une grande utilisation du processeur ou de la RAM et affecte votre environnement de production, vous devez redémarrer l'instance (pour les configurations de niveau de base), ou basculer vers une instance dupliquée (pour les configurations de niveau Standard). Cette opération de redémarrage/basculement interrompt toutes les commandes en cours d'exécution sur le serveur Redis et met fin à toutes les connexions en cours.

Vous trouverez ci-dessous les commandes permettant d'effectuer des redémarrages ou des basculements pour chaque configuration de Memorystore pour Redis.

Arrêter des commandes dans des instances Memorystore pour Redis de niveau standard

gcloud redis instances failover INSTANCE_NAME --data-protection-mode=limited-data-loss

Arrêter des commandes dans des instances Memorystore pour Redis de niveau de base

Le seul moyen d'effectuer un redémarrage d'une instance Memorystore pour Redis consiste à modifier sa configuration, par exemple un scaling à la hausse. Vous trouverez ci-dessous un exemple de commande que vous pouvez exécuter pour redémarrer votre instance.

gcloud redis instances update INSTANCE_NAME --region REGION_ID --size NUMBER_GB

Après avoir mis à l'échelle votre instance à une autre taille, vous pouvez exécuter une autre opération de scaling pour la ramener à la taille d'origine.

Problèmes liés à la règle d'administration concernant le partage restreint du domaine

Selon la date de création de votre instance, Memorystore pour Redis utilise l'un des deux formats de compte de service différents. Pour identifier le format de compte de service utilisé par votre instance, consultez la section Format de compte de service Memorystore pour Redis.

Dans un problème connu, la règle d'administration iam.allowedPolicyMemberDomains génère des erreurs lorsqu'elle est utilisée avec des instances Memorystore pour Redis au format de compte de service [PROJECT_NUMBER]-compute@developer.gserviceaccount.com.

Dans ces scénarios, vous pouvez rencontrer l'erreur suivante : One or more users named in the policy do not belong to a permitted customer.

Deux options s'offrent à vous pour résoudre ce problème.

Option 1

Vous pouvez créer une instance. Les instances nouvellement créées ont le format de compte de service approprié, compatible avec la règle d'administration. S'il est essentiel de conserver le contenu du cache, vous pouvez effectuer une exportation pour sauvegarder les données existantes et une importation dans la nouvelle instance. Notez qu'une nouvelle instance possède une nouvelle adresse IP de service qui doit être configurée dans votre application.

Option 2

S'il est impossible de recréer votre instance Memorystore, suivez la solution Forcer l'accès au compte.