Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

incapaz de se conectar à instância do AWS VPC RDS (mysql ou postgres)


Informações adicionais para pessoas que podem ter problemas semelhantes ao tentar se conectar ao RDS ou RedShift:

1) Verifique os grupos de segurança

Verifique se o grupo de segurança da instância do RDS permite acesso do grupo de segurança ao qual seu servidor de origem pertence (ou seu IP adicionado diretamente se for externo à AWS). O grupo de segurança que você deve observar é aquele especificado nos atributos de instância do RDS da interface do usuário do console do RDS (chamado "grupo de segurança").

OBSERVAÇÃO :os grupos de segurança do banco de dados podem ser diferentes dos grupos de segurança do AWS EC2. Se sua instância do RDS estiver no EC2 clássico/público, verifique a seção "grupo de segurança do banco de dados" da interface do usuário do RDS. Para usuários de VPC, o security group será um security group de VPC normal (o nome sg-xxx será listado nos atributos da instância do RDS).

2) Confirme se o DNS não é um problema.

A Amazon usa DNS dividido, portanto, uma pesquisa de DNS externa à AWS retornará o IP público, enquanto uma pesquisa interna à AWS retornará um IP privado. Se você suspeitar que é um problema de DNS, você confirmou que IPs diferentes são retornados de zonas de disponibilidade diferentes? Se AZs diferentes obtiverem IPs diferentes, você precisará entrar em contato com o suporte da AWS.

3) Confirme a conectividade de rede estabelecendo uma conexão de soquete.

Ferramentas como tracepath e traceroute provavelmente não ajudarão, pois o RDS atualmente descarta o tráfego ICMP.

Teste a conectividade da porta tentando estabelecer uma conexão de soquete com a instância do RDS na porta 3306 (mysql ou 5432 para postgres). Comece encontrando o IP da instância do RDS e usando telnet ou nc (certifique-se de usar o IP interno/privado se estiver conectando de dentro da AWS):
telnet x.x.x.x 3306
nc -vz x.x.x.x 3306

a) Se sua tentativa de conexão não for bem-sucedida e falhar imediatamente, a porta provavelmente está bloqueada ou o host remoto não está executando um serviço nessa porta. pode ser necessário entrar em contato com o suporte da AWS para solucionar ainda mais os problemas. Se estiver se conectando de fora da AWS, tente se conectar primeiro de outra instância dentro da AWS (pois seu firewall pode estar bloqueando essas conexões).

b) Se sua conexão não for bem-sucedida e você obtiver um tempo limite, os pacotes provavelmente estão sendo descartados/ignorados por um firewall ou os pacotes estão retornando em um caminho de rede diferente. Você pode confirmar isso executando netstat -an | grep SYN (de uma sessão ssh diferente enquanto aguarda o tempo limite do comando telnet/nc).

Conexões no estado SYN significam que você enviou uma solicitação de conexão, mas não recebeu nada de volta (SYN_ACK ou rejeitar/bloquear). Normalmente, isso significa que um firewall ou grupo de segurança está ignorando ou descartando pacotes.

Também pode ser um problema com o roteamento NAT ou vários caminhos de várias interfaces. Verifique se você não está usando iptables ou um gateway NAT entre seu host e a instância RDS. Se você estiver em uma VPC, certifique-se também de permitir o tráfego de saída/saída do host de origem.

c) Se seu teste de conexão de soquete foi bem-sucedido, mas você não pode se conectar com um cliente mysql (CLI, workbench, app, etc.), dê uma olhada na saída de netstat para ver em que estado a conexão está (substitua x.x.x.x pelo endereço IP real da instância do RDS):

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

Se você estava obtendo uma conexão estabelecida ao usar telnet ou NC, mas vê o estado 'SYN' ao usar um cliente mysql, pode estar enfrentando um problema de MTU.

O RDS, no momento em que foi escrito, pode não suportar pacotes ICMP usados ​​para PMTUD (https:/ /en.wikipedia.org/wiki/Path_MTU_Discovery#Problems_with_PMTUD ). Isso pode ser um problema se você estiver tentando acessar o RDS ou RedShift que está em uma VPC de uma instância clássica do ec2 por meio do ClassicLink. Tente diminuir o MTU com o seguinte e, em seguida, teste novamente:
sudo ip link show
# take note of the current MTU (likely 1500 or 9001)
sudo ip link set dev eth0 mtu 1400

Se a MTU inferior funcionou, certifique-se de entrar em contato com o suporte ao cliente da AWS para obter ajuda e mencionar que você está vendo um problema de MTU ao tentar se conectar à sua instância do RDS. Isso pode acontecer se os pacotes TCP forem empacotados com encapsulamento para encapsulamento, resultando em um MTU utilizável mais baixo para dados de pacote/carga útil. A redução da MTU no servidor de origem permite que os pacotes encapsulados ainda se ajustem ao limite de MTU ao passar pelo gateway de encapsulamento.

Se não funcionou, defina sua MTU de volta ao padrão e acione o suporte da AWS para solução de problemas adicionais.