Resolver problemas

Nesta página, explicamos vários problemas, as mensagens de erro deles e as etapas de solução de problemas para resolvê-los.

Problemas de conectividade

Se a instância do Memorystore para Redis tiver problemas de conectividade, verifique os problemas nesta seção para saber se um deles está causando o problema.

Se um problema nesta seção não corresponder ao seu, execute Telnet em um dos nós do Redis e execute alguns comandos do Redis para ver se a instância responde.

Se o nó não responder, veja se algum dos problemas de rede está bloqueando a conexão de rede do nó. Se nenhum desses problemas resolver a situação, entre em contato com o Cloud Customer Care.

Você provisiona recursos em diferentes redes VPC.

Para se conectar a uma instância do Memorystore para Redis de um recurso do Google Cloud , como uma VM do Compute Engine, provisione os recursos na mesma rede VPC autorizada que a instância.

A tentativa de usar o Telnet para uma instância com um recurso em uma região ou rede VPC diferente gera a seguinte mensagem de erro:

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

Você exclui um peering de rede VPC.

Ao criar uma instância do Memorystore para Redis, você 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 gerará a seguinte mensagem de erro:

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

Para restabelecer o peering de rede excluído, crie outra instância. Em seguida, exclua a instância. Sua instância original agora tem o peering de rede necessário.

Você cria regras de firewall que bloqueiam os endereços IP da instância.

Se você criar regras de firewall de saída que bloqueiem a porta (6379) ou o endereço IP da instância do Memorystore para Redis, poderá ter problemas de conectividade. Não crie regras de firewall de rede que bloqueiem o intervalo de endereços IP da instância.

Problemas de uso da CPU

Nesta seção, explicamos os problemas de uso da CPU que sua instância do Memorystore para Redis pode encontrar.

Sua instância tem alta latência ou não responde.

Se a instância do Memorystore para Redis tiver alta latência ou falta de resposta, é possível que os problemas sejam causados pelo uso dos seguintes comandos do Redis com uso intenso de recursos:

Esses comandos podem sobrecarregar a CPU na instância. Não recomendamos executar o comando KEYS em ambientes de produção. Em vez disso, use SCAN, porque esse comando usa menos recursos do que KEYS.

O uso de LRANGE para consultar todo ou um subconjunto grande do keyspace pode exigir recursos de CPU altos. Para resolver isso, recomendamos reduzir o número de chaves no conjunto de chaves que você consulta em uma única operação.

Usar um script Lua complexo com EVAL também pode causar alto uso da CPU. Recomendamos usar scripts Lua menos complexos.

HGETALL e ZRANGE podem retornar um grande número de chaves, afetando negativamente o desempenho do servidor. Em vez de HGETALL, recomendamos executar o comando HSCAN. Além disso, antes de usar ZRANGE, recomendamos que você limite o tamanho do intervalo usado em uma consulta.

Antes de executar um comando que exige muitos recursos, verifique o tamanho das estruturas de dados consultadas para garantir que ele não cause latência.

Se a instância tiver alta latência ou falta de resposta, faça o seguinte:

  1. Verifique os registros do lado do cliente para saber se algum comando que consome muitos recursos foi executado. Em caso afirmativo, anote a data e a hora.
  2. 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 com uso intensivo de recursos foram executados.

O buffer de saída da instância fica sem espaço.

Se o buffer de saída da instância do Memorystore para Redis ficar sem espaço, faça o seguinte:

Quando a memória da instância está cheia e uma nova gravação chega, o Memorystore para Redis remove as chaves para liberar espaço para a gravação com base na política maxmemory da instância. A política allkeys-lru remove as chaves menos usadas recentemente (LRU, na sigla em inglês) de todo o conjunto de chaves.

Recomendamos que você monitore o maxmemory e a memória usada da sua instância. Isso ajuda você a saber se a instância atinge a capacidade provisionada. Além disso, ao reduzir o valor do parâmetro maxmemory-gb, você ganha mais espaço para o custo indireto.

