Risoluzione dei problemi

Questa pagina spiega vari scenari di errore, i messaggi di errore relativi a questi scenari e i passaggi per la risoluzione degli errori.

Scenari di errori di connettività

Se la tua istanza presenta problemi di connettività, controlla gli scenari in questa sezione per vedere se uno di questi causa il problema.

In caso contrario, connettiti tramite Telnet a uno dei tuoi nodi Redis e esegui alcuni semplici comandi Redis per verificare se l'istanza è o meno reattiva.

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

Per connetterti a un'istanza Memorystore da una risorsa Google Cloud, ad esempio una VM Compute Engine, è necessario eseguire il provisioning delle risorse sulla stessa rete VPC autorizzata dell'istanza Redis.

Il tentativo di eseguire Telnet su un'istanza Memorystore da una risorsa in una regione o in una rete VPC diversa 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 eseguire 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 ristabilire il peering di rete eliminato, quindi puoi eliminarlo e l'istanza Redis originale avrà il peering di rete di cui ha bisogno.

Le regole firewall bloccano gli indirizzi IP delle istanze

Possono 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 blocchino l'intervallo IP delle tue istanze Redis.

Scenari di errore relativi a un utilizzo elevato della CPU

Mancata risposta dell'istanza Redis causata dall'uso improprio di comandi Redis costosi

Se la tua istanza Redis presenta latenza elevata, mancata risposta o problemi di connettività, i problemi potrebbero essere causati dall'uso improprio dei seguenti comandi Redis costosi:

Questi comandi possono comportare un carico elevato della CPU sull'istanza. Redis open source dissuade dall'eseguire KEYS negli ambienti di produzione, ma puoi utilizzare SCAN, un'alternativa più sicura al comando KEYS. L'utilizzo di LRANGE per eseguire query su tutto o su un ampio sottoinsieme dello spazio chiavi può richiedere risorse CPU elevate. L'utilizzo di uno script Lua complesso con EVAL può causare un elevato utilizzo della CPU.

HGETALL e ZRANGE possono anche restituire un numero molto elevato di chiavi, con conseguenze negative sul rendimento del server.

Prima di eseguire comandi costosi, devi controllare le dimensioni delle strutture di dati su cui esegue query il comando per assicurarti che non causino latenza.

Se l'istanza presenta una latenza elevata o non risponde, controlla i log lato client per verificare se sono stati eseguiti comandi costosi. Se sì, prendine nota. Successivamente, utilizza Cloud Monitoring per visualizzare la metrica redis.googleapis.com/stats/cpu_utilization. Verifica se i periodi di elevato utilizzo della CPU coincidono con gli stessi periodi in cui sono stati eseguiti i comandi di alto costo.

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 su cui viene eseguita la query in un'unica operazione.

Scenari di errori di Networking

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

Quando crei risorse nell'intervallo di indirizzi IP dedicato a Memorystore per Redis, puoi esaurire tutti gli indirizzi, provocando il messaggio di errore riportato di seguito. In alternativa, potrebbe esserci una route in conflitto con l'indirizzo IP dell'istanza Redis che stai tentando 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.

Per risolvere il problema, puoi allocare indirizzi IP aggiuntivi o rimuovere la discrepanza relativa al conflitto di route. Per ulteriori informazioni su come eseguire questa operazione, consulta Esaurimento degli intervalli di indirizzi IP.

Non hai stabilito una connessione di accesso privato ai servizi per la tua rete

Se la tua istanza Redis utilizza la modalità di connessione di accesso ai servizi privati e non esiste una connessione di accesso ai servizi privati per la tua 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 a servizi privati.

Il peering di rete per l'accesso privato ai servizi viene eliminato

L'impostazione 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 della rete VPC del progetto.

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

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

Se elimini il peering di rete, viene visualizzato 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 di gcloud in Come stabilire una connessione di accesso a servizi privati.

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

Se utilizzi sia il parametro --reserved-ip-range sia 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 o --connect-mode=PRIVATE_SERVICE_ACCESS.

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

Superamento della quota di subnet per il progetto

Esiste un limite al numero di sottoreti che è possibile creare all'interno del progetto. Se superi questa quota, viene visualizzato il seguente messaggio di errore:

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

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 collegato al progetto host

Se utilizzi la VPC condivisa, 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 il problema, collega il progetto di servizio al progetto host.

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

Non puoi creare un'istanza Redis in un progetto di servizio con la modalità di connessione del peering diretto mentre designi una rete VPC condiviso 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 durante la creazione dell'istanza provi a utilizzare la modalità di connessione con peering diretto e scegli anche una rete VPC condiviso dal progetto host come valore per --network, viene visualizzato il seguente errore:

Authorized_network must exist in the same project as redis instance

Per risolvere il 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 Compute Engine con un indirizzo IP compreso nell'intervallo 172.17.0.0/16, perché questo intervallo è riservato a un componente interno.

