Resolver problemas

Nesta página, explicamos vários problemas, as mensagens de erro desses problemas 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 é o motivo pelo qual a conexão de rede do nó está bloqueada. Se nenhum desses problemas resolver o problema, 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 a partir de um Google Cloud recurso, 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 de um recurso que está em uma região ou rede VPC diferente resulta na 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 resultará na 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 essa instância. Sua instância original agora tem o peering de rede de que precisa.

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.

Você tem conexões sem resposta

Recomendamos configurar o aplicativo cliente para detectar conexões sem resposta ao Memorystore para Redis. Quando uma conexão sem resposta é detectada, o cliente precisa redefini-la. Para criar um aplicativo resiliente, recomendamos as seguintes configurações do cliente:

  • Configurar parâmetros de sinal de atividade do TCP: defina os parâmetros TCP keepalive time, TCP keepalive interval e TCP keepalive probes para que os clientes detectem e descartem conexões sem resposta de maneira proativa, mesmo quando as conexões estiverem inativas. Por exemplo, se você definir o parâmetro TCP keepalive time como 30 segundos, TCP keepalive interval como 10 segundos e TCP keepalive probes como 3, os clientes vão redefinir as conexões inativas sem resposta em um minuto.
  • Configurar tempos limite de usuário TCP: defina esse tempo limite nos clientes para redefinir conexões que têm solicitações pendentes e parar de responder. Por exemplo, se você definir o tempo limite como 15 segundos, os clientes vão redefinir as conexões sem resposta que têm solicitações pendentes após 15 segundos.

Problemas de uso da CPU

Esta seção explica os problemas de uso da CPU que a instância do Memorystore para Redis pode encontrar.

A 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, esses problemas poderão ser causados pelo uso dos seguintes comandos do Redis com uso intensivo 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 limitar o tamanho do intervalo usado para uma consulta.

Antes de executar um comando com uso intensivo de recursos, 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, faça o seguinte:

  1. Verifique os registros do lado do cliente para saber se algum comando com uso intensivo de recursos foi executado. Se sim, anote a data e a hora.
  2. Use o Cloud Monitoring para visualizar 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 usadas menos recentemente (LRU, na sigla em inglês) de todo o conjunto de chaves.

Recomendamos monitorar o maxmemory e a memória usada da 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ê terá mais espaço para a sobrecarga.

As métricas externas estão ausentes da instância

Se a instância tiver alta utilização da CPU ou se os recursos dela ficarem esgotados (por exemplo, por ter muitas conexões), a instância poderá se comportar mal e as métricas externas poderão estar ausentes.

Problemas de rede

Esta seção explica os problemas de rede que a 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 que entre 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 outros 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 particulares.

Você exclui 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 particulares, o Memorystore for Redis cria uma conexão de peering de rede chamada servicenetworking-googleapis-com. Essa conexão aparece na página de peering de rede VPC do seu projeto.

Se você excluir o peering de rede, a seguinte mensagem de erro vai aparecer para as 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 o parâmetro --reserved-ip-range e o parâmetro --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 for Redis não oferece suporte ao parâmetro --reserved-ip-range para o modo de conexão de acesso a serviços particulares.

Para resolver esse problema, faça uma das seguintes ações:

  • 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ê excede a cota de sub-rede do seu projeto.

Há um limite para o número de sub-redes que podem ser criadas no seu Google Cloud projeto. 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 Cloud Customer Care.

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

Se você usar 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 seu 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 esse problema, faça uma das seguintes ações:

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

Você usa um intervalo de endereços IP para o Compute Engine que o Memorystore para Redis não pode 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 a instância de outros Google Cloud recursos

Esta seção explica os problemas que a 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 não for possível 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 o 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 for Redis de um cluster do GKE, ative o alias nativo de VPC/IP no cluster.

É mais fácil ativar o alias nativo de VPC/IP ao criar o 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 do Identity and Access Management (IAM)

Esta seção explica os problemas do IAM que a 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 por 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 da conta de serviço cloud-redis, execute o seguinte comando. Substitua VARIABLES por 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 limite de operação de instância/nó.

Problemas de partição de rede

Às vezes, Google Cloud os recursos 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. Google Cloud

Nesse problema, você pode receber 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 Google Cloud o suporte.

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 Google Cloud console

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 ou na linha de comando e resolva os problemas descritos na mensagem de erro. Google Cloud

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.

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

Dependendo de quando a instância foi criada, o Memorystore para Redis usa um de dois formatos de conta de serviço diferentes. 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 de conta de serviço [PROJECT_NUMBER]-compute@developer.gserviceaccount.com.

Nesses problemas, 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. Criar 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 fundamental manter o conteúdo do cache, você poderá fazer 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.
  2. Forçar o acesso à conta: use essa opção apenas se for inviável recriar a instância.