Debug dei problemi di connessione

Introduzione

In genere, i problemi di connessione rientrano in una delle tre seguenti aree:

  • Connessione: riesci a raggiungere la tua istanza tramite la rete?
  • Autorizzazione in corso: hai l'autorizzazione per connetterti all'istanza?
  • Autenticazione: il database accetta le credenziali del database?

Ognuno di questi può essere ulteriormente suddiviso in percorsi diversi le indagini. La seguente sezione include esempi di domande che puoi porre per restringere ulteriormente il problema:

Elenco di controllo per i problemi di connessione

Messaggi di errore

Per messaggi di errore API specifici, consulta la pagina di riferimento Messaggi di errore.

Risolvere altri problemi di connettività

Per altri problemi, consulta Connettività nella pagina di risoluzione dei problemi.

Problemi di connessione comuni

Verifica che l'applicazione chiuda correttamente le connessioni

Se visualizzi errori contenenti "Aborted connection nnnn to db:", in genere indica che la tua applicazione non interrompe correttamente le connessioni. Anche i problemi di rete possono causare questo errore. L'errore non indica che ci sono problemi con l'istanza Cloud SQL. Ti invitiamo inoltre a eseguire tcpdump per esaminare i pacchetti e individuare l'origine del problema.

Per esempi di best practice per la gestione della connessione, vedi Gestione delle connessioni ai database

Verificare che i certificati non siano scaduti

Se la tua istanza è configurata per utilizzare SSL, vai alla Pagina delle istanze Cloud SQL nella console Google Cloud e apri l'istanza. Apri la relativa pagina Connessioni, seleziona la Sicurezza e assicurati che il certificato del server sia valido. Se è scaduto, devi aggiungere un nuovo certificato e eseguire la rotazione.

Verifica di disporre dell'autorizzazione per la connessione

Se le connessioni non funzionano, verifica di disporre dell'autorizzazione per la connessione:

  • Se hai difficoltà a connetterti utilizzando un indirizzo IP, ad esempio, ti connetti dal tuo ambiente on-premise con il client psql, assicurati che l'indirizzo IP da cui ti connetti sia autorizzato a connettersi all'istanza Cloud SQL.

    Le connessioni a un'istanza Cloud SQL che utilizzano un indirizzo IP privato con l'autorizzazione automatica per RFC 1918 di indirizzi IP esterni. In questo modo, tutti i client privati possono accedere al database senza passare per il proxy di autenticazione Cloud SQL. Gli intervalli di indirizzi non RFC 1918 devono essere configurati come reti autorizzate.

    Cloud SQL non apprende le route di subnet non RFC 1918 dal VPC per impostazione predefinita. Devi aggiornare il peering di rete a Cloud SQL per esportare route non RFC 1918. Ad esempio:

    gcloud compute networks peerings update cloudsql-postgres-googleapis-com \
    --network=NETWORK \
    --export-subnet-routes-with-public-ip \
    --project=PROJECT_ID
  • Ecco il tuo indirizzo IP attuale.

  • Prova la gcloud sql connect per connetterti all'istanza. Questo comando autorizza il tuo indirizzo IP per breve tempo. Puoi eseguire questo comando in un ambiente con gcloud CLI e il client psql installati. Puoi anche eseguire questo comando in Cloud Shell, che è disponibile nella console Google Cloud e ha Google Cloud CLI e il client psql preinstallati. Cloud Shell fornisce un'istanza Compute Engine che puoi utilizzare per connetterti a Cloud SQL.
  • Consenti temporaneamente a tutti gli indirizzi IP di connettersi a un'istanza autorizzando 0.0.0.0/0.

Verifica la modalità di connessione

Se viene visualizzato un messaggio di errore simile al seguente:

FATAL: database `user` does not exist.

Il comando gcloud sql connect --user funziona solo con l'impostazione predefinita utente (postgres). La soluzione alternativa è connettersi utilizzando l'utente predefinito, quindi usare il comando psql "\c" per riconnetterti come utente diverso.

