Risolvere i problemi

Questa pagina spiega i vari scenari di errore, i messaggi di errore relativi a tali scenari e le procedure per la risoluzione degli errori.

Scenari di errore di connettività

Se l'istanza riscontra problemi di connettività, controlla gli scenari in questa sezione per verificare se uno di questi causa il problema.

In caso contrario, avvia Telnet su uno dei tuoi nodi Redis e esegui alcuni semplici comandi Redis per verificare se l'istanza è adattabile o meno.

Errore di connessione causato dalle risorse di cui è stato eseguito il provisioning in reti VPC diverse

Per connetterti a un'istanza Memorystore da una risorsa Google Cloud, come una VM di Compute Engine, il provisioning delle risorse deve essere eseguito sulla stessa rete VPC autorizzata dell'istanza Redis.

Il tentativo di eseguire il Telnet su un'istanza Memorystore da una risorsa in una regione diversa o da una rete VPC genera il seguente messaggio di errore:

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

Errore di connessione causato dal peering di rete VPC eliminato

La creazione di un'istanza Memorystore for Redis crea un peering VPC tra la tua rete VPC e una rete VPC interna di Google.

Il peering di rete utilizza il seguente formato:

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

Se questo peering di rete viene eliminato, il tentativo di Telnet all'istanza Redis genera il seguente messaggio di errore:

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

Il modo più semplice per ristabilire il peering di rete eliminato è creare una nuova istanza di Memorystore for Redis. La creazione di una nuova istanza Redis consente di ripristinare il peering di rete eliminato, in modo che tu possa eliminarlo, mentre l'istanza Redis originale ha il peering di rete di cui ha bisogno.

Le regole firewall bloccano gli indirizzi IP dell'istanza

Potrebbero verificarsi problemi di connettività se crei regole firewall in uscita che bloccano la porta Redis (6379) o l'indirizzo IP dell'istanza.

Assicurati di non creare regole firewall di rete che bloccano l'intervallo IP delle tue istanze Redis.

Scenari di errore di utilizzo elevato della CPU

La mancata risposta dell'istanza Redis causa un uso improprio dei costosi comandi Redis

Se l'istanza Redis presenta problemi di latenza elevata, mancata risposta o connettività, i problemi possono essere causati da un utilizzo improprio dei seguenti comandi Redis costosi:

Questi comandi possono esercitare un'elevata pressione della CPU sull'istanza. discoteca Redis open source che esegue KEYS negli ambienti di produzione. L'uso di LRANGE per eseguire query su tutto o su un sottoinsieme secondario del tuo spazio delle chiavi può richiedere risorse CPU elevate. L'utilizzo di uno script Lua complesso con EVAL può causare un elevato utilizzo della CPU.

Se l'istanza riscontra un'elevata latenza o non risponde, controlla i log lato client per vedere se sono stati eseguiti comandi costosi. In tal caso, prendi nota dell'ora. Successivamente, utilizza Cloud Monitoring per visualizzare la metrica redis.googleapis.com/stats/cpu_utilization. Verifica se i periodi di utilizzo elevato della CPU coincidono con gli stessi periodi in cui sono stati eseguiti i comandi costosi.

Sconsigliamo di utilizzare il comando KEYS negli ambienti di produzione. Per EVAL, utilizza script Lua meno complessi. Per LRANGE, riduci il numero di chiavi nel set di chiavi oggetto di query in una singola operazione.

Scenari di errore di rete

L'intervallo IP allocato è esaurito o esiste una route in conflitto

Quando crei risorse nell'intervallo di indirizzi IP dedicato a Memorystore per Redis, puoi esaurire tutti gli indirizzi, causando il messaggio di errore riportato di seguito. In alternativa, potrebbe esserci un percorso in conflitto con l'indirizzo IP dell'istanza Redis che stai cercando di creare.

Questi scenari generano il seguente messaggio di errore:

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

Puoi risolvere il problema allocando indirizzi IP aggiuntivi o rimuovendo la discrepanza dei conflitti di route. Per ulteriori informazioni su come eseguire questa operazione, vedi Esaurimento dell'intervallo di indirizzi IP.

Non è stata stabilita una connessione di accesso privato ai servizi per la tua rete

Se l'istanza Redis utilizza la modalità di connessione di accesso privato ai servizi e non esiste una connessione di accesso ai servizi privati per la rete, potresti ricevere il seguente errore:

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

Per risolvere il problema, stabilisci una connessione di accesso privato ai servizi.

Il peering di rete per l'accesso ai servizi privati è stato eliminato

