Esta página explica vários cenários de erro, as mensagens de erro para esses cenários e os passos de resolução de problemas para resolver os erros.
Cenários de erro de conetividade
Se a sua instância tiver problemas de conetividade, verifique os cenários nesta secção para ver se um deles está a causar o problema.
Caso contrário, use o Telnet num dos seus nós do Redis e execute alguns comandos simples do Redis para ver se a instância está a responder ou não.
- Se o nó não responder, verifique se algum dos problemas de resolução de problemas dos cenários de erro de rede está a bloquear a ligação de rede do nó. Caso contrário, contacte o Google Cloud apoio técnico.
Erro de ligação causado por recursos aprovisionados em diferentes redes VPC
Para se ligar a uma instância do Memorystore a partir de um recurso, como uma VM do Compute Engine, os recursos têm de ser aprovisionados na mesma rede de VPC autorizada que a instância do Redis. Google Cloud
A tentativa de usar o Telnet numa instância do Memorystore a partir de um recurso numa região ou numa rede VPC diferente resulta na seguinte mensagem de erro:
telnet: Unable to connect to remote host: Connection timed out
Erro de ligação causado pelo intercâmbio da rede da VPC eliminado
A criação de 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 do Redis resulta na seguinte mensagem de erro:
telnet: Unable to connect to remote host: Connection timed out
A forma mais fácil de restabelecer a interligação de redes eliminada é criar uma nova instância do Memorystore for Redis. A criação de uma nova instância do Redis restabelece o peering de rede eliminado, pelo que pode eliminá-lo e a sua instância original do Redis tem o peering de rede de que precisa.
As regras de firewall bloqueiam os endereços IP da instância
Podem surgir problemas de conetividade se criar regras de firewall de saída que bloqueiem a porta do Redis (6379) ou o endereço IP da instância.
Certifique-se de que não cria regras de firewall de rede que bloqueiem o intervalo de IP das suas instâncias do Redis.
Cenários de erro de utilização elevada da CPU
A não resposta da instância de Redis causada pela utilização inadequada de comandos Redis dispendiosos
Se a sua instância do Redis tiver uma latência elevada, não responder ou tiver problemas de conetividade, os problemas podem ser causados pela utilização incorreta dos seguintes comandos do Redis dispendiosos:
Estes comandos podem exercer uma forte pressão sobre a CPU da sua instância. O Redis de código aberto desaconselha a execução de KEYS
em ambientes de produção. No entanto, pode usar SCAN
, que é uma alternativa mais segura ao comando KEYS
. A utilização de LRANGE
para consultar todas ou um grande subconjunto do seu espaço de chaves pode exigir recursos elevados da CPU.
A utilização de um script Lua complexo com EVAL
pode causar uma utilização elevada da CPU.
HGETALL
e ZRANGE
também podem devolver um número muito elevado de chaves, o que afeta
negativamente o desempenho do seu servidor.
Antes de executar comandos dispendiosos, deve verificar a dimensão 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, verifique os registos do lado do cliente para saber se algum comando dispendioso foi executado. Se sim, anote a hora.
Em seguida, 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 dispendiosos foram executados.
Recomendamos que não use 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 consultado numa única operação.
Cenários de erros de rede
O intervalo de IPs atribuído está esgotado 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, o que provoca a apresentação da mensagem de erro abaixo. Em alternativa, pode existir uma rota em conflito com o endereço IP da instância do Redis que está a tentar criar.
Estes 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.
Pode resolver este problema atribuindo endereços IP adicionais ou removendo a discrepância de conflito de rotas. Para mais informações sobre como o fazer, 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 Redis usar o modo de ligação de acesso a serviços privados e não existir uma ligação de acesso a serviços privados para a sua rede, pode receber o seguinte 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.
A interligação de redes para o acesso a serviços privados é eliminada
O estabelecimento de uma ligação de acesso privado aos serviços
cria uma ligação de intercâmbio de rede denominada
servicenetworking-googleapis-com
, que aparece na página Intercâmbio de rede VPC do seu projeto.
A eliminação da interligação de redes faz com que receba o seguinte erro para as instâncias do Redis existentes:
telnet: Unable to connect to remote host: Connection timed out
A eliminação da interligação de redes faz com que receba o seguinte erro quando 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 este problema, siga o último passo das instruções do gcloud em Estabelecer uma ligação de acesso a serviços privados.
Sinalizações de rede em conflito durante a criação da instância de Redis
Se usar o parâmetro --reserved-ip-range
e o parâmetro --connect-mode=private-service-access
, recebe o seguinte erro:
Reserved IP range is not supported for --connect-mode private services access
Para resolver este problema, use --reserved-ip-range
com --connect-mode=direct-peering
ou use --connect-mode=PRIVATE_SERVICE_ACCESS
.
Não pode usar ambos ao mesmo tempo, porque o parâmetro --reserved-ip-range
não é suportado para o modo de ligação de acesso a serviços privados.
Exceder a quota de sub-redes para o seu projeto
Existe um limite para o número de sub-redes que podem ser criadas no seu projeto. Se exceder esta quota, recebe 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 este problema, preencha o formulário na mensagem de erro ou contacte o Google Cloud apoio técnico.
O projeto de serviço não está associado ao projeto anfitrião
Se estiver a usar a VPC partilhada, o projeto de serviço não está associado ao projeto anfitrião se receber o seguinte 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 seu projeto de serviço ao seu projeto anfitrião.
Utilização incompatível do modo de ligação de peering direto e da rede VPC partilhada durante a criação da instância
Não pode criar uma instância do Redis num projeto de serviço com o modo de ligação de peering direto enquanto designa uma rede VPC partilhada do projeto anfitrião para a instância.
O modo de ligação está definido como direct-peering
por predefinição se não definir um valor para --connection-mode
. Se tentar usar o modo de ligação de intercâmbio direto durante a criação da instância e também escolher uma rede da VPC partilhada do projeto anfitrião como o valor de --network
, recebe o seguinte erro:
Authorized_network must exist in the same project as redis instance
Para resolver este problema, certifique-se de que especifica --connect-mode=PRIVATE_SERVICE_ACCESS
no comando de criação da instância do Redis ou escolha uma rede de VPC autorizada no
mesmo projeto que a instância do Redis.
Intervalos de endereços IP do Compute Engine não suportados
Não pode aceder ao Memorystore for Redis a partir de VMs do Compute Engine que tenham um endereço IP no intervalo 172.17.0.0/16
, porque esse intervalo está reservado para um componente interno.
Erros ao estabelecer ligação à sua instância do Redis a partir de outros recursos Google Cloud
Erros ao estabelecer ligação à sua instância a partir de ambientes sem servidor que requerem um conetor de acesso a VPC sem servidor
Se não conseguir estabelecer ligação a uma instância do Redis através de um dos ambientes sem servidor que requerem um conetor do Acesso a VPC sem servidor, é possível que não tenha configurado um conetor do Acesso a VPC sem servidor para o seu ambiente.
Consulte o requisito do conetor do Acesso a VPC sem servidor para mais detalhes.
Erros ao estabelecer ligação à sua instância através de um cluster do Google Kubernetes Engine
Não pode estabelecer ligação a uma instância do Memorystore for Redis a partir de um cluster do GKE sem o modo nativo da VPC/alias de IP ativado no seu cluster. É mais fácil ativar o alias de IP/nativo de VPC durante a criação do cluster do GKE. Quando criar o cluster, selecione VPC nativa em opções avançadas. Para mais detalhes, consulte o artigo Criar clusters nativos da VPC.
Cenários de erro da gestão de identidade e de acesso ( IAM)
Restaurar uma associação de política eliminada para uma conta de serviço
O Memorystore for Redis usa as seguintes contas de serviço para gerir as suas instâncias do Redis:
- service-project-number@service-networking.iam.gserviceaccount.com
- service-project-number@cloud-redis.iam.gserviceaccount.com
A eliminação das associações de políticas para estas contas de serviço impede que possa criar novas instâncias.
Se tentar criar uma instância do Redis com o gcloud neste cenário, 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 estas contas de serviço, execute um dos seguintes comandos, substituindo variables por valores adequados. Execute o comando associado à conta de serviço eliminada.
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 limite de tempo da operação
Os seguintes cenários de erro resultam numa instância do Redis que não responde e/ou em tempos limite de operação de instâncias/nós.
Erro 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 cenário, 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 consola Google Cloud
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 para 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 for 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 uma instância 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 de [PROJECT_NUMBER]-compute@developer.gserviceaccount.com
conta de serviço.
Nestes cenários, 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.
Opção 1
Pode criar uma nova 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 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. Tenha em atenção que uma instância criada recentemente tem um novo endereço IP de serviço que tem de ser configurado na sua aplicação.
Opção 2
Se não for possível recriar a instância do Memorystore, siga a solução alternativa de forçar o acesso à conta.