Mysql
 sql >> Database >  >> RDS >> Mysql

impossibile connettersi all'istanza RDS AWS VPC (mysql o postgres)

Ulteriori informazioni per le persone che potrebbero riscontrare problemi simili nel tentativo di connettersi a RDS o RedShift:

1) Controlla i gruppi di sicurezza

Verifica che il gruppo di sicurezza per l'istanza RDS consenta l'accesso dal gruppo di sicurezza a cui appartiene il server di origine (o il suo IP aggiunto direttamente se esterno ad AWS). Il gruppo di sicurezza che dovresti esaminare è quello specificato negli attributi dell'istanza RDS dall'interfaccia utente della console RDS (denominato "gruppo di sicurezza").

NOTA :i gruppi di sicurezza del database potrebbero essere diversi dai gruppi di sicurezza di AWS EC2. Se la tua istanza RDS è in EC2 classica/pubblica, dovresti controllare nella sezione "Gruppo di sicurezza del database" dell'interfaccia utente di RDS. Per gli utenti VPC, il gruppo di sicurezza sarà un normale gruppo di sicurezza VPC (il nome sg-xxx sarà elencato negli attributi dell'istanza RDS).

2) Conferma che il DNS non è un problema.

Amazon utilizza il DNS diviso, quindi una ricerca DNS esterna ad AWS restituirà l'IP pubblico mentre una ricerca interna ad AWS restituirà un IP privato. Se sospetti che si tratti di un problema DNS, hai confermato che IP diversi vengono restituiti da diverse zone di disponibilità? Se diverse AZ ottengono IP diversi, dovrai contattare il supporto AWS.

3) Conferma la connettività di rete stabilendo una connessione socket.

Strumenti come tracepath e traceroute probabilmente non saranno di aiuto poiché RDS attualmente elimina il traffico ICMP.

Testare la connettività della porta provando a stabilire una connessione socket all'istanza RDS sulla porta 3306 (mysql o 5432 per postgres). Inizia trovando l'IP dell'istanza RDS e utilizzando telnet o nc (assicurati di utilizzare l'IP interno/privato se ti connetti da AWS):

telnet x.x.x.x 3306
nc -vz x.x.x.x 3306

a) Se il tentativo di connessione non riesce e fallisce immediatamente, è probabile che la porta sia bloccata o che l'host remoto non stia eseguendo un servizio su quella porta. potrebbe essere necessario coinvolgere il supporto AWS per risolvere ulteriormente i problemi. Se ti connetti dall'esterno di AWS, prova a connetterti prima da un'altra istanza all'interno di AWS (poiché il tuo firewall potrebbe bloccare tali connessioni).

b) Se la connessione non riesce e si verifica un timeout, è probabile che i pacchetti vengano eliminati/ignorati da un firewall o che i pacchetti vengano restituiti su un percorso di rete diverso. Puoi confermarlo eseguendo netstat -an | grep SYN (da una sessione ssh diversa in attesa del timeout del comando telnet/nc).

Le connessioni nello stato SYN indicano che hai inviato una richiesta di connessione, ma non hai ricevuto nulla in cambio (SYN_ACK o rifiuto/blocco). Di solito questo significa che un firewall o un gruppo di sicurezza sta ignorando o eliminando i pacchetti.

Può anche essere un problema con il routing NAT o più percorsi da più interfacce. Assicurati di non utilizzare iptables o un gateway NAT tra il tuo host e l'istanza RDS. Se ti trovi in ​​un VPC, assicurati anche di consentire il traffico in uscita/in uscita dall'host di origine.

c) Se il test della connessione socket ha avuto esito positivo, ma non riesci a connetterti con un client mysql (CLI, workbench, app, ecc.), dai un'occhiata all'output di netstat per vedere in quale stato si trova la connessione (sostituisci x.x.x.x con il indirizzo IP effettivo dell'istanza RDS):

netstat -an | grep x.x.x.x

Se stavi ottenendo una connessione stabilita quando usi telnet o NC, ma vedi lo stato "SYN" quando usi un client mysql, potresti riscontrare un problema MTU.

RDS, nel momento in cui viene scritto, potrebbe non supportare i pacchetti ICMP utilizzati per PMTUD (https:/ /en.wikipedia.org/wiki/Path_MTU_Discovery#Problems_with_PMTUD ). Questo può essere un problema se stai tentando di accedere a RDS o RedShift che si trova in un VPC da un'istanza ec2 classica tramite ClassicLink. Prova ad abbassare l'MTU con quanto segue, quindi prova di nuovo:

sudo ip link show
# take note of the current MTU (likely 1500 or 9001)
sudo ip link set dev eth0 mtu 1400

Se l'MTU inferiore ha funzionato, assicurati di contattare l'assistenza clienti AWS per ricevere assistenza e menzionare che stai riscontrando un problema MTU durante il tentativo di connessione all'istanza RDS. Ciò può accadere se i pacchetti TCP vengono racchiusi con l'incapsulamento per il tunneling, risultando in un MTU utilizzabile inferiore per i dati del pacchetto/il carico utile. L'abbassamento dell'MTU sul server di origine consente ai pacchetti incapsulati di rientrare ancora nel limite MTU durante il passaggio attraverso il gateway di tunneling.

Se non ha funzionato, reimposta la tua MTU sui valori predefiniti e rivolgiti al supporto AWS per un'ulteriore risoluzione dei problemi.