Determina la modalità di avvio delle connessioni

Puoi vedere le informazioni sulle tue connessioni attuali connettendoti al tuo ed eseguendo questo comando:

SELECT * from pg_stat_activity ;

Le connessioni che mostrano un indirizzo IP, ad esempio 1.2.3.4, si connettono tramite IP. Le connessioni con cloudsqlproxy~1.2.3.4 utilizzano il proxy di autenticazione Cloud SQL oppure ha avuto origine da App Engine. Le connessioni da localhost potrebbero essere utilizzata da alcuni processi interni di Cloud SQL.

Limiti di connessione

Non sono previsti limiti QPS per le istanze Cloud SQL. Tuttavia, c'è connessione, e limiti specifici di App Engine. Consulta la sezione Quote e limiti.

Le connessioni al database consumano risorse sul server e durante la connessione un'applicazione. Usa sempre buone pratiche di gestione della connessione per ridurre al minimo l'impronta della tua applicazione e riduci la probabilità di superare Limiti di connessione di Cloud SQL. Per saperne di più, consulta Gestire le connessioni al database.

Mostra connessioni e thread

Per visualizzare i processi in esecuzione nel database, utilizza la tabella pg_stat_activity:

select * from pg_stat_activity;

Timeout connessioni (da Compute Engine)

Connessioni con il timeout di un'istanza Compute Engine dopo 10 minuti di di inattività, che può incidere sulle connessioni inutilizzate di lunga durata tra i tuoi dall'istanza Compute Engine e dall'istanza Cloud SQL. Per maggiori informazioni per informazioni, consulta Networking e firewall nella documentazione di Compute Engine.

Per mantenere attive le connessioni inutilizzate di lunga durata, puoi impostare il keepalive TCP. I seguenti comandi impostano il valore del keepalive TCP su un minuto e rendono permanente la configurazione dopo i riavvii dell'istanza.

Visualizza il valore tcp_keepalive_time attuale.

cat /proc/sys/net/ipv4/tcp_keepalive_time

Imposta tcp_keepalive_time su 60 secondi e rendilo permanente dopo i riavvii.

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

Applica la modifica.

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

Visualizza il valore tcp_keepalive_time per verificare che la modifica sia stata applicata.

cat /proc/sys/net/ipv4/tcp_keepalive_time

Strumenti per il debug della connettività

tcpdump

tcpdump è uno strumento per acquisire i pacchetti. Ti consigliamo vivamente di eseguire tcpdump per acquisire e ispezionare i pacchetti tra l'host e le istanze Cloud SQL durante il debug dei problemi di connettività.

Individuare l'indirizzo IP locale

Se non conosci l'indirizzo locale del tuo host, esegui il comando ip -br address show. Su Linux vengono mostrati l'interfaccia di rete, lo stato dell'interfaccia, l'IP locale e gli indirizzi MAC. Ad esempio: eth0 UP 10.128.0.7/32 fe80::4001:aff:fe80:7/64.

In alternativa, puoi eseguire ipconfig o ifconfig per visualizzare lo stato delle interfacce di rete.

Esegui test con Connectivity Tests

Test di connettività è uno strumento di diagnostica che consente di verificare la connettività tra gli endpoint della rete. Analizza la configurazione e, in alcuni casi, esegue la verifica del tempo di esecuzione. Ora supporta Cloud SQL. Segui queste istruzioni per eseguire test con le tue istanze Cloud SQL.

Esegui il test della connessione

Puoi usare il client psql per testare la tua capacità di connessione dal tuo ambiente locale. Per ulteriori informazioni, consulta Connessione del client psql tramite indirizzi IP e Connessione del client psql tramite il proxy di autenticazione Cloud SQL.

Determina l'indirizzo IP della tua applicazione