Problemas de rede

Esta seção explica os problemas de rede que sua instância pode encontrar.

Você esgota o intervalo de IP alocado ou existe uma rota conflitante.

Ao criar recursos no intervalo de endereços IP dedicado ao Memorystore para Redis, você pode esgotar todos os endereços IP. Ou pode haver uma rota em conflito com o endereço IP da instância do Memorystore para Redis que você está tentando criar.

Esses problemas fazem com que a seguinte mensagem de erro apareça:

The IP ranges for the connection do not have enough available IPs. Allocate a new range or expand existing range and try again.

Para resolver esse problema, aloque mais endereços IP ou remova 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 particulares estabelecida para sua rede.

Se a instância do Memorystore para Redis usar o modo de conexão de acesso a serviços privados, mas não houver uma conexão de acesso a serviços privados na rede, você poderá receber a seguinte mensagem de erro:

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.

Exclua o peering de rede para a conexão de acesso a serviços particulares.

Quando você estabelece uma conexão de acesso a serviços privados, o Memorystore para Redis cria uma conexão de peering de rede chamada servicenetworking-googleapis-com. Essa conexão aparece na página Peering de rede VPC do projeto.

Se você excluir o peering de rede, a seguinte mensagem de erro vai aparecer para instâncias atuais:

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

Além disso, se você excluir o peering de rede e criar uma instância, a seguinte mensagem de erro vai aparecer:

Private services access is not configured correctly. For steps on how to verify the connection, check the documentation.

Para resolver esse problema, crie uma conexão de acesso a serviços privados entre sua rede e a rede de acesso a serviços privados executando o seguinte comando:

gcloud services vpc-peerings connect --service=servicenetworking.googleapis.com --ranges=RESERVED_RANGE_NAME --network=VPC_NETWORK --project=PROJECT_ID

Você usa parâmetros conflitantes.

Se você usar os parâmetros --reserved-ip-range e --connect-mode=private-service-access, vai receber a seguinte mensagem de erro:

Reserved IP range is not supported for --connect-mode private services access

Não é possível usar os dois parâmetros ao mesmo tempo porque o Memorystore para Redis não é compatível com o parâmetro --reserved-ip-range para o modo de conexão de acesso a serviços privados.

Para resolver o problema, siga um destes procedimentos:

  • Use o parâmetro --reserved-ip-range com o parâmetro --connect-mode=direct-peering.
  • Não use o parâmetro --reserved-ip-range.

Você excedeu a cota de sub-rede do seu projeto.

Há um limite no número de sub-redes que podem ser criadas no projetoGoogle Cloud . Se você exceder essa cota, vai receber uma das seguintes mensagens 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 que aparece nas mensagens de erro ou entre em contato com o atendimento ao cliente do Cloud.

Você não anexa o projeto de serviço ao projeto host.

Se você usar a VPC compartilhada e não anexar o projeto de serviço ao projeto host, vai receber a seguinte mensagem de erro:

Invalid network name <network-name>. Project <project-name> referenced is not the host project for <service-project-name>.

Para resolver esse problema, anexe o projeto de serviço ao projeto host.

Você cria uma instância em um projeto de serviço com o modo de conexão de peering direto e designa uma rede VPC compartilhada.

Se você criar uma instância do Memorystore para Redis em um projeto de serviço e designar uma rede VPC compartilhada do projeto host para a instância, não será possível usar o modo de conexão de peering direto.

Por padrão, o modo de conexão é definido como peering direto. Se você tentar usar esse modo de conexão ao criar uma instância e também escolher uma rede VPC compartilhada do projeto host como o valor do parâmetro --network, vai receber a seguinte mensagem de erro:

Authorized_network must exist in the same project as redis instance

