Resolver problemas

Esta página explica vários problemas, as mensagens de erro para estes problemas e passos de resolução de problemas para resolver os problemas.

Problemas de conetividade

Se a sua instância do Memorystore for Redis tiver problemas de conetividade, verifique os problemas nesta secção para ver se algum deles causa o problema.

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

Se o nó não responder, verifique se algum dos problemas de rede é o motivo pelo qual a ligação de rede do nó está bloqueada. Se nenhum destes problemas resolver o problema, contacte o apoio técnico ao cliente do Google Cloud.

Aprovisiona recursos em diferentes redes VPC.

Para se ligar a uma instância do Memorystore for Redis a partir de um Google Cloud recurso, como uma VM do Compute Engine, tem de aprovisionar os recursos na mesma rede VPC autorizada que a instância.

A tentativa de usar o Telnet numa instância a partir de um recurso que se encontra numa região ou numa rede VPC diferente resulta na seguinte mensagem de erro:

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

Elimina um intercâmbio da rede da VPC.

Quando cria uma instância do Memorystore for Redis, cria um peering de VPC entre a sua rede VPC e uma rede VPC interna da Google.

A interligação de redes usa o seguinte formato:

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

Se esta interligação de rede for eliminada, a tentativa de Telnet para a instância resulta na seguinte mensagem de erro:

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

Para restabelecer a interligação de rede eliminada, crie outra instância. Em seguida, elimine esta instância. A sua instância original tem agora a interligação de redes de que precisa.

Cria regras de firewall que bloqueiam os endereços IP da sua instância.

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

Problemas de utilização da CPU

Esta secção explica os problemas de utilização da CPU que a sua instância do Memorystore for Redis pode encontrar.

A sua instância tem uma latência elevada ou não responde.

Se a sua instância do Memorystore for Redis tiver uma latência elevada ou não responder, estes problemas podem ser causados pela utilização dos seguintes comandos do Redis que consomem muitos recursos:

Estes comandos podem exercer uma forte pressão sobre a CPU da sua instância. Recomendamos que não execute o comando KEYS em ambientes de produção. Em alternativa, use SCAN, uma vez que este comando usa menos recursos do que KEYS.

A utilização de LRANGE para consultar todo o espaço de chaves ou um grande subconjunto do mesmo pode exigir recursos de CPU elevados. Para resolver este problema, recomendamos que reduza o número de chaves no conjunto de chaves que consulta numa única operação.

A utilização de um script Lua complexo com EVAL também pode causar uma utilização elevada da CPU. Recomendamos que use scripts Lua menos complexos.

HGETALL e ZRANGE podem devolver um grande número de chaves, o que afeta negativamente o desempenho do seu servidor. Em vez de HGETALL, recomendamos que execute o comando HSCAN. Além disso, antes de usar ZRANGE, recomendamos que limite o tamanho do intervalo que usa para uma consulta.

Antes de executar um comando com utilização intensiva de recursos, verifique o tamanho das estruturas de dados que o comando consulta para garantir que não causa latência.

Se a sua instância tiver uma latência elevada ou não responder, faça o seguinte:

  1. Verifique os registos por parte do cliente para saber se foram executados comandos que consomem muitos recursos. 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. Verifique se os períodos de utilização elevada da CPU coincidem com os mesmos períodos em que os comandos com utilização intensiva de recursos foram executados.

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

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

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

Recomendamos que monitorize o maxmemory e a memória usada da sua instância. Isto ajuda a saber se a sua instância atinge a capacidade da instância aprovisionada. Além disso, ao reduzir o valor do parâmetro maxmemory-gb, tem mais espaço para as despesas gerais.

Problemas de rede

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

Esgota o intervalo de IPs atribuído ou existe uma rota em conflito.

Quando cria recursos no intervalo de endereços IP dedicado ao Memorystore for Redis, pode esgotar todos os endereços IP. Em alternativa, pode existir uma rota em conflito com o endereço IP da instância do Memorystore for Redis que está a tentar criar.

Estes problemas fazem com que seja apresentada 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 este problema, atribua endereços IP adicionais ou remova a discrepância de conflito de rota. Para mais informações, consulte o artigo Esgotamento do intervalo de endereços IP.

Não tem uma ligação de acesso a serviços privados estabelecida para a sua rede.

Se a sua instância do Memorystore for Redis usar o modo de ligação de acesso a serviços privados, mas não existir uma ligação de acesso a serviços privados para a sua rede, pode receber a seguinte mensagem de erro:

Google private service access is not enabled. Enable private service access and try again

Para resolver este problema, estabeleça uma ligação de acesso a serviços privados.

Elimina o intercâmbio de rede para a ligação de acesso a serviços privados.

