Questa pagina spiega vari problemi, i messaggi di errore per questi problemi e i passaggi per la risoluzione dei problemi.
Problemi di connettività
Se l'istanza Memorystore for Redis riscontra problemi di connettività, controlla i problemi in questa sezione per verificare se uno di questi è la causa del problema.
Se un problema in questa sezione non corrisponde al tuo, esegui Telnet a 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 Google Cloud risorsa, ad esempio una VM di Compute Engine, devi eseguire il provisioning delle risorse nella stessa rete VPC autorizzata dell'istanza.
Se tenti di eseguire Telnet a un'istanza da una risorsa che si trova in una regione o in una rete VPC diversa, viene visualizzato 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, quando tenti di eseguire Telnet all'istanza viene visualizzato 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 di cui ha bisogno.
Crei regole firewall che bloccano gli indirizzi IP dell'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 bloccano l'intervallo di indirizzi IP dell'istanza.
Problemi di utilizzo della CPU
Questa sezione spiega i problemi di utilizzo della CPU che la tua istanza Memorystore for Redis potrebbe riscontrare.
L'istanza riscontra una latenza elevata o non risponde.
Se l'istanza Memorystore for Redis riscontra 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 di KEYS.
L'utilizzo di LRANGE per eseguire query su tutto o su un sottoinsieme di grandi dimensioni dello spazio delle chiavi può richiedere molte risorse della CPU. Per risolvere il problema, ti consigliamo di ridurre il numero di chiavi nel set di chiavi su cui esegui la query in una singola operazione.
Anche l'utilizzo di uno script Lua complesso con EVAL può causare un utilizzo elevato della CPU. Ti consigliamo di utilizzare script Lua meno complessi.
HGETALL e ZRANGE possono restituire un numero elevato di chiavi, influendo negativamente sul rendimento 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 esegue la query per assicurarti che non causi latenza.
Se l'istanza riscontra una latenza elevata o non risponde:
- Controlla i log lato client per verificare se sono stati eseguiti comandi che richiedono molte risorse. In caso affermativo, annota la data e l'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.
Lo spazio del buffer di output dell'istanza è esaurito.
Se lo spazio del buffer di output dell'istanza Memorystore for Redis è esaurito:
- Imposta un valore inferiore per il
maxmemory-gbparametro. - Utilizza la
allkeys-lrumaxmemorypolicy.
Quando la memoria dell'istanza è piena e arriva una nuova scrittura, Memorystore for Redis elimina le chiavi per fare spazio alla scrittura, in base alla policy maxmemory dell'istanza. La policy allkeys-lru elimina le chiavi utilizzate meno di recente (LRU) dall'intero set di chiavi.
Ti consigliamo di monitorare maxmemory e la memoria utilizzata dell'istanza. In questo modo puoi sapere se l'istanza raggiunge la capacità di istanza di cui è stato eseguito il provisioning.
Inoltre, riducendo il valore del parametro maxmemory-gb, ottieni più spazio per l'overhead.
Le metriche esterne non sono presenti per l'istanza
Se l'istanza riscontra un utilizzo elevato della CPU o le risorse dell'istanza si esauriscono (ad esempio, a causa di un numero eccessivo di connessioni), l'istanza potrebbe non funzionare correttamente e le metriche esterne potrebbero non essere presenti.
Problemi di Networking
Questa sezione spiega i problemi di rete che la tua istanza potrebbe riscontrare.
Esaurisci l'intervallo IP allocato 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 l'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 denominata servicenetworking-googleapis-com. Questa connessione viene visualizzata nella pagina di peering di rete 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 seguente comando:
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, ricevi 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 privato ai servizi.
Per risolvere il 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.
Superi la quota di subnet per il progetto.
Esiste un limite al numero di subnet che puoi creare all'interno del tuo Google Cloud progetto. 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.
Crei un'istanza in un progetto di servizio con la modalità di connessione di peering diretto e designi 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 di peering diretto.
Per impostazione predefinita, la modalità di connessione è impostata su peering diretto. Se tenti di utilizzare questa modalità di connessione quando crei un'istanza e scegli anche una rete VPC condiviso dal progetto host come valore del parametro --network, ricevi il seguente messaggio di errore:
Authorized_network must exist in the same project as redis instance
Per risolvere il problema, procedi in uno dei seguenti modi:
- Quando crei l'istanza, utilizza la modalità di connessione di accesso privato ai servizi
(--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 con un indirizzo IP in un intervallo diverso.
Problemi di connessione all'istanza da altre Google Cloud risorse
Questa sezione spiega i problemi che la tua istanza Memorystore for Redis potrebbe riscontrare quando altre risorse tentano di connettersi.
Non riesci a connetterti all'istanza da ambienti serverless che richiedono un connettore di accesso VPC serverless
Se non riesci a connetterti all'istanza Memorystore for Redis utilizzando uno degli ambienti serverless che richiedono un connettore di accesso VPC serverless, verifica se hai configurato questo connettore per il tuo ambiente. Per saperne di più, consulta Requisito del connettore di accesso VPC serverless.
Non riesci a connetterti all'istanza da un cluster Google Kubernetes Engine (GKE)
Per connetterti all'istanza Memorystore for Redis da un cluster GKE, devi abilitare la rete VPC nativa/l'aliasing IP sul cluster.
Il modo più semplice per abilitare la rete VPC nativa/l'aliasing IP è quando crei il cluster. Nella sezione delle opzioni avanzate, seleziona Rete VPC nativa. Per saperne di più, consulta Creare 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'associazione di policy eliminata per un account di servizio
Memorystore for Redis utilizza i seguenti service account per gestire le istanze:
service-PROJECT_NUMBER@service-networking.iam.gserviceaccount.comservice-PROJECT_NUMBER@cloud-redis.iam.gserviceaccount.com
Se elimini le associazioni di policy per questi service account, non puoi creare istanze.
Se tenti di creare un'istanza 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 l'associazione di policy per il account di servizio service-networking, esegui il seguente 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 l'associazione di policy per il account di servizio cloud-redis, esegui il seguente 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 dell'operazione
I seguenti problemi causano un'istanza Redis che non risponde e/o timeout dell'operazione di istanza/nodo.
Problemi di partizionamento della rete
A volte le risorse non possono comunicare tra le zone all'interno di una regione a causa di un errore di partizionamento della rete nei server Google Cloud. Google Cloud Ciò può causare la perdita della connessione dell'istanza, con conseguente errore di timeout.
Dopo che Google Cloud risolve l'errore di partizionamento della rete per la regione o la zona in cui è stato 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'assistenza Google Cloud Supporto.
Progetto di servizio e progetto host non nello stesso perimetro di controllo di servizio VPC
Se utilizzi il VPC condiviso e un perimetro di controllo di servizio VPC, e l'operazione di creazione dell'istanza Redis va in timeout, ciò potrebbe indicare che il progetto di servizio e il progetto host non si trovano 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 audit 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 quando utilizzi l'importazione e l'esportazione per Memorystore for Redis.
I pulsanti di importazione ed esportazione sono disattivati nella 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 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 Google Cloud console o la riga di comando per verificare la presenza di 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 eseguire lo scale up dell'istanza e riprovare a eseguire l'importazione. Puoi anche provare a importare un file RDB più piccolo nell'istanza.
Risolvere i 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
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 con limitazioni
è CLIENT, che include CLIENT KILL, utilizzato per arrestare 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 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.
Arrestare i comandi nelle istanze Memorystore for Redis di livello Standard
gcloud redis instances failover INSTANCE_NAME --data-protection-mode=limited-data-loss
Arrestare i comandi 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 eseguendo 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 ridimensionato l'istanza, puoi eseguire un'altra operazione di scalabilità per riportarla alle dimensioni originali.
Problemi con la policy dell'organizzazione di condivisione limitata dei 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 dall'istanza, consulta Formato del account di servizio Memorystore for Redis.
Esiste un problema noto per cui la policy dell'organizzazione iam.allowedPolicyMemberDomains causa errori quando viene utilizzata con le istanze Memorystore for Redis che utilizzano il formato 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 opzioni per risolvere il problema.
- Crea un'istanza: le istanze appena create hanno il formato account di servizio appropriato, compatibile con la policy 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. Un'istanza appena creata ha un nuovo indirizzo IP del servizio che deve essere configurato nell'applicazione.
- Forza l'accesso all'account: utilizza questa opzione solo se non è possibile ricreare l'istanza.