Topik ini menjelaskan cara mengatasi masalah koneksi dengan instans ApsaraDB RDS for MySQL.
Saat membangun dan men-debug beban kerja Anda, Anda mungkin tidak dapat terhubung ke instans ApsaraDB RDS for MySQL. Penyebab umumnya meliputi ketidaksesuaian jenis jaringan dan pengaturan daftar putih alamat IP yang salah. Topik ini mencakup penyebab tersebut beserta solusinya.
Jenis jaringan tidak sesuai
Instans ECS berada di VPC, sedangkan instans ApsaraDB RDS for MySQL berada di jaringan klasik.
Solusi 1 (Direkomendasikan): Ubah jenis jaringan instans ApsaraDB RDS for MySQL dari jaringan klasik ke VPC. Untuk informasi selengkapnya, lihat Ubah jenis jaringan instans ApsaraDB RDS.
CatatanSetelah perubahan, kedua instans harus berada di VPC yang sama agar dapat berkomunikasi melalui jaringan internal.
Solusi 2: Beli instans ECS baru di jaringan klasik. Instans ECS tidak dapat dimigrasikan dari VPC ke jaringan klasik. Kami merekomendasikan penggunaan VPC karena menyediakan keamanan lebih tinggi dibandingkan jaringan klasik.
Solusi 3: Terhubung ke instans RDS dari instans ECS menggunakan titik akhir publiknya. Metode ini menawarkan kinerja, keamanan, dan stabilitas yang buruk.
Instans ECS berada di jaringan klasik, sedangkan instans ApsaraDB RDS for MySQL berada di VPC.
Solusi 1 (Direkomendasikan): Migrasikan instans ECS dari jaringan klasik ke VPC.
CatatanSetelah migrasi, kedua instans harus berada di VPC yang sama agar dapat berkomunikasi melalui jaringan internal.
Solusi 2: Ubah jenis jaringan instans RDS dari VPC ke jaringan klasik. Kami merekomendasikan penggunaan VPC karena menyediakan keamanan lebih tinggi dibandingkan jaringan klasik.
Solusi 3: Gunakan ClassicLink untuk menghubungkan instans ECS di jaringan klasik ke sumber daya VPC melalui jaringan internal.
Solusi 4: Terhubung ke instans RDS dari instans ECS menggunakan titik akhir publiknya. Metode ini menawarkan kinerja, keamanan, dan stabilitas yang buruk.
VPC berbeda
VPC adalah lingkungan jaringan yang terisolasi secara logis yang dibangun di Alibaba Cloud. Agar dapat berkomunikasi melalui jaringan internal, instans ECS dan ApsaraDB RDS for MySQL harus berada di VPC yang sama.
Solusi 1 (Direkomendasikan): Pindahkan instans RDS dan ECS ke dalam VPC yang sama.
Untuk melakukannya, Anda dapat mengubah VPC instans RDS atau mengubah VPC instans ECS.
Solusi 2: Bangun koneksi antara kedua VPC menggunakan Cloud Enterprise Network (CEN).
Solusi 3: Terhubung melalui internet. Metode ini menawarkan kinerja, keamanan, dan stabilitas yang buruk.
Wilayah berbeda
Koneksi publik: Gunakan titik akhir publik instans RDS untuk terhubung lintas wilayah atau akun melalui internet. Anda tidak dikenai biaya untuk trafik internet inbound dan outbound instans RDS.
Koneksi privat: Secara default, jika instans ECS dan instans RDS berada di wilayah berbeda atau dimiliki oleh akun berbeda, keduanya tidak dapat terhubung melalui jaringan internal karena VPC-nya terisolasi. Namun, Anda dapat menggunakan Koneksi peering VPC atau Cloud Enterprise Network (CEN) untuk menghubungkan kedua VPC tersebut, sehingga instans ECS dapat mengakses instans RDS lintas wilayah atau akun.
Koneksi peering VPC: Fitur ini mendukung koneksi VPC lintas wilayah dan lintas akun. Fitur ini hemat biaya tetapi relatif kompleks untuk dikonfigurasi, sehingga cocok untuk skenario sederhana dengan jumlah VPC yang sedikit.
Cloud Enterprise Network (CEN): Produk ini mendukung koneksi VPC lintas wilayah dan lintas akun. Produk ini mudah dikonfigurasi tetapi lebih mahal, sehingga cocok untuk skenario kompleks dengan banyak VPC.
Pengaturan daftar putih alamat IP salah
Daftar putih alamat IP default hanya berisi alamat 127.0.0.1. Alamat ini mencegah perangkat apa pun mengakses instans RDS. Anda harus menambahkan alamat IP klien ke daftar putih. Untuk informasi selengkapnya, lihat Konfigurasikan daftar putih alamat IP untuk instans ApsaraDB RDS for MySQL.
Daftar putih diatur ke 0.0.0.0. Format yang benar adalah 0.0.0.0/0.
PentingAlamat IP 0.0.0.0/0 mengizinkan akses dari perangkat apa pun. Gunakan dengan hati-hati.
Jika Anda mengaktifkan mode daftar putih yang ditingkatkan, periksa hal berikut:
Jika Anda menggunakan titik akhir internal instans di VPC, pastikan alamat IP pribadi instans ECS ditambahkan ke grup daftar putih VPC.
Jika Anda menggunakan titik akhir internal instans di jaringan klasik, pastikan alamat IP pribadi instans ECS ditambahkan ke grup daftar putih jaringan klasik.
Jika Anda terhubung melalui internet, pastikan alamat IP publik perangkat Anda ditambahkan ke grup daftar putih jaringan klasik. Grup daftar putih VPC tidak berlaku untuk koneksi publik.
Alamat IP publik yang Anda tambahkan ke daftar putih mungkin bukan alamat IP outbound aktual perangkat Anda. Hal ini dapat terjadi karena alasan berikut:
Alamat IP publik bersifat dinamis dan dapat berubah.
Tool atau situs web yang Anda gunakan untuk mengecek alamat IP publik mengembalikan hasil yang tidak akurat.
Kegagalan atau error resolusi nama domain
Kegagalan server DNS atau perubahan konfigurasi kartu antarmuka jaringan (NIC) dapat menyebabkan resolusi nama domain gagal atau mengembalikan alamat IP yang salah. Gunakan perintah ping dan telnet untuk menguji konektivitas ke instans RDS Anda.
ping <domain_name>
telnet <domain_name> <port_number>
Contoh
# Contoh ping berhasil
[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
# Contoh ping gagal
[root@izbpxxx ~]# ping rm-bp1xxx.mysql.rds.aliyuncs.com
ping: rm-bp1xxx.mysql.rds.aliyuncs.com: Name or service not known
[root@izbpxxx ~]## Contoh koneksi telnet berhasil
[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
# Contoh koneksi telnet gagal (kegagalan resolusi nama domain)
[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 ~]#Jika pengujian gagal, modifikasi file konfigurasi NIC untuk mengatasi masalah tersebut:
Modifikasi file konfigurasi NIC.
vi /etc/sysconfig/network-scripts/<nic_configuration_file_name>Catatan<nic_configuration_file_name> adalah NIC yang digunakan oleh server ECS. Jalankan perintah
ifconfiguntuk melihat sufiks nama file tersebut. Nilai default-nya adalah ifcfg-eth0.Tambahkan baris berikut di akhir file:
DNS1=100.100.XX.XX DNS2=100.100.XX.XXCatatanJika DNS1 dan DNS2 sudah dikonfigurasi, perbarui alamat IP-nya seperti yang ditunjukkan di atas.
DEVICE=eth0 BOOTPROTO=dhcp ONBOOT=yes DNS1=100.100.2.136 DNS2=100.100.2.138Jalankan perintah berikut untuk merestart layanan jaringan:
sudo systemctl restart networkJalankan perintah berikut untuk memeriksa apakah modifikasi berhasil:
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 ~]#
Uji konektivitas port
Jika resolusi nama domain berfungsi dengan benar, gunakan perintah telnet untuk menguji konektivitas port ke instans RDS.
telnet <RDS_endpoint> <port_number>Sebagai contoh, uji port default 3306 instans ApsaraDB RDS for MySQL:
telnet rm-xxxx.mysql.rds.aliyuncs.com 3306Output yang berisi
Connected todanEscape character ismenunjukkan bahwa port tersebut dapat diakses pada lapisan jaringan.Error
Connection timed outmenunjukkan jaringan tidak dapat dijangkau atau diblokir oleh firewall. Periksa konfigurasi berikut:Verifikasi bahwa daftar putih alamat IP RDS mencakup alamat IP klien.
Verifikasi bahwa aturan security group mengizinkan trafik pada port yang sesuai.
Verifikasi bahwa klien dan instans RDS berada di VPC yang sama. Titik akhir internal hanya dapat diakses dari dalam VPC-nya.
Error
Connection refusedmenunjukkan bahwa port tersebut tidak sedang didengarkan. Periksa status berjalan dan konfigurasi port instans RDS.
Jika perintah ping dan telnet berhasil dijalankan tetapi aplikasi Anda tetap melaporkan timeout koneksi, masalahnya berada di lapisan aplikasi, bukan lapisan jaringan. Gunakan tcpdump untuk mengambil paket dan menganalisis jabat tangan tiga arah TCP serta jabat tangan empat arah untuk mengidentifikasi akar penyebab timeout.
tcpdump -i eth0 host <RDS_endpoint> -w rds_capture.pcapAnalisis file pengambilan paket: Tidak ada respons terhadap paket SYN menunjukkan jaringan tidak dapat dijangkau atau diblokir. Tidak ada pertukaran data setelah jabat tangan tiga arah berhasil menunjukkan anomali tingkat aplikasi.
Instans macet dalam status Creating Network Connection
Di konsol, buka halaman Tasks. Temukan tugas tersebut dan klik Retry atau Modify switching time. Untuk informasi selengkapnya, lihat Gunakan Task Center.
Timeout baca karena tidak ada respons terhadap paket FIN
Saat Anda terhubung ke instans ApsaraDB RDS for MySQL melalui jaringan perantara seperti VPN atau jalur sewa, koneksi mungkin berfungsi awalnya tetapi kemudian mengalami timeout. Hal ini dapat terjadi jika server gagal merespons setelah klien mengirim paket FIN.
Ikuti langkah-langkah berikut untuk melakukan troubleshooting masalah ini:
Di konsol ApsaraDB RDS, buka halaman detail instans. Di panel navigasi sebelah kiri, klik Parameters dan periksa nilai parameter
wait_timeoutdaninteractive_timeout. Di ApsaraDB RDS for MySQL, nilai defaultwait_timeoutadalah 86.400 detik. Jika parameter ini diatur ke nilai rendah, server akan menutup koneksi idle secara prematur.Periksa kehilangan paket atau latensi tinggi pada tautan jaringan perantara, seperti VPN atau jalur sewa. Gunakan perintah
telnet <RDS_endpoint> <port_number>untuk menguji konektivitas port ke instans RDS dan konfirmasi aksesibilitas pada lapisan jaringan.Gunakan
tcpdumpatau Wireshark untuk mengambil paket secara simultan di klien dan server. Analisis urutan paket TCP FIN/RST untuk menentukan apakah pemutusan koneksi terjadi di lapisan transport jaringan atau lapisan aplikasi database.
Troubleshooting timeout dengan log
Investigasi masalah timeout koneksi dengan memeriksa log error dan log slow query instans RDS Anda.
Login ke Konsol ApsaraDB RDS. Di halaman Instances, temukan instans target dan buka halaman manajemennya. Di panel navigasi sebelah kiri, pilih Logs > Error Logs.
Periksa log error untuk catatan seperti
Host is blocked,connect timeout, atauAborted connectionuntuk mengidentifikasi alasan kegagalan koneksi.Pilih Slow Query Logs dan periksa kueri lambat berdurasi panjang yang mungkin memblokir koneksi baru.
Periksa pengaturan parameter
wait_timeoutdaninteractive_timeoutinstans untuk menentukan apakah timeout secara otomatis memutus koneksi idle.