Debug dei problemi di connessione

Mantieni tutto organizzato con le raccolte Salva e classifica i contenuti in base alle tue preferenze.

Introduzione

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

  • Connessione: riesci a raggiungere l'istanza sulla rete?
  • Autorizzazione - Hai l'autorizzazione per connetterti all'istanza?
  • Autenticazione in corso: il database accetta le credenziali del database?

Ognuna di queste opzioni può essere ulteriormente suddivisa in diversi percorsi per le indagini. La seguente sezione contiene alcuni esempi di domande che puoi porti per contribuire a circoscrivere ulteriormente il problema:

Elenco di controllo per i problemi di connessione

Messaggi di errore

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

Risolvere altri problemi di connettività

Per altri problemi, visita la sezione relativa alla connettività nella pagina di risoluzione dei problemi.

Problemi comuni di connessione

Verifica che la tua applicazione chiuda correttamente le connessioni

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

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

Verifica che i certificati non siano scaduti

Se l'istanza è configurata per utilizzare SSL, vai alla pagina Istanze Cloud SQL nella console Google Cloud e apri l'istanza. Apri la pagina Connessioni e seleziona la scheda Sicurezza, quindi assicurati che il certificato del tuo server sia valido. Se è scaduto, devi aggiungere un nuovo certificato e ruotarlo.

Verifica di avere l'autorizzazione a eseguire la connessione

Se le connessioni non riescono, verifica di avere l'autorizzazione a connettersi:

  • Se hai problemi di connessione utilizzando un indirizzo IP, ad esempio se esegui la connessione dall'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 vengono automaticamente autorizzate per gli intervalli di indirizzi RFC 1918. In questo modo, tutti i client privati possono accedere al database senza dover passare attraverso il proxy di autenticazione Cloud SQL. Gli intervalli di indirizzi non conformi alla RFC 1918 devono essere configurati come reti autorizzate.

    Cloud SQL non apprende le route di subnet non RFC 1918 dal tuo VPC per impostazione predefinita. Devi aggiornare il peering di rete in Cloud SQL per esportare eventuali 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 corrente.

  • Prova il comando gcloud sql connect per connetterti all'istanza. Questo comando autorizza il tuo indirizzo IP per un breve periodo di tempo. Puoi eseguire questo comando in un ambiente in cui sono installati gcloud e un client psql. Puoi eseguire questo comando anche in Cloud Shell, disponibile in Google Cloud Console, sul quale è preinstallato gcloud e il client psql. Cloud Shell fornisce un'istanza di 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 a:

FATAL: database `user` does not exist.

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

Determinare l'avvio delle connessioni

Per visualizzare le informazioni sulle tue connessioni attuali, connettiti al tuo database ed esegui 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 a cloudsqlproxy~1.2.3.4 utilizzano il proxy di autenticazione Cloud SQL oppure provengono da App Engine. Le connessioni da localhost potrebbero essere utilizzate da alcuni processi interni di Cloud SQL.

Limiti di connessione

Non sono previsti limiti QPS per istanze Cloud SQL. Tuttavia, sono previsti limiti specifici per connessione, dimensioni e App Engine. Vedi Quote e limiti.

Le connessioni di database consumano risorse sul server e sull'applicazione di connessione. Utilizza sempre buone pratiche di gestione delle connessioni per ridurre al minimo l'impatto della tua applicazione e ridurre la probabilità di superare i limiti di connessione di Cloud SQL. Per ulteriori informazioni, consulta Gestione delle connessioni ai 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 un timeout dell'istanza Compute Engine dopo 10 minuti di inattività. Questo può influire sulle connessioni inutilizzate a lunga durata tra l'istanza di Compute Engine e l'istanza di Cloud SQL. Per ulteriori informazioni, consulta la sezione Networking e firewall nella documentazione di Compute Engine.

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

Visualizza il valore corrente tcp_keepalive_time.

