Nesta página, explicamos vários cenários de erro, as mensagens de erro desses cenários e as etapas de solução de problemas para resolver os erros.
Cenários de erro de conectividade
Se a instância tiver problemas de conectividade, verifique os cenários nesta seção para ver se um deles está causando o problema.
Caso contrário, execute Telnet em um dos nós do Redis e execute alguns comandos simples do Redis para ver se a instância é responsiva ou não.
- Se o nó não responder, veja se algum dos problemas descritos nos cenários de erros de rede está bloqueando a conexão de rede do nó. Caso contrário, entre em contato com o suporte do Google Cloud.
Erro de conexão causado por recursos provisionados em diferentes redes VPC
Para se conectar a uma instância do Memorystore por um recurso do Google Cloud, como uma VM do Compute Engine, os recursos precisam ser provisionados na mesma rede VPC autorizada que a instância do Redis.
A tentativa de usar o Telnet para uma instância do Memorystore com um recurso em uma região ou rede VPC diferente gera a mensagem de erro a seguir:
telnet: Unable to connect to remote host: Connection timed out
Erro de conexão causado pelo peering da rede VPC excluída
A criação de uma instância do Memorystore para Redis cria um peering de VPC entre sua rede VPC e uma rede VPC interna do Google.
O peering de rede usa o formato a seguir:
redis-peer-############
Se esse peering de rede for excluído, a tentativa de executar Telnet na instância do Redis gerará a mensagem de erro a seguir:
telnet: Unable to connect to remote host: Connection timed out
A maneira mais fácil de restabelecer o peering de rede excluído é criar uma nova instância do Memorystore para Redis. A criação de uma nova instância do Redis restabelece o peering de rede excluído para que você possa excluí-la e a instância original do Redis tenha o peering de rede necessário.
As regras de firewall bloqueiam os endereços IP da instância
Problemas de conectividade podem surgir se você criar regras de firewall de saída que bloqueiem a porta do Redis (6379) ou o endereço IP da instância.
Não crie regras de firewall de rede que bloqueiem o intervalo de IP das instâncias do Redis.
Cenários de erro de alto uso da CPU
Falta de resposta da instância do Redis causada pelo uso indevido de comandos Redis com custo maior.
Se a instância do Redis tiver problemas de alta latência, falta de resposta ou conectividade, é possível que os problemas sejam causados pelo uso indevido dos seguintes comandos do Redis com custo maior:
Esses comandos podem sobrecarregar a CPU na instância. O Redis de código aberto
desaconselha a execução de KEYS
em ambientes de produção. No entanto, é possível usar
SCAN
, que é uma alternativa mais segura ao comando KEYS
. O uso de LRANGE
para
consultar todo ou um subconjunto grande do keyspace pode exigir recursos de CPU altos.
Usar um script Lua complexo com EVAL
pode causar alto uso da CPU.
HGETALL
e ZRANGE
também podem retornar um número muito grande de chaves, afetando negativamente
a performance do servidor.
Antes de executar comandos caros, verifique o tamanho das estruturas de dados que o comando consulta para garantir que ele não cause latência.
Se a instância tiver alta latência ou falta de resposta, verifique os registros do cliente para saber se algum comando de custo maior foi executado. Em caso afirmativo, anote o horário.
Em seguida, use o Cloud Monitoring para ver a métrica redis.googleapis.com/stats/cpu_utilization
. Veja se períodos de alta utilização da CPU coincidem com os mesmos períodos em que os comandos mais caros foram executados.
Não recomendamos usar o comando KEYS
em ambientes de produção. Para EVAL
, use scripts Lua menos complexos. Para LRANGE
, reduza o número de chaves no conjunto de chaves que está sendo consultado em uma única operação.
Cenários de erros de rede
O intervalo de IP alocado foi esgotado ou existe uma rota em conflito
Ao criar recursos no intervalo de endereços IP dedicado ao Memorystore para Redis, é possível esgotar todos os endereços, causando a mensagem de erro abaixo. Como alternativa, pode haver uma rota em conflito com o endereço IP da instância do Redis que você está tentando criar.
Esses cenários causam a seguinte mensagem de erro:
The IP ranges for the connection do not have enough available IPs. Allocate a
new range or expand existing range and try again.
Resolva esse problema alocando outros endereços IP ou removendo a discrepância de conflito de rota. Para mais informações, consulte Exaustão do intervalo de endereços IP.
Você não tem uma conexão de acesso a serviços privados estabelecida para sua rede.
Se a instância do Redis usar o modo de conexão de acesso a serviços privados e não houver uma conexão de acesso a serviços privados na rede, poderá ser exibido o erro a seguir:
Google private service access is not enabled. Enable private service access and
try again
Para resolver esse problema, estabeleça uma conexão de acesso a serviços privados.
O peering de rede para acesso a serviços privados foi excluído
Estabelecer uma conexão de acesso a serviços
privados cria uma conexão de peering de rede chamada
servicenetworking-googleapis-com
, que aparece na página Peering de rede VPC
do projeto.
A exclusão do peering de rede faz com que seja exibido o erro a seguir para instâncias do Redis existentes:
telnet: Unable to connect to remote host: Connection timed out
A exclusão do peering de rede faz com que seja exibido o erro a seguir ao criar uma instância do Redis:
Private services access is not configured correctly. For steps on how to verify the connection, check the documentation.
Para resolver esse problema, siga a última etapa das instruções da gcloud em Como estabelecer uma conexão de acesso a serviços privados.
Sinalizações de rede conflitantes durante a criação da instância do Redis
Se você usar os parâmetros --reserved-ip-range
e --connect-mode=private-service-access
, será
exibido o erro a seguir:
Reserved IP range is not supported for --connect-mode private services access
Para resolver esse problema, use --reserved-ip-range
com --connect-mode=direct-peering
ou use --connect-mode=PRIVATE_SERVICE_ACCESS
.
Não é possível usar os dois ao mesmo tempo, porque o parâmetro --reserved-ip-range
não é compatível com o modo de conexão de acesso a serviços privados.
Excedida a cota de sub-rede do seu projeto
Há um limite no número de sub-redes que podem ser criadas no projeto. Se você exceder essa cota, receberá a seguinte mensagem de erro:
Internal network quota exceeded. Please request higher limit here: https://forms.gle/ZfVduUGq2iSYcYGm8
ou
Unable to create instance. Network quota limit has been reached. Please request higher limit here: https://forms.gle/ZfVduUGq2iSYcYGm8
Para resolver esse problema, preencha o formulário na mensagem de erro ou entre em contato com o suporte do Google Cloud.
Projeto de serviço não anexado ao projeto host
Se você estiver usando a VPC compartilhada, o projeto de serviço não será anexado ao projeto host se for exibido o erro a seguir:
Invalid network name <network-name>. Project <project-name> referenced is not the host project for <service-project-name>.
Para resolver esse problema, anexe seu projeto de serviço ao projeto host.
Uso incompatível do modo de conexão de peering direto e da rede VPC compartilhada durante a criação da instância
Não é possível criar uma instância do Redis em um projeto de serviço com o modo de conexão de peering direto ao designar uma rede VPC compartilhada do projeto host para a instância.
O modo de conexão será definido como direct-peering
por padrão se você
não definir um valor para --connection-mode
. Se você tentar usar o modo de conexão de
peering direto durante a criação da instância e também escolher uma rede VPC
compartilhada do projeto host como o valor para --network
,
será exibido o erro a seguir:
Authorized_network must exist in the same project as redis instance
Para resolver esse problema, especifique --connect-mode=PRIVATE_SERVICE_ACCESS
no comando de criação da instância do Redis ou escolha uma rede VPC normal no mesmo
projeto da instância do Redis.
Intervalos de endereços IP do Compute Engine incompatíveis
Não é possível acessar o Memorystore para Redis com VMs do Compute
Engine que tenham um endereço IP dentro do intervalo 172.17.0.0/16
,
porque esse intervalo é reservado para um componente interno.
Erros de conexão com sua instância do Redis usando outros recursos do Google Cloud
Erros de conexão com a instância de ambientes sem servidor que exigem um conector de acesso VPC sem servidor
Se você não conseguir se conectar a uma instância do Redis usando um dos ambientes sem servidor que exigem um conector de acesso VPC sem servidor, é possível que você não tenha configurado um conector de acesso VPC sem servidor para o ambiente.
Consulte Requisitos do conector de acesso VPC sem servidor para mais detalhes.
Erros de conexão com a instância usando um cluster do Google Kubernetes Engine
Não é possível conectar-se a uma instância do Memorystore para Redis a partir de um cluster GKE sem alias nativos de VPC/IP ativados no cluster. É mais fácil ativar o alias nativos de VPC/IP durante a criação do cluster do GKE. Ao criar o cluster, selecione Nativo de VPC nas opções avançadas. Para mais detalhes, consulte Como criar clusters nativos de VPC.
Cenários de erros de gerenciamento de identidade e acesso (IAM, na sigla em inglês)
Como restaurar uma vinculação de política excluída para uma conta de serviço
O Memorystore para Redis usa as contas de serviço a seguir para gerenciar suas instâncias do Redis:
- service-project-number@service-networking.iam.gserviceaccount.com
- service-project-number@cloud-redis.iam.gserviceaccount.com
A exclusão das vinculações de política dessas contas de serviço impede que você crie novas instâncias.
Se você tentar criar uma instância do Redis usando o gcloud nesse cenário, poderá ser exibida a mensagem de erro a seguir:
(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.
Para restabelecer a vinculação de política para essas contas de serviço, execute um dos seguintes comandos, substituindo variables pelos valores apropriados. Execute o comando associado à conta de serviço excluída.
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'
Erros de tempo limite da operação
Os cenários de erro a seguir resultam em uma instância do Redis sem resposta e/ou tempos limites de operação de instância/nó.
Erro de partição de rede
Às vezes, os recursos do Google Cloud não podem se comunicar entre zonas dentro de uma região devido a um erro de partição de rede nos servidores do Google Cloud. Isso pode causar perda de conexão na instância, gerando um erro de tempo limite.
Depois que o Google Cloud resolver o erro de partição de rede da região ou zona em que sua instância é provisionada, a conectividade será retomada normalmente.
Nesse cenário, é possível ver uma mensagem de erro de conectividade como esta:
telnet: Unable to connect to remote host: Connection timed out
Se você não conseguir identificar a causa do erro de tempo limite, entre em contato com o suporte do Google Cloud.
Projeto de serviço e projeto host que não estão no mesmo perímetro de controle de serviço da VPC
Se você estiver usando VPC compartilhada e um perímetro de controle de serviço VPC, e a operação de criação da instância do Redis atingir o tempo limite, isso poderá indicar que o projeto de serviço e o projeto host não estão no Mesmo perímetro de serviço. O projeto de serviço e o projeto host precisam estar no mesmo perímetro para que a instância do Redis se comunique com os clientes conectados pela rede VPC compartilhada.
Para ver se você está enfrentando esse problema, verifique os registros de auditoria da sua instância do Redis para o erro a seguir:
violationReason: "NETWORK_NOT_IN_SAME_SERVICE_PERIMETER"
Para resolver esse problema, coloque a rede do host e a rede de serviços no mesmo perímetro de serviço.
Como solucionar problemas de importação e exportação
Nesta seção, descrevemos alguns problemas comuns que podem ocorrer ao usar a importação e a exportação do Memorystore para Redis.
Os botões de importação e exportação estão desativados no console do Google Cloud
Problema: o usuário conectado ao console não tem
as permissões redis.instances.import
e/ou redis.instances.export
necessárias para
importar e/ou exportar arquivos RDB.
Solução: conceda as permissões ao usuário e atualize a página de detalhes da instância.
A operação de importação foi concluída, mas os dados não foram restaurados
Se uma operação de importação for concluída, mas os dados não forem restaurados, primeiro verifique se há uma mensagem de erro no console do Google Cloud ou na linha de comando e resolva os problemas descritos na mensagem de erro.
Se houver uma falha durante o processo de importação, a instância será recuperada usando um arquivo RDB vazio. Tente restaurar os dados importando o mesmo arquivo RDB novamente ou usando um arquivo RDB diferente.
Ocorreu uma falha na importação porque o arquivo RDB era muito grande.
Se foi exibida a mensagem de erro "Tamanho do arquivo RDB de importação gs://bucket/object.rdb excede a memória máxima de 10 GB", escalone verticalmente sua instância e tente a importação novamente. Também é possível tentar importar um arquivo RDB menor para sua instância.
Solução de problemas da CLI do Google Cloud
Se ocorrer um problema em que um comando da CLI gcloud não está disponível ou se o comando apresentar comportamento diferente do que consta na documentação, tente atualizar a CLI gcloud:
gcloud components update
Como interromper todos os comandos e conexões em andamento de uma instância do Redis
Como o Memorystore para Redis é um produto gerenciado pelo Google, há alguns
comandos que são
bloqueados na sua instância do Redis
para fornecer um ambiente seguro e confiável. Um dos comandos restritos é
CLIENT
, que inclui CLIENT KILL
, usado para interromper comandos.
Se um comando Redis estiver consumindo muita utilização da CPU/RAM e afetar seu ambiente de produção, reinicie a instância (para configurações de nível Basic) ou faça o failover para uma réplica (para configurações de nível Standard). Essa operação de reinicialização/failover interrompe todos os comandos em execução no servidor Redis e encerra todas as conexões em andamento.
Abaixo, você encontrará comandos para executar reinicializações ou failovers para cada configuração do Memorystore para Redis.
Como interromper comandos em instâncias do Memorystore para Redis de nível Standard
gcloud redis instances failover INSTANCE_NAME --data-protection-mode=limited-data-loss
Como interromper comandos em instâncias do Memorystore para Redis de nível Basic
A única maneira de realizar uma reinicialização em uma instância do Memorystore para Redis é alterar a configuração, como o escalonamento vertical da instância. Veja abaixo um exemplo de comando que você pode executar para reiniciar a instância.
gcloud redis instances update INSTANCE_NAME --region REGION_ID --size NUMBER_GB
Depois de escalonar a instância para um tamanho diferente, execute outra operação de escalonamento para retorná-la ao tamanho original.
Problemas com a política da organização para compartilhamento restrito de domínios
Dependendo de quando a instância foi criada, o Memorystore para Redis usa um dos dois formatos de conta de serviço diferentes. Para identificar qual formato de conta de serviço sua instância usa, consulte Formato de conta de serviço do Memorystore para Redis.
Há um problema conhecido em que a política de organização iam.allowedPolicyMemberDomains
causa erros quando usada com instâncias do Memorystore para Redis que usam
o formato de conta de serviço [PROJECT_NUMBER]-compute@developer.gserviceaccount.com
.
Nesses casos, você pode encontrar este erro:
One or more users named in the policy do not belong to a permitted customer.
Há duas opções para resolver esse problema.
Opção 1
Você pode criar uma nova instância. As instâncias recém-criadas têm o formato de conta de serviço adequado, compatível com a política da organização. Se for essencial manter o conteúdo do cache, faça uma exportação para fazer backup dos dados atuais e uma importação para a nova instância. Uma instância recém-criada tem um novo endereço IP de serviço que precisa ser configurado no aplicativo.
Opção 2
Se não for possível recriar a instância do Memorystore, siga a solução alternativa Forçar o acesso à conta.