La creazione di una connessione di accesso privato ai servizi crea una connessione di peering di rete denominata servicenetworking-googleapis-com, che viene visualizzata nella pagina Peering di rete VPC del tuo progetto.

L'eliminazione del peering di rete causa il seguente errore per le istanze Redis esistenti:

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

L'eliminazione del peering di rete causa il seguente errore durante la creazione di un'istanza Redis:

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

Per risolvere il problema, segui l'ultimo passaggio delle istruzioni riportate nella sezione Stabilire una connessione di accesso privato ai servizi.

Flag di networking in conflitto durante la creazione dell'istanza Redis

Se utilizzi sia il parametro --reserved-ip-range che il parametro --connect-mode=private-service-access, viene visualizzato il seguente errore:

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

Per risolvere il problema, utilizza --reserved-ip-range con --connect-mode=direct-peering oppure --connect-mode=PRIVATE_SERVICE_ACCESS.

Non puoi utilizzare entrambi contemporaneamente, perché il parametro --reserved-ip-range non è supportato per la modalità di connessione di accesso ai servizi privati.

Superare la quota di subnet per il tuo progetto

Esiste un limite al numero di subnet che possono essere create all'interno del progetto. Se superi questa quota, riceverai il seguente messaggio di errore:

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

Per risolvere il problema, compila il modulo nel messaggio di errore o contatta l'assistenza Google Cloud.

Progetto di servizio non associato al progetto host

Se utilizzi VPC condiviso, il progetto di servizio non è collegato al progetto host se ricevi il seguente errore:

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

Per risolvere questo problema, collega il progetto di servizio al progetto host.

Utilizzo incompatibile della modalità di connessione in peering diretto e della rete VPC condivisa durante la creazione dell'istanza

Non puoi creare un'istanza Redis in un progetto di servizio con la modalità di connessione in peering diretto durante la designazione di una rete VPC condivisa dal progetto host per l'istanza.

La modalità di connessione è impostata su direct-peering per impostazione predefinita se non imposti un valore per --connection-mode. Se tenti di utilizzare la modalità di connessione in peering diretto durante la creazione dell'istanza e scegli anche una rete VPC condivisa dal progetto host come valore per --network, ricevi il seguente errore:

Authorized_network must exist in the same project as redis instance

Per risolvere questo problema, assicurati di specificare --connect-mode=PRIVATE_SERVICE_ACCESS nel comando di creazione dell'istanza Redis o scegli una rete VPC autorizzata nello stesso progetto dell'istanza Redis.

Intervalli di indirizzi IP di Compute Engine non supportati

Non puoi accedere a Memorystore for Redis dalle VM di Compute Engine che hanno un indirizzo IP compreso nell'intervallo 172.17.0.0/16, perché tale intervallo è riservato a un componente interno.

Errori durante la connessione all'istanza Redis da altre risorse Google Cloud

Errori di connessione alla tua istanza da ambienti serverless che richiedono un connettore di accesso VPC serverless

Se non riesci a connetterti a un'istanza Redis utilizzando uno degli ambienti serverless che richiedono un connettore di accesso VPC serverless, è possibile che tu non abbia configurato un connettore di accesso VPC serverless per il tuo ambiente.

Per ulteriori dettagli, consulta Requisito del connettore di accesso VPC serverless.

Errori durante la connessione all'istanza tramite un cluster Google Kubernetes Engine

Non puoi connetterti a un'istanza Memorystore for Redis da un cluster GKE senza alias nativo di VPC/IP abilitato sul cluster. È più semplice abilitare l'aliasing VPC nativo/IP durante la creazione del cluster GKE. Quando crei il cluster, seleziona VPC Native in Opzioni avanzate. Per maggiori dettagli, consulta la sezione Creazione di cluster nativi VPC.

Scenari di errore per Identity and Access Management ( IAM)

Ripristino di un'associazione dei criteri eliminata per un account di servizio

Memorystore for Redis utilizza i seguenti account di servizio per gestire le istanze Redis:

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

L'eliminazione delle associazioni di criteri per questi account di servizio impedisce di creare nuove istanze.

Se provi a creare un'istanza Redis utilizzando gcloud in questo scenario, potresti ricevere il seguente messaggio di errore:

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

Per ristabilire l'associazione dei criteri per questi account di servizio, esegui uno dei seguenti comandi, sostituendo variables con i valori appropriati. Esegui il comando associato all'account di servizio eliminato.

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'

Errori di timeout dell'operazione

I seguenti scenari di errore generano un'istanza Redis e/o timeout dell'operazione istanza/node che non rispondono.

Errore di partizione di rete