Quando estabelece uma ligação de acesso privado aos serviços, o Memorystore for Redis cria uma ligação de peering de rede denominada servicenetworking-googleapis-com. Esta ligação aparece na página de intercâmbio de redes VPC do seu projeto.

Se eliminar a interligação de redes, é apresentada a seguinte mensagem de erro para as instâncias existentes:

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

Além disso, se eliminar a interligação de redes e criar uma instância, é apresentada a seguinte mensagem de erro:

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

Para resolver este problema, crie uma ligação de acesso a serviços privados entre a 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

Usar parâmetros em conflito.

Se usar o parâmetro --reserved-ip-range e o parâmetro --connect-mode=private-service-access, recebe a seguinte mensagem de erro:

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

Não pode usar ambos os parâmetros ao mesmo tempo porque o Memorystore for Redis não suporta o parâmetro --reserved-ip-range para o modo de ligação de acesso aos serviços privados.

Para resolver este 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.

Excede a quota de sub-redes para o seu projeto.

Existe um limite para o número de sub-redes que pode criar no seuGoogle Cloud projeto. Se exceder esta quota, recebe 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 este problema, preencha o formulário que aparece nas mensagens de erro ou contacte o apoio ao cliente da nuvem.

Não associa o projeto de serviço ao projeto anfitrião.

Se usar a VPC partilhada e não anexar o projeto de serviço ao projeto anfitrião, recebe 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 este problema, anexe o projeto de serviço ao projeto anfitrião.

Cria uma instância num projeto de serviço com o modo de ligação de intercâmbio direto e designa uma rede VPC partilhada.

Se criar uma instância do Memorystore for Redis num projeto de serviço e designar uma rede da VPC partilhada do projeto anfitrião para a instância, não pode usar o modo de ligação de intercâmbio direto.

Por predefinição, o modo de ligação está definido como intercâmbio direto. Se tentar usar este modo de ligação quando cria uma instância e também escolher uma rede de VPC partilhada do projeto anfitrião como o valor do parâmetro --network, recebe a seguinte mensagem de erro:

Authorized_network must exist in the same project as redis instance

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

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

Usa um intervalo de endereços IP para o Compute Engine ao qual o Memorystore for Redis não consegue aceder.

Não pode aceder à sua instância do Memorystore for Redis a partir de uma VM do Compute Engine que tenha um endereço IP no intervalo 172.17.0.0/16. Este intervalo está reservado para um componente interno.

Para resolver este problema, aceda à sua instância a partir de uma VM do Compute Engine que tenha um endereço IP num intervalo diferente.

Problemas de ligação à sua instância a partir de outros Google Cloud recursos

Esta secção explica os problemas que a sua instância do Memorystore for Redis pode encontrar quando outros recursos tentam estabelecer ligação à mesma.

Não pode estabelecer ligação à sua instância a partir de ambientes sem servidor que requerem um conetor do Acesso a VPC sem servidor

Se não conseguir estabelecer ligação à sua instância do Memorystore para Redis através de um dos ambientes sem servidor que requerem um conetor do Acesso a VPC sem servidor, verifique se configurou este conetor para o seu ambiente. Para mais informações, consulte o requisito do conetor do Acesso a VPC sem servidor.

Não pode estabelecer ligação à sua instância a partir de um cluster do Google Kubernetes Engine (GKE)

Para estabelecer ligação à sua instância do Memorystore for Redis a partir de um cluster do GKE, tem de ativar o modo nativo da VPC/alias de IP no cluster.

É mais fácil ativar o alias de IP/nativo de VPC quando cria o cluster. Na secção de opções avançadas, selecione VPC nativa. Para mais informações, consulte o artigo Crie um cluster nativo de VPC.

Problemas de gestão de identidade e de acesso (IAM)

Esta secção explica os problemas de IAM que a sua instância do Memorystore for Redis pode encontrar.

Quer restaurar uma associação de políticas eliminada para uma conta de serviço

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

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

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

Se eliminar as associações de políticas para estas contas de serviço, não pode criar instâncias.

Se tentar criar uma instância do Memorystore for Redis através da Google Cloud CLI, pode 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 associação de políticas para a 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 associação de políticas para a 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 limite de tempo da operação

Os seguintes problemas resultam numa instância Redis que não responde e/ou em tempos limite de operação de instâncias/nós.

Problemas de partição de rede

Por vezes, Google Cloud os recursos não conseguem comunicar entre zonas numa região devido a um erro de partição de rede nos servidores do Google Cloud. Isto pode fazer com que a sua instância perca a ligação, o que resulta num erro de tempo limite.

