Depurar problemas de conexão

Introdução

Geralmente, os problemas de conexão se enquadram em uma das três áreas a seguir:

  • Conectando - você consegue acessar sua instância pela rede?
  • Autorizando - você está autorizado a se conectar à instância?
  • Autenticação - o banco de dados aceita suas credenciais de banco de dados?

Cada uma delas pode ser subdividida em diferentes caminhos para investigação. A seção a seguir inclui exemplos de perguntas que você pode se fazer para ajudar a refinar ainda mais o problema:

Lista de verificação de problemas de conexão

Mensagens de erro

Para mensagens de erro específicas da API, consulte a página de referência de mensagens de erro .

Solução de problemas de conectividade adicional

Para outros problemas, consulte a seção Conectividade na página de solução de problemas.

Problemas comuns de conexão

Verifique se seu aplicativo está fechando as conexões corretamente

Se você vir erros contendo " Aborted connection nnnn to db: ", isso geralmente indica que seu aplicativo não está interrompendo as conexões corretamente. Problemas de rede também podem causar esse erro. O erro não significa que haja problemas com sua instância do Cloud SQL. Também recomendamos executar o tcpdump para inspecionar os pacotes e rastrear a origem do problema.

Para obter exemplos de práticas recomendadas para gerenciamento de conexões, consulte Gerenciando conexões de banco de dados .

Verifique se seus certificados não expiraram

Se sua instância estiver configurada para usar SSL, acesse a página Instâncias do Cloud SQL no Google Cloud console e abra a instância. Abra a página Conexões , selecione a aba Segurança e certifique-se de que o certificado do seu servidor esteja válido. Se ele estiver expirado, você deverá adicionar um novo certificado e alternar para ele.

Verifique se você está autorizado a conectar

Se suas conexões estiverem falhando, verifique se você está autorizado a se conectar:

  • Se você estiver com problemas para se conectar usando um endereço IP, por exemplo, se estiver se conectando do seu ambiente local com o cliente psql, certifique-se de que o endereço IP do qual você está se conectando esteja autorizado a se conectar à instância do Cloud SQL.

    Conexões com uma instância do Cloud SQL usando um endereço IP privado são automaticamente autorizadas para intervalos de endereços RFC 1918. Dessa forma, todos os clientes privados podem acessar o banco de dados sem passar pelo Proxy de Autenticação do Cloud SQL. Intervalos de endereços não RFC 1918 devem ser configurados como redes autorizadas .

    Por padrão, o Cloud SQL não aprende rotas de sub-rede não RFC 1918 da sua VPC. Você precisa atualizar o peering de rede para o Cloud SQL para exportar quaisquer rotas não RFC 1918. Por exemplo:

    gcloud compute networks peerings update cloudsql-postgres-googleapis-com \
    --network=NETWORK \
    --export-subnet-routes-with-public-ip \
    --project=PROJECT_ID
  • Aqui está seu endereço IP atual .

  • Experimente o comando gcloud sql connect para se conectar à sua instância. Este comando autoriza seu endereço IP por um curto período. Você pode executar este comando em um ambiente com o gcloud CLI e o cliente psql instalados. Você também pode executar este comando no Cloud Shell , que está disponível noGoogle Cloud console e tem o gcloud CLI e o cliente psql pré-instalados. O Cloud Shell fornece uma instância do Compute Engine que você pode usar para se conectar ao Cloud SQL.
  • Permita temporariamente que todos os endereços IP se conectem a uma instância autorizando 0.0.0.0/0 .

Verifique como você se conecta

Se você receber uma mensagem de erro como:

FATAL: database `user` does not exist.

O comando gcloud sql connect --user só funciona com o usuário padrão ( postgres ). A solução alternativa é conectar-se usando o usuário padrão e, em seguida, usar o comando psql "\c" para reconectar-se com o usuário diferente.

Determinar como as conexões estão sendo iniciadas

