Risoluzione dei problemi

In questa pagina vengono descritti vari scenari di errore, i relativi messaggi e i passaggi per la risoluzione dei problemi.

Scenari di errore di connettività

Se si verificano problemi di connettività relativi all'istanza, controlla gli scenari in questa sezione per verificare se il problema è causato da uno di questi.

In caso contrario, usa Telnet su uno dei nodi Redis ed esegui alcuni semplici comandi Redis per verificare se l'istanza è reattiva.

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

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

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

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

Errore di connessione causato da 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 telenet 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 ripristina il peering di rete eliminato, quindi puoi eliminarlo e l'istanza Redis originale avrà il peering di rete necessario.

Le regole firewall bloccano gli indirizzi IP dell'istanza

Possono sorgere 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

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

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

Questi comandi possono esercitare un'elevata pressione sulla CPU dell'istanza. Redis open source scoraggia l'esecuzione di KEYS in ambienti di produzione, ma puoi utilizzare SCAN, che è un'alternativa più sicura al comando KEYS. L'utilizzo di LRANGE per eseguire query in tutto lo spazio delle chiavi o su un sottoinsieme ampio può richiedere risorse della CPU elevate. L'utilizzo di uno script Lua complesso con EVAL può causare un utilizzo elevato della CPU.

Inoltre, HGETALL e ZRANGE possono restituire un numero molto elevato di chiavi, incidendo negativamente sulle prestazioni del server.

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

Se l'istanza presenta una latenza elevata o una mancata risposta, controlla i log lato client per verificare se sono stati eseguiti comandi costosi. In tal caso, prendi nota dell'ora. Poi, 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 Networking

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

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

Questi scenari causano 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 assegnando altri indirizzi IP o rimuovendo la discrepanza in conflitto di route. Per ulteriori informazioni su come eseguire questa operazione, vedi Esaurimento dell'intervallo 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 privato ai servizi e non esiste una connessione di accesso privato ai servizi 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 privato ai servizi.

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

Se stabilisci una connessione di accesso privato ai servizi, viene creata una connessione in peering di rete denominata servicenetworking-googleapis-com, che viene visualizzata nella pagina Peering di rete VPC del progetto.

Se elimini il peering di rete, viene visualizzato il seguente errore per le istanze Redis esistenti:

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

Se elimini il peering di rete, verrà 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 Stabilire una connessione di accesso privato ai servizi.

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, riceverai 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 privato ai servizi.

Superamento della quota di subnet per il progetto

È previsto 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 di Google Cloud.

Progetto di servizio non collegato al progetto host

Se utilizzi un 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 il problema, allega il progetto di servizio al progetto host.

Utilizzo incompatibile della modalità di connessione in 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 in peering diretto durante la designazione di una rete VPC condiviso dal progetto host per l'istanza.

Se non imposti un valore per --connection-mode, la modalità di connessione è impostata su direct-peering per impostazione predefinita. Se tenti di utilizzare la modalità di connessione in peering diretto durante la creazione dell'istanza e scegli anche una rete VPC condiviso dal progetto host come valore per --network, ricevi 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 oppure 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 con un indirizzo IP compreso nell'intervallo 172.17.0.0/16 perché questo intervallo è riservato per un componente interno.

Errori di connessione alla tua 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 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 aver abilitato l'aliasing VPC nativo/IP sul cluster. Abilitare il VPC nativo/alias IP durante la creazione dei cluster GKE è più semplice. Quando crei il cluster, seleziona Nativo VPC nelle opzioni avanzate. Per maggiori dettagli, consulta Creazione di cluster nativi di VPC.

Scenari di errore IAM ( Identity and Access Management)

Ripristinare l'associazione dei 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 di criteri per questi account di servizio ti impedisce di creare nuove istanze.

Se tenti di 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 comandi seguenti, 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 che non risponde e/o timeout delle operazioni di istanza/nodo.

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 all'istanza, con un errore di timeout.

Una volta che Google Cloud avrà 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 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.

Il progetto di servizio e il progetto host non si trovano nello stesso perimetro dei controlli di servizio VPC

Se utilizzi un VPC condiviso e un perimetro di controllo di servizio VPC e si verifica il timeout dell'operazione di creazione dell'istanza Redis, è 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 che si connettono alla rete VPC condiviso.

Per verificare se riscontri questo problema, controlla gli audit log dell'istanza Redis per individuare 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.

Risoluzione dei problemi di importazione ed esportazione

Questa sezione illustra alcuni problemi comuni che potresti riscontrare quando utilizzi l'importazione e l'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 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 innanzitutto se nella console Google Cloud o nella riga di comando è presente un messaggio di errore e risolvi gli eventuali problemi descritti nel 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 fare lo scale up 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 si verifica un problema in cui un comando gcloud CLI non è disponibile o se il comando si comporta in modo diverso da come è documentato, prova ad aggiornare gcloud CLI:

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 al fine di fornire un ambiente sicuro e affidabile. Uno dei comandi limitati è CLIENT, che include CLIENT KILL, usato per arrestare i comandi.

Se un comando Redis utilizza molto 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 arresta tutti i comandi in esecuzione sul server Redis e termina tutte le connessioni in corso.

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

Arresto dei comandi nelle istanze Memorystore for Redis di livello standard

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

Arresto dei comandi nelle istanze Memorystore for Redis di livello base

L'unico modo per eseguire il riavvio di un'istanza Memorystore for Redis è modificarne la configurazione, ad esempio facendo 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 aver scalato l'istanza impostandola su una dimensione diversa, puoi eseguire un'altra operazione di scalabilità per riportarla alla dimensione originale.

Problemi relativi al criterio dell'organizzazione per la condivisione limitata dei domini

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

Si verifica un problema noto per cui il criterio dell'organizzazione iam.allowedPolicyMemberDomains causa errori se utilizzato con 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 che è compatibile con il criterio dell'organizzazione. Se è fondamentale mantenere i contenuti della cache, puoi eseguire un'esportazione per il backup dei dati esistenti e un'importazione nella nuova istanza. Tieni presente che un'istanza appena creata ha un nuovo indirizzo IP di servizio che deve essere configurato nell'applicazione.

Opzione 2

Se non è possibile ricreare l'istanza Memorystore, segui la soluzione alternativa Forzare l'accesso all'account.