Depois de Google Cloud resolver o erro de partição de rede para a região ou a zona onde a sua instância é aprovisionada, a conetividade deve ser retomada normalmente.

Neste problema, pode ver uma mensagem de erro de conetividade, como a seguinte:

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

Se não conseguir identificar a causa do erro de limite de tempo, contacte o Google Cloud apoio técnico.

O projeto de serviço e o projeto anfitrião não estão no mesmo perímetro do VPC Service Controls

Se estiver a usar a VPC partilhada e um perímetro dos VPC Service Controls, e a operação de criação da instância do Redis expirar, isto pode indicar que o projeto de serviço e o projeto anfitrião não estão no mesmo perímetro de serviço. O projeto de serviço e o projeto anfitrião têm de estar no mesmo perímetro para que a sua instância do Redis comunique com os clientes de ligação através da rede de VPC partilhada.

Para ver se está a ter este problema, verifique os registos de auditoria da sua instância do Redis para o seguinte erro:

violationReason: "NETWORK_NOT_IN_SAME_SERVICE_PERIMETER"

Para resolver este problema, coloque a sua rede de anfitriões e a sua rede de serviços no mesmo perímetro de serviço.

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

Esta secção descreve alguns problemas comuns que pode encontrar quando usa a importação e a exportação para o Memorystore for Redis.

Os botões de importação e exportação estão desativados na Google Cloud consola

Problema: o utilizador com sessão iniciada na consola não tem as autorizações redis.instances.import e/ou redis.instances.export necessárias para importar e/ou exportar ficheiros RDB.

Solução: conceda as autorizações ao utilizador 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 existe uma mensagem de erro na Google Cloud consola ou na linha de comandos e resolva os problemas descritos na mensagem de erro.

Se ocorrer uma falha durante o processo de importação, a instância é recuperada através de um ficheiro RDB vazio. Pode tentar restaurar os dados importando novamente o mesmo ficheiro RDB ou usando um ficheiro RDB diferente.

A importação falhou porque o ficheiro RDB era demasiado grande

Se recebeu a mensagem de erro "Import RDB file gs://bucket/object.rdb size exceeds max memory 10GB", deve aumentar a escala da instância e tentar novamente a importação. Também pode tentar importar um ficheiro RDB mais pequeno para a sua instância.

Resolução de problemas da CLI do Google Cloud

Se tiver um problema em que um comando da CLI gcloud não está disponível, ou se o comando se comportar de forma diferente da documentada, experimente atualizar a CLI gcloud:

gcloud components update

Parar todos os comandos e ligações em curso para uma instância do Redis

Uma vez que o Memorystore for Redis é um produto gerido pela Google, existem alguns comandos que estão bloqueados na sua instância do Redis para oferecer um ambiente seguro e fiável. Um dos comandos restritos é CLIENT, que inclui CLIENT KILL, usado para parar comandos.

Se um comando Redis estiver a consumir muita utilização de CPU/RAM e estiver a afetar o seu ambiente de produção, tem de reiniciar a instância (para configurações do Nível básico) ou fazer failover para uma réplica (para configurações do Nível padrão). Esta operação de reinício/comutação por falha para todos os comandos em execução no servidor Redis e termina todas as ligações em curso.

Abaixo, encontra comandos para realizar reinícios ou failovers para cada configuração do Memorystore for Redis.

Parar comandos em instâncias do Memorystore para Redis de nível Standard

gcloud redis instances failover INSTANCE_NAME --data-protection-mode=limited-data-loss

Parar comandos em instâncias do Memorystore for Redis de nível básico

A única forma de reiniciar instâncias do Memorystore for Redis é alterar a respetiva configuração, como aumentar a escala da instância. Pode encontrar abaixo um exemplo de um comando que pode executar para reiniciar a sua instância.

gcloud redis instances update INSTANCE_NAME --region REGION_ID --size NUMBER_GB

Depois de dimensionar a instância para um tamanho diferente, pode executar outra operação de dimensionamento para a devolver ao tamanho original.

Problemas com a política da organização de partilha restrita por domínio

Consoante a data de criação da sua instância, o Memorystore para Redis usa um de dois formatos de conta de serviço diferentes. Para identificar o formato da conta de serviço que a sua instância usa, consulte o artigo Formato da conta de serviço do Memorystore para Redis.

Existe 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.

Nestes problemas, pode encontrar este erro: One or more users named in the policy do not belong to a permitted customer.

Existem duas opções para resolver este problema.

  1. Crie uma instância: as instâncias criadas recentemente 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 da cache, pode fazer uma exportação para fazer uma cópia de segurança dos dados existentes 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 tem de ser configurado na sua aplicação.
  2. Forçar acesso à conta: use esta opção apenas se for inviável recriar a sua instância.