Solucionar problemas

En esta página se explican varios casos de error, los mensajes de error correspondientes y los pasos para solucionarlos.

Situaciones de error de conectividad

Si tu instancia tiene problemas de conectividad, consulta los escenarios de esta sección para ver si alguno de ellos está causando el problema.

Si no es así, usa Telnet para conectarte a uno de tus nodos de Redis y ejecuta algunos comandos sencillos de Redis para ver si la instancia responde o no.

Error de conexión debido a recursos aprovisionados en redes de VPC diferentes

Para conectarte a una instancia de Memorystore desde un recurso de Google Cloud, como una VM de Compute Engine, los recursos deben aprovisionarse en la misma red VPC autorizada que la instancia de Redis.

Si intentas conectarte por Telnet a una instancia de Memorystore desde un recurso que se encuentra en otra región o red de VPC, se mostrará el siguiente mensaje de error:

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

Error de conexión debido a que se ha eliminado el emparejamiento de redes VPC

Al crear una instancia de Memorystore para Redis, se crea un emparejamiento de VPC entre tu red VPC y una red VPC interna de Google.

El formato de la interconexión de redes es el siguiente:

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

Si se elimina este emparejamiento de redes, al intentar conectarse por Telnet a la instancia de Redis, se muestra el siguiente mensaje de error:

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

La forma más sencilla de restablecer el emparejamiento de redes eliminado es crear una instancia de Memorystore para Redis. Al crear una instancia de Redis, se vuelve a establecer la conexión de red eliminada, por lo que puedes eliminarla y tu instancia de Redis original tendrá la conexión de red que necesita.

Las reglas de cortafuegos bloquean las direcciones IP de tu instancia

Pueden surgir problemas de conectividad si creas reglas de cortafuegos de salida que bloqueen el puerto de Redis (6379) o la dirección IP de la instancia.

Asegúrate de no crear reglas de cortafuegos de red que bloqueen el intervalo de IPs de tus instancias de Redis.

Situaciones de error con un uso elevado de la CPU

La instancia de Redis no responde debido a un uso inadecuado de comandos de Redis costosos

Si tu instancia de Redis experimenta una latencia alta, no responde o tiene problemas de conectividad, puede que se deban a un uso inadecuado de los siguientes comandos de Redis, que son costosos:

Estos comandos pueden ejercer mucha presión sobre la CPU de tu instancia. Redis de código abierto no recomienda ejecutar KEYS en entornos de producción, pero puedes usar SCAN, que es una alternativa más segura al comando KEYS. Usar LRANGE para consultar todo el espacio de claves o una gran parte de él puede requerir muchos recursos de CPU. Usar un script de Lua complejo con EVAL puede provocar un uso elevado de la CPU.

HGETALL y ZRANGE también pueden devolver un número muy elevado de claves, lo que afecta negativamente al rendimiento de su servidor.

Antes de ejecutar comandos costosos, debes comprobar el tamaño de las estructuras de datos que consulta el comando para asegurarte de que no provoque latencia.

Si tu instancia experimenta una latencia alta o no responde, consulta los registros del lado del cliente para ver si se ha ejecutado algún comando costoso. Si es así, anota la hora. A continuación, usa Cloud Monitoring para ver la métrica redis.googleapis.com/stats/cpu_utilization. Comprueba si los periodos de uso elevado de la CPU coinciden con los periodos en los que se ejecutaron los comandos costosos.

No recomendamos usar el comando KEYS en entornos de producción. Para EVAL, usa secuencias de comandos Lua menos complejas. En el caso de LRANGE, reduce el número de claves del conjunto de claves que se consulta en una sola operación.

Situaciones de error de red

El intervalo de IPs asignado se ha agotado o existe una ruta en conflicto

Cuando creas recursos en el intervalo de direcciones IP dedicado a Memorystore para Redis, puedes agotar todas las direcciones, lo que provoca el mensaje de error que se muestra a continuación. También puede haber una ruta en conflicto con la dirección IP de la instancia de Redis que estás intentando crear.

En estos casos, se muestra el siguiente mensaje de error:

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

Para resolver este problema, asigna más direcciones IP o elimina la discrepancia de conflicto de ruta. Para obtener más información sobre cómo hacerlo, consulta Agotamiento del intervalo de direcciones IP.

No tienes establecida una conexión de acceso a servicios privados para tu red

Si tu instancia de Redis usa el modo de conexión de acceso a servicios privados y no existe una conexión de acceso a servicios privados para tu red, es posible que recibas el siguiente error:

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

Para solucionar este problema, establezca una conexión de acceso de servicios privados.

Se elimina el peering de redes para el acceso a servicios privados

Al establecer una conexión de acceso a servicios privados, se crea una conexión de emparejamiento de redes llamada servicenetworking-googleapis-com, que aparece en la página Emparejamiento entre redes VPC de tu proyecto.

Si eliminas el intercambio de tráfico entre redes, recibirás el siguiente error en las instancias de Redis que ya tengas:

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