Para resolver o problema, siga um destes procedimentos:

  • Ao criar a instância, use o modo de conexão de acesso a serviços privados
    (--connect-mode=private-service-access).
  • Escolha uma rede VPC autorizada que esteja no mesmo projeto da sua instância.

Você usa um intervalo de endereços IP para o Compute Engine que o Memorystore para Redis não consegue acessar.

Não é possível acessar a instância do Memorystore para Redis de uma VM do Compute Engine que tenha um endereço IP no intervalo 172.17.0.0/16. Esse intervalo é reservado para um componente interno.

Para resolver esse problema, acesse a instância de uma VM do Compute Engine que tenha um endereço IP em um intervalo diferente.

Problemas de conexão com sua instância usando outros recursos do Google Cloud

Esta seção explica problemas que sua instância do Memorystore para Redis pode encontrar quando outros recursos tentam se conectar a ela.

Não é possível se conectar à instância de ambientes sem servidor que exigem um conector de acesso VPC sem servidor

Se você não conseguir se conectar à instância do Memorystore para Redis usando um dos ambientes sem servidor que exigem um conector de acesso VPC sem servidor, verifique se você configurou esse conector para seu ambiente. Para mais informações, consulte Requisitos do conector de acesso VPC sem servidor.

Não é possível se conectar à instância de um cluster do Google Kubernetes Engine (GKE)

Para se conectar à instância do Memorystore para Redis de um cluster do GKE, ative o alias nativo de VPC/IP no cluster.

É mais fácil ativar o alias nativos de VPC/IP durante a criação do cluster. Na seção de opções avançadas, selecione Nativo de VPC. Para mais informações, consulte Criar um cluster nativo de VPC.

Problemas com o Identity and Access Management (IAM)

Esta seção explica os problemas do IAM que sua instância do Memorystore para Redis pode encontrar.

Você quer restaurar uma vinculação de política excluída para uma conta de serviço

O Memorystore para Redis usa as seguintes contas de serviço para gerenciar suas instâncias:

service-PROJECT_NUMBER@service-networking.iam.gserviceaccount.com

service-PROJECT_NUMBER@cloud-redis.iam.gserviceaccount.com

Se você excluir as vinculações de política dessas contas de serviço, não será possível criar instâncias.

Se você tentar criar uma instância do Memorystore para Redis usando a Google Cloud CLI, poderá receber a seguinte mensagem de erro:

(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 da conta de serviço service-networking, execute o seguinte comando. Substitua VARIABLES pelos valores adequados.

gcloud projects add-iam-policy-binding PROJECT_ID --member='serviceAccount:service-PROJECT_NUMBER@service-networking.iam.gserviceaccount.com' --role='roles/servicenetworking.serviceAgent'

Para restabelecer a vinculação de política para a conta de serviço cloud-redis, execute o comando a seguir. Substitua VARIABLES pelos valores adequados.

gcloud projects add-iam-policy-binding PROJECT_ID --member='serviceAccount:service-PROJECT_NUMBER@cloud-redis.iam.gserviceaccount.com' --role='roles/redis.serviceAgent'

Problemas de tempo limite da operação

Os problemas a seguir resultam em uma instância do Redis sem resposta e/ou tempos limites de operação de instância/nó.

Problemas 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 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 caso, é 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 doGoogle 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, verifique primeiro 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 Google Cloud CLI

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 de compartilhamento restrito de domínio

Dependendo de quando a instância foi criada, o Memorystore para Redis usa um de dois formatos diferentes de conta de serviço. Para identificar qual formato de conta de serviço sua instância usa, consulte Formato da conta de serviço do Memorystore para Redis.

Há um problema conhecido em que a política da organização iam.allowedPolicyMemberDomains causa erros quando usada com instâncias do Memorystore para Redis que usam o formato da 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.

  1. Crie uma instância: as instâncias recém-criadas têm o formato de conta de serviço adequado, que é 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 seu aplicativo.
  2. Forçar o acesso à conta: use essa opção apenas se for inviável recriar a instância.