cat /proc/sys/net/ipv4/tcp_keepalive_time

Imposta tcp_keepalive_time su 60 secondi e rendilo permanente tra 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 eseguire il debug della connettività

tcpdump

tcpdump è uno strumento per acquisire pacchetti. Ti consigliamo di eseguire tcpdump per acquisire e ispezionare i pacchetti tra l'host e le istanze Cloud SQL quando esegui 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 tue interfacce di rete.

Test con test di connettività

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

Esegui il test della connessione

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

Determina l'indirizzo IP della tua applicazione

Per determinare l'indirizzo IP di un computer che esegue la tua applicazione in modo da poter autorizzare l'accesso alla tua istanza Cloud SQL da quell'indirizzo, utilizza una delle seguenti opzioni:

  • Se il computer non è protetto da un proxy o da un firewall, accedi al computer e utilizza Qual è il mio IP? per determinare il suo indirizzo IP.
  • Se il computer si trova dietro un proxy o un firewall, accedi al computer e utilizza uno strumento o un servizio come whatismyipaddress.com per determinare il suo vero indirizzo IP.

Aprire le porte locali

Per verificare che l'host sia in ascolto sulle porte che ritieni siano presenti, esegui il comando ss -tunlp4. Questo indica quali porte sono aperte e sono in ascolto. Ad esempio, se è in esecuzione un database PostgreSQL, la porta 5432 deve essere in esecuzione e in ascolto. Per SSH, dovresti vedere la porta 22.

Tutte le attività di trasferimento locale

Usa il comando netstat per vedere tutte le attività nella porta locale. Ad esempio, netstat -lt mostra tutte le porte attualmente attive.

Connettiti all'istanza Cloud SQL utilizzando Telnet

Per verificare di poterti connettere all'istanza Cloud SQL utilizzando TCP, esegui il comando telnet. Telnet tenta di connettersi all'indirizzo IP e alla porta che gli hai fornito.

Se l'istanza Cloud SQL esegue un database PostgreSQL, ad esempio, dovresti essere in grado di eseguirlo su questa porta sulla porta 5432: telnet 35.193.198.159 5432.

Se l'operazione va a buon fine, vedrai 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, denominato pg_hba.conf (HBA sta per autenticazione basata su host).

Assicurati che la sezione delle connessioni di replica del file pg_hba.conf nel database di origine sia aggiornata per accettare le connessioni dall'intervallo di indirizzi IP di Cloud SQL VPC.

Cloud Logging

Cloud SQL e Cloud SQL utilizzano Cloud Logging. Per informazioni complete, consulta la documentazione di Cloud Logging e le query di esempio Cloud SQL.

Visualizza i log

Puoi visualizzare i log per le istanze Cloud SQL e altri progetti Google Cloud come le istanze Cloud VPN o Compute Engine. Per visualizzare i log per le voci di log dell'istanza Cloud SQL:

Console

  1. In Google Cloud Console, vai alla pagina Cloud Logging.

    Vai a Cloud Logging

  2. Seleziona un progetto Cloud SQL esistente nella parte superiore della pagina.
  3. Nel generatore di query, aggiungi quanto segue:
    • Risorsa: Database Cloud SQL. Nella finestra di dialogo, seleziona un'istanza Cloud SQL.
    • Nomi dei log: scorri fino alla sezione Cloud SQL e seleziona i file di log appropriati per l'istanza. Ad esempio:
      • cloudsql.googleapis.com/postgres.log
    • Gravità: seleziona un livello di log.
    • Intervallo di tempo: seleziona un intervallo predefinito 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 vengono automaticamente autorizzate per gli intervalli di indirizzi RFC 1918. Gli intervalli di indirizzi non conformi alla RFC 1918 devono essere configurati in Cloud SQL come reti autorizzate. Devi inoltre aggiornare il peering di rete in Cloud SQL per esportare eventuali 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.