Dépannage

Cette page explique différents scénarios d'erreur, les messages d'erreur correspondant à ces scénarios et les étapes 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 déterminer si l'un d'entre eux est à l'origine du problème.

Si ce n'est pas le cas, Telnet se connecte à l'un de vos nœuds Redis et exécutez quelques commandes Redis simples pour vérifier si l'instance est réactive ou non.

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

Pour permettre la connexion à 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 à Telnet vers une instance Memorystore depuis une ressource située dans une autre région ou un autre réseau VPC génère le message d'erreur suivant:

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

Erreur de connexion causée par l'appairage de réseaux VPC supprimé

La création d'une instance Memorystore pour Redis crée un appairage 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é, toute tentative d'accès à l'instance Redis par Telnet 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é. Vous pouvez donc le supprimer, et votre 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.

Assurez-vous de ne pas créer de règles de pare-feu réseau qui bloquent la plage d'adresses IP de vos instances Redis.

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

Réactivité de l'instance Redis causée par une utilisation inappropriée des commandes Redis coûteuses

Si votre instance Redis présente des problèmes de latence, de réponse ou de connectivité élevés, ceux-ci peuvent être causés par une utilisation inappropriée des commandes Redis coûteuses suivantes:

Ces commandes peuvent mettre une pression importante sur le processeur sur votre instance. Les objets Redis Open Source qui exécutent KEYS sont dans les environnements de production. Utiliser LRANGE pour interroger la totalité ou une grande partie 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 élevée du processeur.

Si l'instance présente une latence élevée ou ne répond pas, vérifiez vos journaux côté client pour déterminer si une commande coûteuse a été exécutée. Si tel est le cas, 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 concident avec les mêmes périodes où des commandes coûteuses ont été exécutées.

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

Scénarios d'erreurs 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ées à Memorystore pour Redis, vous pouvez épuiser toutes les adresses, ce qui entraîne le message d'erreur ci-dessous. Il est également possible qu'une route soit en conflit avec l'adresse IP de l'instance Redis que vous essayez de créer.

Ces situations 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 plus d'informations sur la procédure à suivre, consultez la section é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 connexion de l'accès aux services privés et qu'aucune connexion d'accès aux services privés n'existe pour votre réseau, le message d'erreur suivant 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é

Établir 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 la réception 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 la réception 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 décrites dans la section Établir une connexion d'accès aux services privés.

Conflits d'indicateurs de mise en réseau lors de la création d'une instance Redis

Si vous utilisez à la fois les paramètres --reserved-ip-range et --connect-mode=private-service-access, vous obtenez l'erreur suivante:

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

Pour résoudre ce problème, utilisez --reserved-ip-range avec --connect-mode=direct-peering ou --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 un 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 inclus 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 connexion d'appairage direct et du réseau VPC partagé lors de la création de l'instance

Vous ne pouvez pas créer une instance Redis dans un projet de service avec le mode connexion d'appairage direct lors de la désignation d'un réseau VPC partagé à partir du projet hôte de l'instance.

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

Authorized_network must exist in the same project as redis instance

Pour résoudre ce problème, veillez à spécifier --connect-mode=PRIVATE_SERVICE_ACCESS dans la commande de création d'instance Redis ou à sélectionner 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 des VM Compute Engine dont l'adresse IP est comprise dans la plage 172.17.0.0/16, car cette plage est réservée à un composant interne.

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

Erreurs de connexion à votre instance à partir d'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, vous n'avez peut-être pas configuré de connecteur d'accès au VPC sans serveur pour votre environnement.

Pour en savoir plus, consultez la section Configuration requise pour le 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 l'alias d'adresse IP native ou de VPC sur votre cluster. Il est plus facile d'activer la création d'alias de VPC natif/IP lors de la création du cluster GKE. Lors de la création de votre 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 de gestion de l'authentification et des accès ( 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 les 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 de nouvelles 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 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 d'expiration du délai de l'opération

Les scénarios d'erreur suivants entraînent une expiration de l'instance Redis et/ou de l'instance/du nœud qui ne répond pas.

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 la perte de connexion de l'instance, et entraîner une erreur de délai avant expiration.

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

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

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

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

Le projet de service et le projet hôte ne se trouvent pas dans le même périmètre VPC Service Controls

Si vous utilisez un VPC partagé et un périmètre VPC Service Controls, 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 communique avec les clients connectés via le réseau VPC partagé.

Pour voir si vous rencontrez ce problème, vérifiez les journaux d'audit de votre instance Redis pour obtenir 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 services 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 Cloud Console

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 "Détails de l'instance".

L'opération d'importation s'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 Cloud Console ou la ligne de commande, puis résolvez les éventuels problèmes décrits par le message d'erreur.

En cas d'échec lors du 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.

Échec de l'importation, car le fichier RDB est trop volumineux

Si vous avez reçu le message d'erreur "Importer le fichier RDB gs://bucket/object.rdb, vous dépassez la mémoire maximale de 10 Go. Effectuez alors un scaling à la hausse de votre instance, puis relancez l'importation. Vous pouvez également essayer d'importer un fichier RDB plus petit dans votre instance.

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

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

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, utilisée pour arrêter les commandes.

Si une commande Redis consomme beaucoup d'utilisation de processeurs/RAM et affecte votre environnement de production, vous devez redémarrer l'instance (pour les configurations de niveau de base) ou pour basculer vers une instance dupliquée (pour les configurations de niveau standard). Cette opération de redémarrage/basculement arrête toutes les commandes exécutées sur le serveur Redis et met fin à toutes les connexions en cours.

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

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

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

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

Le seul moyen d'effectuer un redémarrage dans une instance Memorystore pour Redis consiste à modifier sa configuration, par exemple en augmentant l'instance. 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 rétablir à sa taille d'origine.