Você pode ver informações sobre suas conexões atuais conectando-se ao seu banco de dados e executando o seguinte comando:

SELECT * from pg_stat_activity ;

Conexões que mostram um endereço IP, como 1.2.3.4 , estão se conectando usando IP. Conexões com cloudsqlproxy~1.2.3.4 estão usando o Proxy de Autenticação do Cloud SQL ou foram originadas do App Engine. Conexões do localhost podem ser usadas por alguns processos internos do Cloud SQL.

Limites de conexão

Não há limites de QPS para instâncias do Cloud SQL. No entanto, existem limites de conexão, tamanho e específicos do App Engine. Consulte Cotas e Limites .

As conexões de banco de dados consomem recursos no servidor e no aplicativo conectado. Sempre use boas práticas de gerenciamento de conexões para minimizar o impacto do seu aplicativo e reduzir a probabilidade de exceder os limites de conexão do Cloud SQL. Para obter mais informações, consulte Gerenciando conexões de banco de dados .

Mostrar conexões e threads

Para ver os processos em execução no seu banco de dados, use a tabela pg_stat_activity :

select * from pg_stat_activity;

Tempo limite de conexão (do Compute Engine)

Conexões com uma instância do Compute Engine atingem o tempo limite após 10 minutos de inatividade, o que pode afetar conexões não utilizadas de longa duração entre sua instância do Compute Engine e sua instância do Cloud SQL. Para obter mais informações, consulte Redes e Firewalls na documentação do Compute Engine.

Para manter ativas conexões não utilizadas de longa duração, você pode definir o TCP keepalive . Os comandos a seguir definem o valor do TCP keepalive para um minuto e tornam a configuração permanente após reinicializações da instância.

Exibe o valor atual de tcp_keepalive_time.

cat /proc/sys/net/ipv4/tcp_keepalive_time

Defina tcp_keepalive_time como 60 segundos e torne-o permanente após as reinicializações.

echo 'net.ipv4.tcp_keepalive_time = 60' | sudo tee -a /etc/sysctl.conf

Aplique a alteração.

sudo /sbin/sysctl --load=/etc/sysctl.conf

Exiba o valor tcp_keepalive_time para verificar se a alteração foi aplicada.

cat /proc/sys/net/ipv4/tcp_keepalive_time

Ferramentas para depuração de conectividade

tcpdump

O tcpdump é uma ferramenta para capturar pacotes. É altamente recomendável executá tcpdump para capturar e inspecionar os pacotes entre o seu host e as instâncias do Cloud SQL ao depurar problemas de conectividade.

Localize seu endereço IP local

Se você não souber o endereço local do seu host, execute o comando ip -br address show . No Linux, isso mostra a interface de rede, o status da interface, o IP local e os endereços MAC. Por exemplo: eth0 UP 10.128.0.7/32 fe80::4001:aff:fe80:7/64 .

Como alternativa, você pode executar ipconfig ou ifconfig para ver o status das suas interfaces de rede.

Teste com Teste de Conectividade

O Teste de Conectividade é uma ferramenta de diagnóstico que permite verificar a conectividade entre endpoints na sua rede. Ele analisa sua configuração e, em alguns casos, realiza a verificação em tempo de execução. Agora, ele oferece suporte ao Cloud SQL . Siga estas instruções para executar testes com suas instâncias do Cloud SQL.

Teste sua conexão

Você pode usar o cliente psql para testar sua capacidade de conexão a partir do seu ambiente local. Para obter mais informações, consulte Conectando o cliente psql usando endereços IP e Conectando o cliente psql usando o Proxy de Autenticação do Cloud SQL .

Determine o endereço IP para sua aplicação

Para determinar o endereço IP de um computador que executa seu aplicativo para que você possa autorizar o acesso à sua instância do Cloud SQL a partir desse endereço, use uma das seguintes opções:

  • Se o computador não estiver atrás de um proxy ou firewall, faça login no computador e use o site Qual é meu IP? para determinar seu endereço IP.
  • Se o computador estiver atrás de um proxy ou firewall, faça login no computador e use uma ferramenta ou serviço como whatismyipaddress.com para determinar seu verdadeiro endereço IP.