Errori di connessione all'istanza Redis da altre risorse Google Cloud

Errori di connessione all'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 il Requisito del connettore di accesso VPC serverless.

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

Non puoi connetterti a un'istanza Memorystore for Redis da un cluster GKE senza l'aliasing IP/VPC nativo abilitato sul cluster. È più semplice attivare l'aliasing IP/VPC nativo durante la creazione del cluster GKE. Quando crei il cluster, seleziona Nativo VPC nelle opzioni avanzate. Per maggiori dettagli, consulta Creare cluster nativi di VPC.

Scenari di errori di Identity and Access Management ( IAM)

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

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

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

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

Se in questo scenario tenti di creare un'istanza Redis utilizzando gcloud, 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 comportano un'istanza Redis non rispondente e/o timeout delle operazioni di istanza/nodo.

Errore di partizione di rete

A volte le risorse Google Cloud non riescono a comunicare tra le zone all'interno di una regione a causa di un errore di partizione di rete nei server Google Cloud. Ciò può causare la perdita di connessione dell'istanza, con conseguente 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 caso, potresti visualizzare 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 dei servizi VPC

Se utilizzi un VPC condiviso e un perimetro di Controllo di servizio VPC e l'operazione di creazione dell'istanza Redis scade, è possibile che il progetto di servizio e il progetto host non si trovino nello stesso perimetro di servizio. Il progetto di servizio e il progetto host devono trovarsi nello stesso perimetro affinché l'istanza Redis possa comunicare con i client in connessione tramite la rete VPC condiviso.

Per verificare se si verifica questo problema, controlla i log di controllo dell'istanza Redis per verificare se è presente il seguente errore:

violationReason: "NETWORK_NOT_IN_SAME_SERVICE_PERIMETER"

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

Risolvere i problemi di importazione ed esportazione

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

I pulsanti di importazione ed esportazione sono disattivati nella console Google Cloud

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, controlla prima se nella console Google Cloud o nella riga di comando è presente un messaggio di errore e risolvi eventuali problemi descritti dal messaggio.

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 era troppo grande

Se hai ricevuto il messaggio di errore "La dimensione del file RDB di importazione gs://bucket/object.rdb supera la memoria massima di 10 GB", devi eseguire l'upgrade dell'istanza e riprovare a eseguire l'importazione. Puoi anche provare a importare un file RDB più piccolo nell'istanza.

Risoluzione dei problemi di Google Cloud CLI

Se riscontri un problema per cui un comando gcloud CLI non è disponibile o se il comando si comporta in modo diverso da quanto descritto nella documentazione, prova ad aggiornare gcloud CLI:

gcloud components update

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

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

Se un comando Redis consuma molto l'utilizzo di CPU/RAM e influisce sul tuo ambiente di produzione, devi riavviare l'istanza (per le configurazioni del livello di base) o eseguire il failover in una replica (per le configurazioni del livello standard). Questa operazione di riavvio/failover arresta 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 di Memorystore for Redis.

Comandi di arresto nelle istanze Memorystore for Redis di livello Standard

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

Comandi di arresto nelle istanze Memorystore for Redis di livello Base

L'unico modo per eseguire un riavvio in un'istanza Memorystore for Redis è modificarne la configurazione, ad esempio eseguendo l'upgrade 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 aver scalato l'istanza a una dimensione diversa, puoi eseguire un'altra operazione di scalabilità per ripristinare le dimensioni originali.

Problemi con il criterio dell'organizzazione relativo alla condivisione limitata per i domini

A seconda di quando è stata creata l'istanza, Memorystore for Redis utilizza uno di due diversi formati di account di servizio. Per identificare il formato dell'account di servizio utilizzato dalla tua istanza, consulta Formato dell'account di servizio Memorystore for Redis.

Esiste un problema noto per cui il criterio dell'organizzazione iam.allowedPolicyMemberDomains causa errori se utilizzato con le istanze Memorystore for Redis che utilizzano il formato dell'account di servizio [PROJECT_NUMBER]-compute@developer.gserviceaccount.com.

In questi scenari, potresti riscontrare questo errore: One or more users named in the policy do not belong to a permitted customer.

Esistono due opzioni per risolvere il problema.

Opzione 1

Puoi creare una nuova istanza. Le istanze appena create hanno il formato dell'account di servizio appropriato, compatibile con i criteri dell'organizzazione. Se è fondamentale mantenere i contenuti della cache, puoi eseguire un'esportazione per eseguire il backup dei dati esistenti e un'importazione nella nuova istanza. Tieni presente che un'istanza appena creata ha un nuovo indirizzo IP del servizio che deve essere configurato nella tua applicazione.

Opzione 2

Se non è possibile ricreare l'istanza Memorystore, segui la procedura di forzamento dell'accesso all'account.