Este tópico descreve como resolver problemas de conexão com uma instância ApsaraDB RDS for MySQL.
Durante a criação e depuração de cargas de trabalho, podem ocorrer falhas de conexão com uma instância ApsaraDB RDS for MySQL. As causas comuns incluem tipos de rede incompatíveis e configurações incorretas na lista de permissões de endereços IP. Este tópico aborda essas causas e suas respectivas soluções.
Tipos de rede incompatíveis
-
A instância ECS está em uma VPC e a instância ApsaraDB RDS for MySQL está na rede clássica
-
Solução 1 (Recomendada): Altere o tipo de rede da instância ApsaraDB RDS for MySQL de rede clássica para VPC. Para mais informações, consulte Alterar o tipo de rede de uma instância ApsaraDB RDS.
NotaApós a alteração, ambas as instâncias devem estar na mesma VPC para se comunicarem pela rede interna.
Solução 2: Adquira uma nova instância ECS na rede clássica. Não é possível migrar instâncias ECS de uma VPC para a rede clássica. Recomendamos o uso de VPC, pois oferece maior segurança que a rede clássica.
Solução 3: Conecte-se à instância RDS a partir da instância ECS usando seu endpoint público. Esse método apresenta baixo desempenho, segurança e estabilidade reduzidos.
-
-
A instância ECS está na rede clássica e a instância ApsaraDB RDS for MySQL está em uma VPC
-
Solução 1 (Recomendada): Migre a instância ECS da rede clássica para uma VPC.
NotaApós a migração, ambas as instâncias devem estar na mesma VPC para se comunicarem pela rede interna.
Solução 2: Altere o tipo de rede da instância RDS de VPC para rede clássica. Recomendamos o uso de VPC, pois oferece maior segurança que a rede clássica.
Solução 3: Utilize o ClassicLink para conectar a instância ECS na rede clássica aos recursos da VPC por meio de uma rede interna.
Solução 4: Conecte-se à instância RDS a partir da instância ECS usando seu endpoint público. Esse método apresenta baixo desempenho, segurança e estabilidade reduzidos.
-
VPCs diferentes
As VPCs são ambientes de rede logicamente isolados no Alibaba Cloud. Para comunicação via rede interna, suas instâncias ECS e ApsaraDB RDS for MySQL devem estar na mesma VPC.
-
Solução 1 (Recomendada): Mova as instâncias RDS e ECS para a mesma VPC.
Para isso, altere a VPC da instância RDS ou altere a VPC da instância ECS.
Solução 2: Estabeleça uma conexão entre as duas VPCs usando a Cloud Enterprise Network (CEN).
Solução 3: Conecte-se pela internet. Esse método apresenta baixo desempenho, segurança e estabilidade reduzidos.
Regiões diferentes
Conexão pública: Use o endpoint público da instância RDS para se conectar entre regiões ou contas pela internet. Não há cobrança pelo tráfego de entrada e saída da internet da instância RDS.
-
Conexão privada: Por padrão, se uma instância ECS e uma instância RDS estiverem em regiões diferentes ou pertencerem a contas diferentes, elas não poderão se conectar via rede interna porque suas VPCs estão isoladas. No entanto, é possível usar uma conexão de peering de VPC ou a Cloud Enterprise Network (CEN) para conectar as duas VPCs, permitindo que a instância ECS acesse a instância RDS entre regiões ou contas.
Conexão de peering de VPC: Este recurso suporta conexões de VPC entre regiões e entre contas. É econômico, mas relativamente complexo de configurar, sendo adequado para cenários simples com poucas VPCs.
Cloud Enterprise Network (CEN): Este produto suporta conexões de VPC entre regiões e entre contas. É fácil de configurar, porém mais caro, sendo indicado para cenários complexos com múltiplas VPCs.
Configurações incorretas na lista de permissões de endereços IP
A lista de permissões de endereços IP padrão contém apenas o endereço 127.0.0.1. Esse endereço impede que qualquer dispositivo acesse a instância RDS. Adicione o endereço IP do cliente à lista de permissões. Para mais informações, consulte Configurar uma lista de permissões de endereços IP para uma instância ApsaraDB RDS for MySQL.
-
A lista de permissões está definida como 0.0.0.0. O formato correto é 0.0.0.0/0.
ImportanteO endereço IP 0.0.0.0/0 permite acesso de qualquer dispositivo. Use essa configuração com cautela.
-
Se você ativou o modo de lista de permissões aprimorado, verifique os seguintes itens:
Ao utilizar o endpoint interno de uma instância em uma VPC, certifique-se de que o endereço IP privado da instância ECS foi adicionado ao grupo de lista de permissões da VPC.
Ao utilizar o endpoint interno de uma instância na rede clássica, certifique-se de que o endereço IP privado da instância ECS foi adicionado ao grupo de lista de permissões da rede clássica.
Ao conectar-se pela internet, certifique-se de que o endereço IP público do seu dispositivo foi adicionado ao grupo de lista de permissões da rede clássica. O grupo de lista de permissões da VPC não se aplica a conexões públicas.
-
O endereço IP público adicionado à lista de permissões pode não ser o endereço IP de saída real do seu dispositivo. Isso pode ocorrer pelos seguintes motivos:
O endereço IP público é dinâmico e pode mudar.
A ferramenta ou site usado para consultar o endereço IP público retornou um resultado impreciso.
Para soluções, consulte os seguintes tópicos:
Falha ou erro na resolução de nome de domínio
Uma falha no servidor DNS ou uma alteração na configuração da placa de interface de rede (NIC) pode causar falha na resolução de nomes de domínio ou retornar um endereço IP incorreto. Use os comandos ping e telnet para testar a conectividade com sua instância RDS.
ping <domain_name>
telnet <domain_name> <port_number>
Exemplos
# Example of a successful ping
[root@xxx ~]# ping rm-xxx.mysql.rds.aliyuncs.com
PING rm-xxx.mysql.rds.aliyuncs.com (192.168.0.176) 56(84) bytes of data.
64 bytes from 192.168.0.176 (192.168.0.176): icmp_seq=1 ttl=64 time=0.151 ms
64 bytes from 192.168.0.176 (192.168.0.176): icmp_seq=2 ttl=64 time=0.141 ms
64 bytes from 192.168.0.176 (192.168.0.176): icmp_seq=3 ttl=64 time=0.107 ms
64 bytes from 192.168.0.176 (192.168.0.176): icmp_seq=4 ttl=64 time=0.108 ms
# Example of a failed ping
[root@izbpxxx ~]# ping rm-bp1xxx.mysql.rds.aliyuncs.com
ping: rm-bp1xxx.mysql.rds.aliyuncs.com: Name or service not known
[root@izbpxxx ~]#
# Example of a successful telnet connection
[root@xxx ~]# telnet rm-xxx.mysql.rds.aliyuncs.com 3306
Trying 192.168.0.176...
Connected to rm-xxx.mysql.rds.aliyuncs.com.
Escape character is '^]'.
N
5.6.16-logtEkkVNd-0!)\}\4/,/GXfu<mysql_native_password
# Example of a failed telnet connection (domain name resolution failure)
[root@izbpxxx ~]# telnet rm-bp1xxx.mysql.rds.aliyuncs.com 3306
telnet: rm-bp1xxx.mysql.rds.aliyuncs.com: Name or service not known
rm-bp1xxx.mysql.rds.aliyuncs.com: Host name lookup failure
[root@izbpxxx ~]#
Se o teste falhar, modifique o arquivo de configuração da NIC para resolver o problema:
-
Modifique o arquivo de configuração da NIC.
vi /etc/sysconfig/network-scripts/<nic_configuration_file_name>NotaO <nic_configuration_file_name> corresponde à NIC usada pelo servidor ECS. Execute o comando
ifconfigpara visualizar o sufixo do nome do arquivo. O padrão é ifcfg-eth0. -
Adicione as seguintes linhas ao final do arquivo:
DNS1=100.100.XX.XX DNS2=100.100.XX.XXNotaSe DNS1 e DNS2 já estiverem configurados, atualize seus endereços IP conforme mostrado acima.
DEVICE=eth0 BOOTPROTO=dhcp ONBOOT=yes DNS1=100.100.2.136 DNS2=100.100.2.138 -
Execute o seguinte comando para reiniciar o serviço de rede:
sudo systemctl restart network -
Execute o seguinte comando para verificar se a modificação foi bem-sucedida:
cat /etc/resolv.conf[root@xxx ~]# cat /etc/resolv.conf options timeout:2 attempts:3 rotate single-request-reopen : generated_by /usr/sbin/dhclient-script nameserver 100.100.2.136 nameserver 100.100.2.138 [root@xxx ~]#
Testar conectividade da porta
Se a resolução de nome de domínio estiver funcionando corretamente, use o comando telnet para testar a conectividade da porta com a instância RDS.
telnet <RDS_endpoint> <port_number>
Por exemplo, teste a porta padrão 3306 de uma instância ApsaraDB RDS for MySQL:
telnet rm-xxxx.mysql.rds.aliyuncs.com 3306
Uma saída contendo
Connected toeEscape character isindica que a porta está acessível na camada de rede.-
Um erro
Connection timed outindica que a rede está inacessível ou bloqueada por um firewall. Verifique as seguintes configurações:Verifique se a lista de permissões de IP do RDS inclui o endereço IP do cliente.
Verifique se as regras do grupo de segurança permitem tráfego na porta correspondente.
Verifique se o cliente e a instância RDS estão na mesma VPC. Um endpoint interno só é acessível dentro de sua própria VPC.
Um erro
Connection refusedindica que a porta não está sendo monitorada. Verifique o status de execução e a configuração da porta da instância RDS.
Se os comandos ping e telnet forem executados com êxito, mas sua aplicação ainda relatar tempo limite de conexão, o problema estará na camada de aplicação, não na camada de rede. Use o tcpdump para capturar pacotes e analisar o handshake triplo TCP e o handshake quádruplo para identificar a causa raiz do tempo limite.
tcpdump -i eth0 host <RDS_endpoint> -w rds_capture.pcap
Analise o arquivo de captura de pacotes: a ausência de resposta a um pacote SYN indica que a rede está inacessível ou bloqueada. A falta de troca de dados após um handshake triplo bem-sucedido indica uma anomalia no nível da aplicação.
Instância travada no estado Creating Network Connection****
No console, acesse a página Tasks. Localize a tarefa e clique em Retry ou Modify switching time. Para mais informações, consulte Usar o Task Center.
Tempo limite de leitura por falta de resposta ao pacote FIN
Ao conectar-se a uma instância ApsaraDB RDS for MySQL através de uma rede intermediária, como VPN ou linha dedicada, a conexão pode funcionar inicialmente e depois atingir o tempo limite. Isso pode acontecer se o servidor falhar em responder após o cliente enviar um pacote FIN.
Siga estas etapas para solucionar o problema:
No console do ApsaraDB RDS, acesse a página de detalhes da instância. No painel de navegação à esquerda, clique em Parameters e verifique os valores dos parâmetros
wait_timeouteinteractive_timeout. No ApsaraDB RDS for MySQL, o valor padrão dewait_timeouté 86.400 segundos. Se esse parâmetro estiver definido com um valor baixo, o servidor fechará conexões ociosas prematuramente.Verifique se há perda de pacotes ou alta latência no link de rede intermediário, como a VPN ou linha dedicada. Use o comando
telnet <RDS_endpoint> <port_number>para testar a conectividade da porta com a instância RDS e confirmar a acessibilidade na camada de rede.Use
tcpdumpou Wireshark para capturar pacotes simultaneamente no cliente e no servidor. Analise a sequência de pacotes TCP FIN/RST para determinar se a desconexão ocorre na camada de transporte de rede ou na camada de aplicação do banco de dados.
Solução de problemas de tempo limite com logs
Investigue problemas de tempo limite de conexão verificando o log de erros e o log de consultas lentas da sua instância RDS.
Faça login no console do ApsaraDB RDS. Na página Instances, localize a instância desejada e acesse sua página de gerenciamento. No painel de navegação à esquerda, escolha Logs > Error Logs.
Verifique no log de erros registros como
Host is blocked,connect timeoutouAborted connectionpara identificar o motivo da falha de conexão.Escolha Slow Query Logs e verifique se há consultas lentas de longa duração que possam estar bloqueando novas conexões.
Verifique as configurações dos parâmetros
wait_timeouteinteractive_timeoutda instância para determinar se os tempos limite estão desconectando automaticamente as conexões ociosas.