Abrir portas locais

Para verificar se o seu host está escutando nas portas que você acredita estar, execute o comando ss -tunlp4 . Isso informa quais portas estão abertas e escutando. Por exemplo, se você tiver um banco de dados PostgreSQL em execução, a porta 5432 deverá estar ativa e escutando. Para SSH, você deverá ver a porta 22.

Toda a atividade portuária local

Use o comando netstat para ver toda a atividade da porta local. Por exemplo, netstat -lt mostra todas as portas ativas no momento.

Conecte-se à sua instância do Cloud SQL usando telnet

Para verificar se você consegue se conectar à sua instância do Cloud SQL usando TCP , execute o comando telnet . O Telnet tenta se conectar ao endereço IP e à porta que você forneceu.

Se sua instância do Cloud SQL estiver executando um banco de dados PostgreSQL, por exemplo, você poderá fazer telnet para ela na porta 5432: telnet 35.193.198.159 5432 .

Em caso de sucesso, você verá o seguinte: Tentando 35.193.198.159...

Conectado a 35.193.198.159. .

Em caso de falha, telnet trava até que você force o fechamento da tentativa: Tentando 35.193.198.159...

^C. .

Autenticação do cliente

A autenticação do cliente é controlada por um arquivo de configuração chamado pg_hba.conf (HBA significa autenticação baseada em host).

Certifique-se de que a seção de conexões de replicação do arquivo pg_hba.conf no banco de dados de origem esteja atualizada para aceitar conexões do intervalo de endereços IP da VPC do Cloud SQL.

Registro em nuvem

O Cloud SQL e o Cloud SQL usam o Cloud Logging. Consulte a documentação do Cloud Logging para obter informações completas e revise os exemplos de consultas do Cloud SQL .

Ver registros

Você pode visualizar logs de instâncias do Cloud SQL e outros Google CloudProjetos como Cloud VPN ou instâncias do Compute Engine. Para visualizar os logs das entradas de log da sua instância do Cloud SQL:

Console

  1. No Google Cloud console, acesse a página Cloud Logging .

    Ir para Cloud Logging

  2. Selecione um projeto existente do Cloud SQL na parte superior da página.
  3. No Construtor de Consultas, adicione o seguinte:
    • Recurso: Selecione Banco de Dados Cloud SQL . Na caixa de diálogo, selecione uma instância do Cloud SQL.
    • Nomes de log: role até a seção Cloud SQL e selecione os arquivos de log apropriados para sua instância. Por exemplo:
      • cloudsql.googleapis.com/postgres.log
    • Gravidade: Selecione um nível de log.
    • Intervalo de tempo: selecione uma predefinição ou crie um intervalo personalizado.

gcloud

Use o comando gcloud logging para visualizar entradas de log. No exemplo abaixo, substitua PROJECT_ID . O sinalizador limit é um parâmetro opcional que indica o número máximo de entradas a serem retornadas.

gcloud logging read "projects/PROJECT_ID/logs/cloudsql.googleapis.com/postgres.log" \
--limit=10

Endereços IP privados

Conexões com uma instância do Cloud SQL usando um endereço IP privado são autorizadas automaticamente para intervalos de endereços RFC 1918. Intervalos de endereços não RFC 1918 devem ser configurados no Cloud SQL como redes autorizadas . Você também precisa atualizar o peering de rede com o Cloud SQL para exportar quaisquer rotas não RFC 1918. Por exemplo:

gcloud compute networks peerings update cloudsql-postgres-googleapis-com 
--network=NETWORK
--export-subnet-routes-with-public-ip
--project=PROJECT_ID

Solução de problemas de VPN

Consulte a página de solução de problemas do Cloud VPN .