Solução de problemas

Nesta página, explicamos vários cenários de erros, as mensagens para eles e as etapas de solução de problemas.

Cenários de erro de conectividade

Se a instância enfrentar problemas de conectividade, verifique os cenários nesta seção para ver se um deles está causando o problema.

Caso contrário, Telnet para um dos nós do Redis e execute alguns comandos simples do Redis para ver se a instância é responsiva ou não.

Erro de conexão causado por recursos provisionados em diferentes redes VPC

Para se conectar a uma instância do Memorystore a partir de um recurso do Google Cloud, como uma VM do Compute Engine, os recursos precisam ser provisionados na mesma rede VPC autorizada da instância do Redis.

A tentativa de Telnet para uma instância do Memorystore de um recurso em uma região ou rede VPC diferente resulta na seguinte mensagem de erro:

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

Erro de conexão causado pelo peering da rede VPC excluído

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 seguinte formato:

redis-peer-############

Se esse peering de rede for excluído, a tentativa de Telnet para a instância do Redis resultará na seguinte mensagem de erro:

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 sua instância original do Redis tem o peering de rede necessário.

As regras de firewall bloqueiam os endereços IP da sua instância

Problemas de conectividade podem surgir se você criar regras de firewall de saída que bloqueiam a porta do Redis (6379) ou o endereço IP da instância.

Certifique-se de não criar regras de firewall de rede que bloqueiem o intervalo de IPs das suas instâncias do Redis.

Cenários de erro de alto uso da CPU

Não capacidade de resposta da instância do Redis causada pelo uso indevido de comandos Redis caros

Se a instância do Redis tiver problemas de alta latência, capacidade de resposta ou conectividade, os problemas podem ser causados pelo uso inadequado dos seguintes comandos caros do Redis:

Esses comandos podem sobrecarregar a CPU na instância. O Redis de código aberto não incentiva a execução de KEYS em ambientes de produção. O uso de LRANGE para consultar todo ou um grande subconjunto do keyspace pode exigir recursos elevados de CPU. O uso de um script Lua complexo com EVAL pode causar um alto uso da CPU.

Se a instância enfrentar alta latência ou capacidade de resposta, verifique os registros do cliente para ver se algum comando caro foi executado. Se esse for o caso, anote o horário. Em seguida, use o Cloud Monitoring para ver a métrica redis.googleapis.com/stats/cpu_utilization. Veja se os períodos de alta utilização da CPU coincidem com os mesmos períodos em que os comandos caros foram executados.

Não recomendamos o uso do 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 erro de rede

O intervalo de IP alocado foi esgotado ou existe uma rota conflitante

Durante a criação de recursos no intervalo de endereços IP dedicado ao Memorystore para Redis, você pode esgotar todos os endereços, causando a mensagem de erro abaixo. Como alternativa, pode haver uma rota que entre 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.

Para resolver esse problema, aloque mais endereços IP ou remova a discrepância de conflito de rota. Para mais informações sobre como fazer isso, 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 particulares na sua rede, talvez você receba o seguinte 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.

O peering de rede para acesso a serviços particulares 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 redes VPC do seu projeto.

A exclusão do peering de rede faz com que você receba o seguinte erro para instâncias atuais do Redis:

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

A exclusão do peering de rede faz com que você receba o seguinte erro 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 do 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, receberá o seguinte erro:

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 --connect-mode=PRIVATE_SERVICE_ACCESS.

Não é possível usar ambos 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.

Como exceder a cota de sub-rede para seu projeto

Há um limite no número de sub-redes que podem ser criadas no seu 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, seu projeto de serviço não será anexado ao projeto host se você receber o seguinte 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.

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 enquanto designa uma rede VPC compartilhada a partir do projeto host da 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 de --network, receberá o seguinte erro:

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 autorizada no mesmo projeto que a instância do Redis.

Intervalos de endereços IP do Compute Engine incompatíveis

Não é possível acessar o Memorystore para Redis a partir de 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 de outros recursos do GCP à instância do Redis

Erros de conexão com a instância a partir de ambientes sem servidor que exigem um conector de acesso VPC sem servidor

Se não for possível 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 seu ambiente.

Consulte Requisito do conector de acesso VPC sem servidor para mais detalhes.

Erros ao se conectar à sua instância usando um cluster do Google Kubernetes Engine

Não é possível se conectar a uma instância do Memorystore para Redis usando um cluster do GKE sem o alias de IP nativo/VPC ativado no cluster. É mais fácil ativar o alias de IP nativo/VPC 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 erro de gerenciamento de identidade e acesso ( IAM)

Como 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 do Redis:

  • serviço-project-number@service-networking.iam.gserviceaccount.com
  • serviço-project-number@cloud-redis.iam.gserviceaccount.com

A exclusão das vinculações de política para essas contas de serviço impede que você seja capaz de criar novas instâncias.

Se você tentar criar uma instância do Redis usando o gcloud nesse cenário, 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 da política a essas contas de serviço, execute um dos comandos a seguir, 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 um tempo limite de resposta do Redis e/ou em uma 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 fazer com que sua instância perca a conexão, resultando em um erro de tempo limite.

Depois que o Google Cloud resolver o erro de partição de rede da região ou da zona em que sua instância é provisionada, a conectividade será retomada normalmente.

Nesse cenário, você pode ver uma mensagem de erro de conectividade como a seguinte:

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.

O projeto de serviço e o projeto de host não estão no mesmo perímetro de VPC Service Control

Se você estiver usando a VPC compartilhada e um perímetro de VPC Service Control e a operação de criação da instância do Redis expirar, isso pode 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 de 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 seus registros de auditoria da instância do Redis para ver o seguinte erro:

violationReason: "NETWORK_NOT_IN_SAME_SERVICE_PERIMETER"

Para resolver esse problema, coloque sua rede de host e sua rede de serviços no mesmo perímetro de serviço.

Solução de problemas de importação e exportação

Nesta seção, descrevemos alguns problemas comuns que você pode encontrar ao usar a importação e exportação para o Memorystore para Redis.

Os botões de importação e exportação estão desativados no Console do 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 Cloud ou na linha de comando e resolva os problemas descritos.

Se houver uma falha durante o processo de importação, a instância será recuperada usando um arquivo RDB vazio. É possível tentar restaurar os dados importando o mesmo arquivo RDB novamente ou usando um arquivo RDB diferente.

A importação falhou porque o arquivo RDB era muito grande

Se você recebeu a mensagem de erro "Import RDB file gs://bucket/object.rdb size excede a memória máxima de 10 GB&quot, aumente a instância e tente importar novamente. Você também pode tentar importar um arquivo RDB menor para a instância.

Solução de problemas da CLI do Google Cloud

Se você encontrar um problema em que um comando da CLI gcloud está indisponível ou se o comando se comportar de maneira diferente da forma em que foi documentado, atualize 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 instância do Redis para oferecer 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 básico) ou faça o failover para uma réplica (para configurações de nível padrão). 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ê encontra 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 Básico

A única maneira de reiniciar 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 dimensionar a instância para um tamanho diferente, execute outra operação de escalonamento para retorná-la ao tamanho original.