A volte le risorse Google Cloud non possono comunicare tra zone all'interno di una regione a causa di un errore di partizione di rete nei server Google Cloud. Ciò può causare la perdita della connessione dell'istanza, con un errore di timeout.

Dopo che Google Cloud ha risolto l'errore di partizione di rete per la regione o la zona in cui è stato eseguito il provisioning dell'istanza, la connettività dovrebbe riprendere normalmente.

In questo scenario, potresti vedere un messaggio di errore di connettività come il seguente:

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

Se non riesci a identificare la causa dell'errore di timeout, contatta l'assistenza Google Cloud.

Progetto di servizio e progetto host non nello stesso perimetro di controllo del servizio VPC

Se utilizzi VPC condiviso e un controllo di servizio VPC e l'operazione di creazione dell'istanza Redis scade, potrebbe indicare che il tuo progetto di servizio e il progetto host non si trovano nello stesso perimetro di servizio. Il progetto di servizio e il progetto host devono essere nello stesso perimetro affinché l'istanza Redis possa comunicare con i client di connessione sulla rete VPC condiviso.

Per vedere se stai riscontrando questo problema, controlla negli audit log dell'istanza Redis il seguente errore:

violationReason: "NETWORK_NOT_IN_SAME_SERVICE_PERIMETER"

Per risolvere questo problema, inserisci la rete host e la rete di servizio nello stesso perimetro di servizio.

Risoluzione dei problemi di importazione ed esportazione

Questa sezione descrive alcuni problemi comuni che potresti riscontrare durante l'importazione e l'esportazione per Memorystore for Redis.

I pulsanti di importazione ed esportazione sono disattivati in Google Cloud Console

Problema: l'utente che ha eseguito l'accesso alla console non dispone delle autorizzazioni redis.instances.import e/o redis.instances.export necessarie per importare e/o esportare i file RDB.

Soluzione: concedi le autorizzazioni all'utente e aggiorna la pagina dei dettagli dell'istanza.

L'operazione di importazione è stata completata, ma i dati non sono stati ripristinati

Se un'operazione di importazione viene completata, ma i dati non vengono ripristinati, verifica innanzitutto se nella console Google Cloud o nella riga di comando è presente un messaggio di errore e risolvi gli eventuali problemi descritti dal messaggio di errore.

Se si verifica un errore durante il processo di importazione, l'istanza viene recuperata utilizzando un file RDB vuoto. Puoi tentare di ripristinare i dati importando di nuovo lo stesso file RDB o utilizzando un file RDB diverso.

L'importazione non è riuscita perché il file RDB è troppo grande

Se hai ricevuto il messaggio di errore "Import RDB file gs://bucket/object.rdb size supera la dimensione massima di 10 GB", devi fare lo scale up dell'istanza e ritentare l'importazione. Puoi anche provare a importare un file RDB più piccolo nella tua istanza.

Risoluzione dei problemi relativi all'interfaccia a riga di comando di Google Cloud

Se riscontri un problema in cui un comando dell'interfaccia a riga di comando gcloud non è disponibile o se il comportamento si comporta in modo diverso da come è documentato, prova ad aggiornare l'interfaccia a riga di comando gcloud:

gcloud components update

Arresto di tutti i comandi e le connessioni in corso per un'istanza Redis

Poiché Memorystore per Redis è un prodotto gestito da Google, alcuni comandi sono bloccati nell'istanza Redis per fornire un ambiente sicuro e affidabile. Uno dei comandi limitati è CLIENT, che include CLIENT KILL, utilizzato per interrompere i comandi.

Se un comando Redis consuma molto utilizzo della CPU/RAM e influisce sull'ambiente di produzione, devi riavviare l'istanza (per le configurazioni di livello base) o eseguire il failover in una replica (per le configurazioni di livello standard). Questa operazione di riavvio/failover interrompe tutti i comandi in esecuzione sul server Redis e termina tutte le connessioni in corso.

Di seguito sono riportati i comandi per eseguire riavvii o failover per ogni configurazione Memorystore for Redis.

Arresto dei comandi nelle istanze Memorystore di livello Standard per Redis

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

Arresto dei comandi nelle istanze Memorystore di livello base per Redis

L'unico modo per eseguire un riavvio in un'istanza Memorystore for Redis è modificarne la configurazione, ad esempio fare lo scale up dell'istanza. Di seguito è riportato un esempio di comando che puoi eseguire per riavviare l'istanza.

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

Dopo che hai ridimensionato l'istanza a una dimensione diversa, puoi eseguire un'altra operazione di scalabilità per riportarla alla dimensione originale.