Si eliminas el emparejamiento de redes, se producirá el siguiente error al crear una instancia de Redis:

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

Para solucionar este problema, sigue el último paso de las instrucciones de gcloud que se indican en Establecer una conexión de acceso de servicios privados.

Conflictos en las marcas de redes durante la creación de instancias de Redis

Si usa tanto el parámetro --reserved-ip-range como el parámetro --connect-mode=private-service-access, recibirá el siguiente error:

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

Para solucionar este problema, utiliza --reserved-ip-range con --connect-mode=direct-peering o --connect-mode=PRIVATE_SERVICE_ACCESS.

No puedes usar ambos al mismo tiempo, ya que el parámetro --reserved-ip-range no es compatible con el modo de conexión de acceso a servicios privados.

Superar la cuota de subredes de tu proyecto

El número de subredes que se pueden crear en un proyecto está limitado. Si superas esta cuota, recibirás el siguiente mensaje de error:

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

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

Para solucionar este problema, rellene el formulario del mensaje de error o póngase en contacto con el Google Cloud equipo de Asistencia.

El proyecto de servicio no está vinculado al proyecto del host

Si usas VPC compartida, tu proyecto de servicio no estará vinculado a tu proyecto host si recibes el siguiente error:

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

Para solucionar este problema, adjunta tu proyecto de servicio a tu proyecto host.

Uso incompatible del modo de conexión de emparejamiento directo y de la red de VPC compartida durante la creación de la instancia

No puedes crear una instancia de Redis en un proyecto de servicio con el modo de conexión de peering directo mientras designas una red de VPC compartida del proyecto del host para la instancia.

El modo de conexión se define como direct-peering de forma predeterminada si no asignas un valor a --connection-mode. Si intentas usar el modo de conexión de emparejamiento directo durante la creación de la instancia y también eliges una red de VPC compartida del proyecto del host como valor de --network, recibirás el siguiente error:

Authorized_network must exist in the same project as redis instance

Para solucionar este problema, especifica --connect-mode=PRIVATE_SERVICE_ACCESS en el comando de creación de la instancia de Redis o elige una red de VPC autorizada en el mismo proyecto que tu instancia de Redis.

Intervalos de direcciones IP de Compute Engine no admitidos

No puedes acceder a Memorystore para Redis desde máquinas virtuales de Compute Engine que tengan una dirección IP dentro del intervalo 172.17.0.0/16, porque ese intervalo está reservado para un componente interno.

Errores al conectarse a tu instancia de Redis desde otros recursos de Google Cloud

Errores al conectarse a tu instancia desde entornos sin servidor que requieren un conector de acceso a VPC sin servidor

Si no puedes conectarte a una instancia de Redis mediante uno de los entornos sin servidor que requieren un conector de acceso a VPC sin servidor, es posible que no hayas configurado un conector de acceso a VPC sin servidor para tu entorno.

Consulta los requisitos del conector de Acceso a VPC sin servidor para obtener más información.

Errores al conectarse a una instancia mediante un clúster de Google Kubernetes Engine

No puedes conectarte a una instancia de Memorystore para Redis desde un clúster de GKE si no tienes habilitado el alias de IP o la opción nativa de VPC en el clúster. La forma más sencilla de habilitar la VPC nativa o el alias de IP es durante la creación del clúster de GKE. Cuando crees el clúster, selecciona VPC nativa en las opciones avanzadas. Para obtener más información, consulta el artículo Crear clústeres nativos de VPC.

Situaciones de error de gestión de identidades y accesos ( IAM)

Restaurar una vinculación de política eliminada de una cuenta de servicio

Memorystore para Redis usa las siguientes cuentas de servicio para gestionar tus instancias de Redis:

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

Si eliminas las vinculaciones de políticas de estas cuentas de servicio, no podrás crear instancias nuevas.

Si intentas crear una instancia de Redis con gcloud en este caso, es posible que recibas el siguiente mensaje de error:

