In questa pagina vengono descritti i vari scenari di errore, i relativi messaggi di errore scenari e procedure di risoluzione dei problemi per risolvere gli 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, invia Telnet a uno dei tuoi nodi Redis ed esegui alcuni semplici comandi Redis per vedere se l'istanza è reattiva o meno.
- Se il nodo non risponde, prova a risolvere eventuali problemi In Scenari di errore di rete che bloccano la connessione di rete del nodo. In caso contrario, contatta l'assistenza Google Cloud.
Errore di connessione causato da risorse di cui è stato eseguito il provisioning in reti VPC diverse
Per connettersi a un'istanza Memorystore da 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 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 formato seguente:
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, in modo da poterlo eliminare e l'istanza Redis originale avrà il peering di rete di cui ha bisogno.
Le regole firewall bloccano gli indirizzi IP dell'istanza
Se crei regole firewall in uscita che bloccano il traffico, possono verificarsi problemi di connettività Porta Redis (6379) o indirizzo IP dell'istanza.
Assicurati di non creare regole firewall di rete che blocchino l'intervallo IP delle tue istanze Redis.
Scenari di errore di 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'elevata pressione della CPU sull'istanza. Redis open source dissuade dall'eseguire KEYS
in 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 un impatto negativo 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. In questo caso, prendi nota dell'ora.
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
in ambienti di produzione. Per EVAL
, utilizza script Lua meno complessi. Per LRANGE
, riduci il numero di chiavi in
al set di chiavi interrogato in un'unica operazione.
Scenari di errori di rete
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 l'istanza Redis utilizza la modalità di connessione di accesso privato ai servizi e un accesso privato ai servizi una connessione non esiste per la tua rete, potresti visualizzare 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 viene eliminato
L'impostazione di una connessione di accesso privato ai servizi
crea una connessione di peering di rete chiamata
servicenetworking-googleapis-com
, che viene visualizzata nella pagina Peering di rete VPC del progetto.
Se elimini il peering di rete, ricevi il seguente errore per istanze Redis esistenti:
telnet: Unable to connect to remote host: Connection timed out
Se elimini il peering di rete, ricevi il seguente errore quando creando 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 gcloud in Creazione di 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
che --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 della 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
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 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 tuo 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 il peering diretto modalità di connessione che designa 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 condivisa 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 che si connettono 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.
Vedi Requisito del connettore di accesso VPC serverless per ulteriori dettagli.
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 Creazione di cluster nativi di VPC.
Scenari di errore 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 Istanze Redis:
- service-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 ti impedisce di essere 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 che un'istanza Redis non risponda 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 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.
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 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 condivisa.
Per verificare se riscontri questo problema, controlla gli audit log della tua istanza Redis per il seguente errore:
violationReason: "NETWORK_NOT_IN_SAME_SERVICE_PERIMETER"
Per risolvere il problema, inserisci la rete host e la rete di servizi nel lo stesso perimetro di servizio.
Risolvere i problemi di importazione ed esportazione
Questa sezione illustra alcuni problemi comuni che potresti riscontrare durante l'utilizzo delle funzioni di importazione e per Memorystore for Redis.
I pulsanti di importazione ed esportazione sono disabilitati 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 il file lo stesso file RDB o utilizzando un altro file RDB.
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 nell'istanza un file RDB più piccolo.
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 come è documentato, 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 CPU/RAM e influisce nell'ambiente di produzione, devi riavviare dell'istanza (per le configurazioni del livello base) o di 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 ciascuna istanza Memorystore per la configurazione Redis.
Arresto dei comandi 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 è modificando la configurazione, come lo scale up dell'istanza. Un esempio di di seguito puoi trovare il comando 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 per la condivisione limitata del dominio
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 dall'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 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 per mantenere i contenuti della cache, puoi eseguire un'esportazione 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 questi passaggi: l'opzione Forzare l'accesso all'account soluzione alternativa.