Per determinare l'indirizzo IP di un computer su cui è in esecuzione la tua applicazione in modo da poter autorizzare l'accesso all'istanza Cloud SQL da quell'indirizzo, utilizza una delle seguenti opzioni:

  • Se il computer non è protetto da un proxy o un firewall, accedi al computer e utilizza la pagina Qual è il mio indirizzo IP? per determinare il relativo indirizzo IP.
  • Se il computer è protetto da un proxy o da un firewall, accedi al computer e usare uno strumento o un servizio come whatismyipaddress.com per determinarne il vero indirizzo IP.

Apri porte locali

Per verificare che l'host ascolti sulle porte che ritieni, esegui il comando ss -tunlp4. In questo modo puoi sapere quali porte sono aperte e in ascolto. Ad esempio, se hai un database PostgreSQL in esecuzione, la porta 5432 dovrebbe essere e ascoltare. Per SSH, dovresti vedere la porta 22.

Tutte le attività relative alle porte locali

Usa il comando netstat per vedere tutte le attività delle porte locali. Per Ad esempio, netstat -lt mostra tutte le porte attualmente attive.

Connettiti all'istanza Cloud SQL utilizzando telnet

Per verificare la possibilità di connetterti all'istanza Cloud SQL utilizzando TCP, esegui il comando telnet. Telnet tenta di connettersi all'indirizzo IP e alla porta che specifichi.

Ad esempio, se la tua istanza Cloud SQL esegue un database PostgreSQL, dovresti essere in grado di connetterti tramite telnet alla porta 5432: telnet 35.193.198.159 5432.

In caso di esito positivo, viene visualizzato quanto segue:

Trying 35.193.198.159...

Connected to 35.193.198.159. .

In caso di errore, telnet si blocca finché non forza la chiusura del tentativo:

Trying 35.193.198.159...

^C. .

Autenticazione client

L'autenticazione client è controllata da un file di configurazione denominatopg_hba.conf (HBA sta per autenticazione basata sull'host).

Assicurati che la sezione delle connessioni di replica di pg_hba.conf sul database di origine viene aggiornato in modo da accettare connessioni dal Intervallo di indirizzi IP del VPC Cloud SQL.

Cloud Logging

Cloud SQL e Cloud SQL utilizzano Cloud Logging. Consulta la documentazione di Cloud Logging per informazioni complete e le query di esempio di Cloud SQL.

Visualizza i log

Puoi visualizzare i log per le istanze Cloud SQL e altri servizi Google Cloud a progetti come le istanze Cloud VPN o Compute Engine. Per visualizzare i log per le voci dei log delle tue istanze Cloud SQL:

Console

  1. Nella console Google Cloud, vai alla pagina Cloud Logging.

    Vai a Cloud Logging

  2. Seleziona un progetto Cloud SQL esistente nella parte superiore della pagina.
  3. In Query Builder, aggiungi quanto segue:
    • Risorsa: seleziona Database Cloud SQL. Nella finestra di dialogo, seleziona un di Cloud SQL.
    • Nomi dei log: scorri fino alla sezione Cloud SQL e seleziona i file di log appropriati per la tua istanza. Ad esempio:
      • cloudsql.googleapis.com/postgres.log
    • Gravità: seleziona un livello di log.
    • Intervallo di tempo: seleziona un'opzione preimpostata o crea un intervallo personalizzato.

gcloud

Utilizza il comando gcloud logging per visualizzare le voci di log. Nell'esempio riportato di seguito, sostituisci PROJECT_ID. Il flag limit è un parametro facoltativo che indica il numero massimo di voci da restituire.

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

Indirizzi IP privati

Le connessioni a un'istanza Cloud SQL che utilizzano un indirizzo IP privato con l'autorizzazione automatica per RFC 1918 di indirizzi IP esterni. Devi configurare gli intervalli di indirizzi non RFC 1918 in Cloud SQL come autorizzato reti. Devi inoltre aggiornare il peering di rete a Cloud SQL Esportare tutte le route non RFC 1918. Ad esempio:

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

Risoluzione dei problemi relativi alla VPN

Consulta la pagina Risoluzione dei problemi di Cloud VPN.