Questa pagina spiega vari problemi, i messaggi di errore relativi a questi problemi e i passaggi per la risoluzione dei problemi.
Problemi di connettività
Se la tua istanza Memorystore for Redis riscontra problemi di connettività, controlla i problemi in questa sezione per vedere se uno di questi causa il problema.
Se un problema in questa sezione non corrisponde al tuo, esegui Telnet su uno dei tuoi nodi Redis ed esegui alcuni comandi Redis per verificare se l'istanza risponde.
Se il nodo non risponde, verifica se uno dei problemi di rete è il motivo per cui la connessione di rete del nodo è bloccata. Se nessuno di questi problemi risolve il problema, contatta l'assistenza clienti Google Cloud.
Esegui il provisioning delle risorse in reti VPC diverse.
Per connetterti a un'istanza Memorystore for Redis da una risorsa Google Cloud , ad esempio una VM di Compute Engine, devi eseguire il provisioning delle risorse sulla stessa rete VPC autorizzata dell'istanza.
Il tentativo di Telnet a un'istanza da una risorsa che si trova in una regione o una rete VPC diversa genera il seguente messaggio di errore:
telnet: Unable to connect to remote host: Connection timed out
Elimini un peering di rete VPC.
Quando crei un'istanza Memorystore for Redis, crei 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 restituisce il seguente messaggio di errore:
telnet: Unable to connect to remote host: Connection timed out
Per ristabilire il peering di rete eliminato, crea un'altra istanza. Poi, elimina questa istanza. L'istanza originale ora ha il peering di rete necessario.
Crea regole firewall che bloccano gli indirizzi IP della tua istanza.
Se crei regole firewall in uscita che bloccano la porta (6379) o l'indirizzo IP dell'istanza Memorystore for Redis, potresti riscontrare problemi di connettività. Non creare regole firewall di rete che blocchino l'intervallo di indirizzi IP della tua istanza.
Problemi di utilizzo della CPU
Questa sezione spiega i problemi di utilizzo della CPU che la tua istanza Memorystore for Redis potrebbe riscontrare.
La tua istanza presenta una latenza elevata o non risponde.
Se la tua istanza Memorystore for Redis presenta una latenza elevata o non risponde, questi problemi potrebbero essere causati dall'utilizzo dei seguenti comandi Redis che richiedono molte risorse:
Questi comandi possono esercitare una forte pressione sulla CPU dell'istanza. Ti consigliamo di non eseguire il comando KEYS negli ambienti di produzione. Utilizza invece
SCAN perché questo comando utilizza meno risorse rispetto a KEYS.
L'utilizzo di LRANGE per eseguire query su tutte o su un sottoinsieme di grandi dimensioni dello spazio delle chiavi può richiedere un elevato utilizzo di risorse CPU. Per risolvere il problema, ti consigliamo di ridurre il numero di chiavi
nel keyset che interroghi in una singola operazione.
Anche l'utilizzo di uno script Lua complesso con EVAL può causare un elevato utilizzo della CPU. Ti consigliamo di utilizzare script Lua meno complessi.
HGETALL e ZRANGE possono restituire un numero elevato di chiavi, influendo negativamente
sulle prestazioni del server. Anziché HGETALL, ti consigliamo di eseguire il comando HSCAN. Inoltre, prima di utilizzare ZRANGE, ti consigliamo di
limitare le dimensioni dell'intervallo utilizzato per una query.
Prima di eseguire un comando che richiede molte risorse, controlla le dimensioni delle strutture di dati su cui viene eseguita la query del comando per assicurarti che non causi latenza.
Se la tua istanza presenta una latenza elevata o non risponde, procedi nel seguente modo:
- Controlla i log lato client per verificare se sono stati eseguiti comandi che utilizzano molte risorse. In questo caso, prendi nota della data e dell'ora.
- 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 che richiedono molte risorse.
Il buffer di output dell'istanza esaurisce lo spazio.
Se il buffer di output dell'istanza Memorystore for Redis esaurisce lo spazio, procedi nel seguente modo:
- Imposta un valore inferiore per il parametro
maxmemory-gb. - Utilizza le norme
allkeys-lrumaxmemory.
Quando la memoria dell'istanza è piena e arriva una nuova scrittura,
Memorystore for Redis elimina le chiavi per fare spazio alla scrittura, in base al criterio maxmemory dell'istanza. Il criterio allkeys-lru espelle le chiavi utilizzate meno di recente (LRU) dall'intero keyset.
Ti consigliamo di monitorare maxmemory e la memoria utilizzata della tua istanza. Questo
ti aiuta a sapere se la tua istanza raggiunge la capacità dell'istanza di cui è stato eseguito il provisioning.
Inoltre, riducendo il valore del parametro maxmemory-gb, hai più spazio
per l'overhead.
Problemi di Networking
Questa sezione spiega i problemi di networking che la tua istanza potrebbe riscontrare.
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, potresti esaurire tutti gli indirizzi IP. In alternativa, potrebbe esistere una route in conflitto con l'indirizzo IP dell'istanza Memorystore for Redis che stai tentando di creare.
Questi problemi causano la visualizzazione del 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, alloca indirizzi IP aggiuntivi o rimuovi la discrepanza del conflitto di route. Per saperne di più, consulta Esaurimento dell'intervallo di indirizzi IP.
Non hai stabilito una connessione di accesso privato ai servizi per la tua rete.
Se la tua istanza Memorystore for Redis utilizza la modalità di connessione di accesso privato ai servizi, ma non esiste una connessione di accesso privato ai servizi per la tua rete, potresti ricevere il seguente messaggio di 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.
Elimini il peering di rete per la connessione di accesso privato ai servizi.
Quando stabilisci una connessione di accesso privato ai servizi, Memorystore for Redis crea una connessione di peering di rete chiamata servicenetworking-googleapis-com. Questa connessione viene visualizzata nella pagina
Peering di reti VPC del progetto.
Se elimini il peering di rete, viene visualizzato il seguente messaggio di errore per le istanze esistenti:
telnet: Unable to connect to remote host: Connection timed out
Inoltre, se elimini il peering di rete e crei un'istanza, viene visualizzato il seguente messaggio di errore:
Private services access is not configured correctly. For steps on how to
verify the connection, check the documentation.
Per risolvere il problema, crea una connessione di accesso privato ai servizi tra la tua rete e la rete di accesso privato ai servizi eseguendo il comando seguente:
gcloud services vpc-peerings connect --service=servicenetworking.googleapis.com --ranges=RESERVED_RANGE_NAME --network=VPC_NETWORK --project=PROJECT_ID
Utilizzi parametri in conflitto.
Se utilizzi sia il parametro --reserved-ip-range sia il parametro --connect-mode=private-service-access, riceverai il seguente messaggio di errore:
Reserved IP range is not supported for --connect-mode private services access
Non puoi utilizzare entrambi i parametri contemporaneamente perché Memorystore for Redis
non supporta il parametro --reserved-ip-range per la modalità di connessione
di accesso ai servizi privati.
Per risolvere questo problema, procedi in uno dei seguenti modi:
- Utilizza il parametro
--reserved-ip-rangecon il parametro--connect-mode=direct-peering. - Non utilizzare il parametro
--reserved-ip-range.
Hai superato la quota di subnet per il tuo progetto.
Esiste un limite al numero di subnet che puoi creare all'interno del tuo progettoGoogle Cloud . Se superi questa quota, ricevi uno dei seguenti messaggi 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 visualizzato nei messaggi di errore o contatta l'assistenza clienti Google Cloud.
Non colleghi il progetto di servizio al progetto host.
Se utilizzi il VPC condiviso e non colleghi il progetto di servizio al progetto host, ricevi il seguente messaggio di 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.
Crea un'istanza in un progetto di servizio con la modalità di connessione in peering diretto e designa una rete VPC condiviso.
Se crei un'istanza Memorystore for Redis in un progetto di servizio e designi una rete VPC condiviso dal progetto host per l'istanza, non puoi utilizzare la modalità di connessione peering diretto.
Per impostazione predefinita, la modalità di connessione è impostata sul peering diretto. Se provi a utilizzare questa modalità di connessione quando crei un'istanza e scegli anche una rete VPC condiviso dal progetto host come valore per il parametro --network, viene visualizzato il seguente messaggio di errore:
Authorized_network must exist in the same project as redis instance
Per risolvere questo problema, procedi in uno dei seguenti modi:
- Quando crei l'istanza, utilizza la modalità di connessione
Private Service Access
(--connect-mode=private-service-access). - Scegli una rete VPC autorizzata che si trova nello stesso progetto dell'istanza.
Utilizzi un intervallo di indirizzi IP per Compute Engine a cui Memorystore for Redis non può accedere.
Non puoi accedere all'istanza Memorystore for Redis da una VM di Compute Engine con un indirizzo IP nell'intervallo 172.17.0.0/16.
Questo intervallo è riservato a un componente interno.
Per risolvere il problema, accedi all'istanza da una VM di Compute Engine che ha un indirizzo IP in un intervallo diverso.
Problemi di connessione all'istanza da altre risorse Google Cloud
Questa sezione spiega i problemi che la tua istanza Memorystore for Redis potrebbe riscontrare quando altre risorse tentano di connettersi.
Non puoi connetterti alla tua istanza da ambienti serverless che richiedono un connettore di accesso VPC serverless
Se non riesci a connetterti alla tua istanza Memorystore for Redis utilizzando uno degli ambienti serverless che richiedono un connettore di accesso VPC serverless, verifica di aver configurato questo connettore per il tuo ambiente. Per maggiori informazioni, consulta Requisito del connettore di accesso VPC serverless.
Non puoi connetterti alla tua istanza da un cluster Google Kubernetes Engine (GKE)
Per connetterti all'istanza Memorystore for Redis da un cluster GKE, devi abilitare VPC nativo/alias IP sul cluster.
Il modo più semplice per abilitare la rete VPC nativa/l'aliasing IP è durante la creazione del cluster. Nella sezione delle opzioni avanzate, seleziona VPC nativo. Per saperne di più, consulta Crea un cluster nativo di VPC.
Problemi di Identity and Access Management (IAM)
Questa sezione spiega i problemi IAM che la tua istanza Memorystore for Redis potrebbe riscontrare.
Vuoi ripristinare un binding di policy eliminato per un account di servizio
Memorystore for Redis utilizza i seguenti service account per gestire le tue istanze:
service-PROJECT_NUMBER@service-networking.iam.gserviceaccount.comservice-PROJECT_NUMBER@cloud-redis.iam.gserviceaccount.com
Se elimini i binding dei criteri per questi service account, non puoi creare istanze.
Se tenti di creare un'istanza di Memorystore for Redis utilizzando Google Cloud CLI, 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 il binding della policy per il account di servizio service-networking,
esegui questo comando. Sostituisci VARIABLES con i valori appropriati.
gcloud projects add-iam-policy-binding PROJECT_ID --member='serviceAccount:service-PROJECT_NUMBER@service-networking.iam.gserviceaccount.com' --role='roles/servicenetworking.serviceAgent'
Per ristabilire il binding della policy per il account di servizio cloud-redis, esegui questo comando. Sostituisci VARIABLES con i valori appropriati.
gcloud projects add-iam-policy-binding PROJECT_ID --member='serviceAccount:service-PROJECT_NUMBER@cloud-redis.iam.gserviceaccount.com' --role='roles/redis.serviceAgent'
Problemi di timeout operazione
I seguenti problemi causano la mancata risposta dell'istanza Redis e/o timeout delle operazioni di istanza/nodo.
Problemi di partizione di rete
A volte le risorse Google Cloud non possono 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 risolve l'errore di partizione di rete per la regione o la zona in cui viene eseguito il provisioning dell'istanza, la connettività dovrebbe riprendere normalmente.
In questo problema, 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'Google Cloud assistenza.
Il progetto di servizio e il progetto host non si trovano nello stesso perimetro di controllo di servizio VPC
Se utilizzi il VPC condiviso e un perimetro dei controlli di servizio VPC e l'operazione di creazione dell'istanza Redis va in timeout, è 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 di connessione tramite la rete VPC condiviso.
Per verificare se si verifica questo problema, controlla i log di controllo dell'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 servizio nello stesso perimetro di servizio.
Risolvere i problemi di importazione ed esportazione
Questa sezione descrive 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 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 la console Google Cloud o la riga di comando per un messaggio di errore e risolvi 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 era troppo grande
Se hai ricevuto il messaggio di errore "Import RDB file gs://bucket/object.rdb size exceeds max memory 10GB", devi scalare la tua istanza e riprovare l'importazione. Puoi anche provare a importare un file RDB più piccolo nella tua 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 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 for Redis è un prodotto gestito da Google, alcuni comandi sono
bloccati nell'istanza Redis
per fornire un ambiente sicuro e affidabile. Uno dei comandi
con limitazioni è CLIENT, che include CLIENT KILL, utilizzato per interrompere i comandi.
Se un comando Redis consuma molta CPU/RAM e influisce sull'ambiente di produzione, devi riavviare l'istanza (per le configurazioni del livello Basic) o eseguire il failover in una replica (per le configurazioni del 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 troverai i comandi per eseguire riavvii o failover per ogni configurazione di 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
Comandi di arresto nelle istanze Memorystore for Redis di livello Basic
L'unico modo per eseguire un riavvio in un'istanza Memorystore for Redis è modificarne la configurazione, ad esempio scalando l'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 riportarla alla dimensione originale.
Problemi relativi al criterio dell'organizzazione "Condivisione limitata per i domini"
A seconda della data di creazione dell'istanza, Memorystore for Redis utilizza uno dei due formati di account di servizio. Per identificare il formato del account di servizio utilizzato dalla tua istanza, consulta Formato del account di servizio Memorystore for Redis.
Esiste 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 problemi, potresti riscontrare questo errore:
One or more users named in the policy do not belong to a permitted customer.
Esistono due modi per risolvere il problema.
- Crea un'istanza: le istanze appena create hanno il formato dell'account di servizio appropriato, 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. Un'istanza appena creata ha un nuovo indirizzo IP del servizio che deve essere configurato nella tua applicazione.
- Forza l'accesso all'account: utilizza questa opzione solo se non è possibile ricreare l'istanza.