(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.

Para restablecer el enlace de la política de estas cuentas de servicio, ejecuta uno de los siguientes comandos y sustituye variables por los valores correspondientes. Ejecuta el comando asociado a la cuenta de servicio eliminada.

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'

Errores de tiempo de espera agotado

Los siguientes casos de error provocan que la instancia de Redis no responda o que se agote el tiempo de espera de la operación de instancia o de nodo.

Error de partición de red

A veces, los recursos de Google Cloud no pueden comunicarse entre zonas de una región debido a un error de partición de red en los servidores de Google Cloud. Esto puede provocar que tu instancia pierda la conexión y se produzca un error de tiempo de espera.

Una vez que Google Cloud resuelva el error de partición de red de la región o la zona en la que se ha aprovisionado tu instancia, la conectividad debería volver a funcionar con normalidad.

En este caso, es posible que veas un mensaje de error de conectividad como el siguiente:

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

Si no puede identificar la causa del error de tiempo de espera, póngase en contacto con el Google Cloud equipo de Asistencia.

El proyecto de servicio y el proyecto host no están en el mismo perímetro de control de servicio de VPC

Si usas una VPC compartida y un perímetro de Controles de Servicio de VPC y la operación de creación de tu instancia de Redis agota el tiempo de espera, puede que tu proyecto de servicio y tu proyecto host no estén en el mismo perímetro de servicio. Tu proyecto de servicio y tu proyecto host deben estar en el mismo perímetro para que tu instancia de Redis se comunique con los clientes que se conecten a través de la red de VPC compartida.

Para comprobar si tienes este problema, consulta los registros de auditoría de tu instancia de Redis para ver si aparece el siguiente error:

violationReason: "NETWORK_NOT_IN_SAME_SERVICE_PERIMETER"

Para solucionar este problema, coloque su red de host y su red de servicio en el mismo perímetro de servicio.

Solucionar problemas de importación y exportación

En esta sección se describen algunos problemas habituales que pueden surgir al usar la importación y la exportación en Memorystore para Redis.

Los botones Importar y Exportar están inhabilitados en la consola Google Cloud

Problema: el usuario que ha iniciado sesión en la consola no tiene los permisos de redis.instances.import o redis.instances.export necesarios para importar o exportar archivos RDB.

Solución: concede los permisos al usuario y actualiza la página de detalles de la instancia.

La operación de importación se ha completado, pero los datos no se han restaurado

Si una operación de importación se completa, pero los datos no se restauran, primero comprueba si hay algún mensaje de error en la Google Cloud consola o en la línea de comandos y resuelve los problemas que se describan en el mensaje de error.

Si se produce un error durante el proceso de importación, la instancia se recupera mediante un archivo RDB vacío. Puedes intentar restaurar los datos importando el mismo archivo RDB de nuevo o usando otro archivo RDB.

No se ha podido importar porque el archivo RDB era demasiado grande

Si has recibido el mensaje de error "Import RDB file gs://bucket/object.rdb size exceeds max memory 10GB" (El tamaño del archivo RDB gs://bucket/object.rdb supera la memoria máxima de 10 GB), debes aumentar la capacidad de tu instancia y volver a intentar la importación. También puedes probar a importar un archivo RDB más pequeño en tu instancia.

Solucionar problemas de Google Cloud CLI

Si tienes algún problema con un comando de la CLI de gcloud que no está disponible o si el comando se comporta de forma diferente a como se describe en la documentación, prueba a actualizar la CLI de gcloud:

gcloud components update

Detener todos los comandos y conexiones en curso de una instancia de Redis

Como Memorystore para Redis es un producto gestionado por Google, hay algunos comandos que están bloqueados en tu instancia de Redis para proporcionar un entorno seguro y fiable. Uno de los comandos restringidos es CLIENT, que incluye CLIENT KILL, que se usa para detener comandos.

Si un comando de Redis consume mucha CPU o RAM y afecta a tu entorno de producción, debes reiniciar la instancia (en las configuraciones de nivel básico) o conmutar por error a una réplica (en las configuraciones de nivel estándar). Esta operación de reinicio o conmutación por error detiene todos los comandos que se estén ejecutando en el servidor Redis y finaliza todas las conexiones en curso.

A continuación, se muestran los comandos para realizar reinicios o conmutaciones por error de cada configuración de Memorystore para Redis.

Detener comandos en instancias de Memorystore para Redis de nivel Estándar

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

Detener comandos en instancias de Memorystore para Redis de nivel básico

La única forma de reiniciar una instancia de Memorystore para Redis es cambiar su configuración, como aumentar la escala de la instancia. A continuación, se muestra un ejemplo de comando que puedes ejecutar para reiniciar tu instancia.

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

Después de cambiar el tamaño de la instancia, puedes volver a cambiarlo para que tenga el tamaño original.

Problemas con la política de organización de uso compartido restringido al dominio

En función de cuándo se haya creado tu instancia, Memorystore para Redis usará uno de los dos formatos de cuenta de servicio. Para identificar el formato de cuenta de servicio que usa tu instancia, consulta Formato de cuenta de servicio de Memorystore para Redis.

Hay un problema conocido por el que la política de la organización iam.allowedPolicyMemberDomains provoca errores cuando se usa con instancias de Memorystore para Redis que usan el formato de cuenta de servicio [PROJECT_NUMBER]-compute@developer.gserviceaccount.com.

En estos casos, puede aparecer este error: One or more users named in the policy do not belong to a permitted customer.

Hay dos formas de resolver este problema.

Opción 1

Puedes crear una instancia. Las instancias recién creadas tienen el formato de cuenta de servicio adecuado, que es compatible con la política de la organización. Si es fundamental mantener el contenido de la caché, puedes realizar una exportación para crear una copia de seguridad de los datos y una importación a la nueva instancia. Ten en cuenta que una instancia recién creada tiene una nueva dirección IP de servicio que debe configurarse en tu aplicación.

Opción 2

Si no es posible volver a crear tu instancia de Memorystore, sigue la solución alternativa Forzar el acceso a la cuenta.