Memecahkan masalah koneksi di Amazon Redshift - Amazon Redshift

Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.

Memecahkan masalah koneksi di Amazon Redshift

Jika Anda memiliki masalah dengan menghubungkan ke cluster Anda dari alat klien SQL, ada beberapa hal yang dapat Anda periksa untuk mempersempit masalah. Jika Anda menggunakan sertifikat SSL atau server, pertama-tama hapus kompleksitas ini saat Anda memecahkan masalah koneksi. Kemudian tambahkan ini kembali ketika Anda telah menemukan solusi. Untuk informasi selengkapnya, lihat Mengkonfigurasi opsi keamanan untuk koneksi.

penting

Amazon Redshift telah mengubah cara sertifikat SSL dikelola. Jika Anda mengalami masalah saat menghubungkan menggunakan SSL, Anda mungkin perlu memperbarui sertifikat CA root kepercayaan Anda saat ini. Untuk informasi selengkapnya, lihat Transisi ke sertifikat ACM untuk koneksi SSL.

Bagian berikut memiliki beberapa contoh pesan kesalahan dan kemungkinan solusi untuk masalah koneksi. Karena alat klien SQL yang berbeda menyediakan pesan kesalahan yang berbeda, ini bukan daftar lengkap, tetapi harus menjadi titik awal yang baik untuk memecahkan masalah.

Menghubungkan dari luar Amazon EC2 dan menghadapi masalah batas waktu firewall

Koneksi klien Anda ke database tampak hang atau batas waktu saat menjalankan kueri panjang, seperti perintah COPY. Dalam kasus ini, Anda mungkin mengamati bahwa konsol Amazon Redshift menampilkan bahwa kueri telah selesai, tetapi alat klien itu sendiri tampaknya masih menjalankan kueri. Hasil kueri mungkin hilang atau tidak lengkap tergantung kapan koneksi berhenti.

Solusi yang mungkin

Masalah ini terjadi saat Anda terhubung ke Amazon Redshift dari mesin selain instans Amazon EC2 . Dalam hal ini, koneksi idle diakhiri oleh komponen jaringan perantara, seperti firewall, setelah periode tidak aktif. Perilaku ini khas ketika Anda masuk dari jaringan pribadi virtual (VPN) atau jaringan lokal Anda.

Untuk menghindari batas waktu ini, kami merekomendasikan perubahan berikut:

  • Tingkatkan nilai sistem klien yang berhubungan dengan batas waktu TCP/IP. Buat perubahan ini di komputer yang Anda gunakan untuk terhubung ke cluster Anda. Periode batas waktu harus disesuaikan untuk klien dan jaringan Anda. Untuk informasi selengkapnya, lihat Ubah pengaturan batas waktu TCP/IP.

  • Secara opsional, atur perilaku keepalive di tingkat DSN. Untuk informasi selengkapnya, lihat Ubah pengaturan batas waktu DSN.

Ubah pengaturan batas waktu TCP/IP

Untuk mengubah pengaturan batas waktu TCP/IP, konfigurasikan pengaturan batas waktu sesuai dengan sistem operasi yang Anda gunakan untuk terhubung ke cluster Anda.

  • Linux — Jika klien Anda berjalan di Linux, jalankan perintah berikut sebagai pengguna root untuk mengubah pengaturan batas waktu untuk sesi saat ini:

    /sbin/sysctl -w net.ipv4.tcp_keepalive_time=200 net.ipv4.tcp_keepalive_intvl=200 net.ipv4.tcp_keepalive_probes=5

    Untuk mempertahankan pengaturan, membuat atau memodifikasi file /etc/sysctl.conf dengan nilai-nilai berikut kemudian reboot sistem Anda.

    net.ipv4.tcp_keepalive_time=200 net.ipv4.tcp_keepalive_intvl=200 net.ipv4.tcp_keepalive_probes=5
  • Windows — Jika klien Anda berjalan pada Windows, edit nilai untuk pengaturan registri berikut di bawah HKEY_LOCAL_MACHINE\ SYSTEM\\ Services\ Tcpip\ CurrentControlSet Parameters\:

    • KeepAliveTime: 30000

    • KeepAliveInterval: 1000

    • TcpMaxDataRetransmissions: 10

    Pengaturan ini menggunakan tipe data DWORD. Jika tidak ada di bawah jalur registri, Anda dapat membuat pengaturan dan menentukan nilai yang disarankan ini. Untuk informasi lebih lanjut tentang mengedit registri Windows, lihat dokumentasi Windows.

    Setelah Anda menetapkan nilai-nilai ini, restart komputer Anda agar perubahan diterapkan.

  • Mac - Jika klien Anda berjalan di Mac, jalankan perintah berikut untuk mengubah pengaturan batas waktu untuk sesi saat ini:

    sudo sysctl net.inet.tcp.keepintvl=200000 sudo sysctl net.inet.tcp.keepidle=200000 sudo sysctl net.inet.tcp.keepinit=200000 sudo sysctl net.inet.tcp.always_keepalive=1

    Untuk mempertahankan pengaturan, membuat atau memodifikasi file /etc/sysctl.conf dengan nilai-nilai berikut:

    net.inet.tcp.keepidle=200000 net.inet.tcp.keepintvl=200000 net.inet.tcp.keepinit=200000 net.inet.tcp.always_keepalive=1

    Nyalakan kembali komputer Anda, lalu jalankan perintah berikut untuk memverifikasi bahwa nilainya ditetapkan.

    sysctl net.inet.tcp.keepidle sysctl net.inet.tcp.keepintvl sysctl net.inet.tcp.keepinit sysctl net.inet.tcp.always_keepalive

Ubah pengaturan batas waktu DSN

Anda dapat mengatur perilaku keepalive di tingkat DSN jika Anda mau. Anda melakukan ini dengan menambahkan atau memodifikasi parameter berikut dalam file odbc.ini:

KeepAlivesCount

Jumlah paket TCP keepalive yang dapat hilang sebelum koneksi dianggap rusak.

KeepAlivesIdle

Jumlah detik tidak aktif sebelum driver mengirim paket TCP keepalive.

KeepAlivesInterval

Jumlah detik antara setiap transmisi ulang TCP keepalive.

Jika parameter ini tidak ada, atau jika mereka memiliki nilai 0, sistem menggunakan parameter keepalive yang ditentukan untuk TCP/IP to determine DSN keepalive behavior. On Windows, you can find the TCP/IP parameter dalam registri di. HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters\ Di Linux dan macOS, Anda dapat menemukan parameter TCP/IP dapat ditemukan di file sysctl.conf.

Koneksi ditolak atau gagal

Ketika koneksi Anda ditolak atau gagal, Anda mungkin menerima kesalahan yang mirip dengan salah satu dari berikut ini.

  • “Gagal membuat koneksi ke<endpoint>.”

  • “Tidak dapat terhubung ke server: Waktu koneksi habis. Apakah server berjalan pada host '<endpoint>' dan menerima koneksi TCP/IP pada port? '<port>'

  • “Koneksi ditolak. Periksa apakah nama host dan port sudah benar dan bahwa postmaster menerima koneksi TCP/IP.

Solusi yang mungkin

Umumnya, ketika Anda menerima pesan kesalahan yang menunjukkan bahwa ada kegagalan untuk membuat koneksi, itu adalah masalah dengan izin untuk mengakses cluster atau dengan lalu lintas jaringan yang mencapai cluster.

Untuk terhubung ke klaster dari alat klien di luar jaringan tempat klaster berada, Anda menambahkan aturan masuk ke grup keamanan klaster. Konfigurasi aturan tergantung pada apakah cluster Amazon Redshift dibuat di cloud pribadi virtual (VPC):

  • Jika Anda membuat klaster Amazon Redshift di cloud pribadi virtual (VPC) berdasarkan Amazon VPC, tambahkan aturan masuk ke grup keamanan VPC yang menentukan alamat CIDR/IP klien, di Amazon VPC. Untuk informasi selengkapnya tentang mengonfigurasi grup keamanan VPC untuk klaster dan opsi yang dapat diakses publik, lihat. Sumber daya Redshift dalam VPC

  • Jika Anda membuat klaster Amazon Redshift di luar VPC, tambahkan alamat CIDR/IP klien Anda ke grup keamanan klaster di Amazon Redshift. Untuk informasi selengkapnya tentang mengonfigurasi grup keamanan klaster, lihatGrup keamanan Amazon Redshift.

Jika Anda mencoba menyambung ke klaster dari alat klien yang berjalan pada EC2 instance Amazon, Anda juga menambahkan aturan masuk. Dalam hal ini, tambahkan aturan ke grup keamanan cluster. Aturan harus menentukan grup EC2 keamanan Amazon yang terkait dengan EC2 instans Amazon alat klien.

Dalam beberapa kasus, Anda mungkin memiliki lapisan antara klien dan server Anda, seperti firewall. Dalam kasus ini, pastikan firewall menerima koneksi masuk melalui port yang Anda konfigurasi untuk cluster Anda.

Klien dan driver tidak kompatibel

Jika klien dan driver Anda tidak kompatibel, Anda mungkin menerima kesalahan yang mengatakan, “DSN yang ditentukan berisi ketidakcocokan arsitektur antara Driver dan Aplikasi.”

Solusi yang mungkin

Ketika Anda mencoba untuk menghubungkan dan mendapatkan kesalahan tentang ketidakcocokan arsitektur, ini berarti bahwa alat klien dan driver tidak kompatibel. Ini terjadi karena arsitektur sistem mereka tidak cocok. Misalnya, ini dapat terjadi jika Anda memiliki alat klien 32-bit tetapi telah menginstal versi 64-bit driver. Terkadang alat klien 64-bit dapat menggunakan driver 32-bit, tetapi Anda tidak dapat menggunakan aplikasi 32-bit dengan driver 64-bit. Pastikan driver dan alat klien menggunakan versi arsitektur sistem yang sama.

Kueri tampaknya hang dan terkadang gagal mencapai cluster

Anda mengalami masalah dengan penyelesaian kueri, di mana kueri tampaknya berjalan tetapi hang di alat klien SQL. Terkadang kueri gagal muncul di cluster, seperti di tabel sistem atau konsol Amazon Redshift.

Solusi yang mungkin

Masalah ini bisa terjadi karena packet drop. Dalam hal ini, ada perbedaan ukuran unit transmisi maksimum (MTU) di jalur jaringan antara dua host Internet Protocol (IP). Ukuran MTU menentukan ukuran maksimum, dalam byte, dari paket yang dapat ditransfer dalam satu bingkai Ethernet melalui koneksi jaringan. Pada tahun AWS, beberapa jenis EC2 instans Amazon mendukung MTU 1500 (frame Ethernet v2) dan jenis instans lainnya mendukung MTU 9001 (bingkai jumbo TCP/IP).

Untuk menghindari masalah yang dapat terjadi dengan perbedaan ukuran MTU, sebaiknya lakukan salah satu hal berikut:

  • Jika klaster Anda menggunakan platform EC2 -VPC, konfigurasikan grup keamanan Amazon VPC dengan aturan Internet Control Message Protocol (ICMP) kustom masuk yang muncul. Destination Unreachable Aturan dengan demikian menginstruksikan host asal untuk menggunakan ukuran MTU terendah di sepanjang jalur jaringan. Untuk detail tentang pendekatan ini, lihatMengkonfigurasi grup keamanan untuk memungkinkan ICMP “tujuan tidak dapat dijangkau”.

  • Jika cluster Anda menggunakan platform EC2 -Classic, atau Anda tidak dapat mengizinkan aturan masuk ICMP, nonaktifkan bingkai jumbo TCP/IP sehingga frame Ethernet v2 digunakan. Untuk detail tentang pendekatan ini, lihatMengkonfigurasi MTU dari sebuah instance.

Mengkonfigurasi grup keamanan untuk memungkinkan ICMP “tujuan tidak dapat dijangkau”

Ketika ada perbedaan ukuran MTU di jaringan antara dua host, pertama-tama pastikan bahwa pengaturan jaringan Anda tidak memblokir jalur penemuan MTU (PMTUD). PMTUD memungkinkan host penerima untuk menanggapi host asal dengan pesan ICMP berikut:. Destination Unreachable: fragmentation needed and DF set (ICMP Type 3, Code 4) Pesan ini menginstruksikan host asal untuk menggunakan ukuran MTU terendah di sepanjang jalur jaringan untuk mengirim ulang permintaan. Tanpa negosiasi ini, paket drop dapat terjadi karena permintaan terlalu besar untuk diterima oleh host penerima. Untuk informasi lebih lanjut tentang pesan ICMP ini, kunjungi situs web Internet Engineering Task Force (IETF). RFC792

Jika Anda tidak secara eksplisit mengonfigurasi aturan masuk ICMP ini untuk grup keamanan VPC Amazon Anda, PMTUD diblokir. Dalam AWS, grup keamanan adalah firewall virtual yang menentukan aturan untuk lalu lintas masuk dan keluar ke suatu instans. Untuk informasi tentang grup keamanan klaster Amazon Redshift, lihat. Grup keamanan Amazon Redshift Untuk cluster yang menggunakan platform EC2 -VPC, Amazon Redshift menggunakan grup keamanan VPC untuk mengizinkan atau menolak lalu lintas ke cluster. Secara default, grup keamanan dikunci dan menolak semua lalu lintas masuk. Untuk informasi tentang cara menyetel aturan masuk dan keluar untuk instans EC2 -Classic atau EC2 -VPC, lihat Perbedaan antara instance di EC2 -Classic dan VPC di Panduan Pengguna Amazon. EC2

Untuk informasi selengkapnya tentang cara menambahkan aturan ke grup keamanan VPC, lihat. Grup keamanan VPC Untuk informasi selengkapnya tentang setelan PMTUD tertentu yang diperlukan dalam aturan ini, lihat Penemuan Path MTU di Panduan Pengguna Amazon. EC2

Mengkonfigurasi MTU dari sebuah instance

Dalam beberapa kasus, klaster Anda mungkin menggunakan platform EC2 -Classic atau Anda tidak dapat mengizinkan aturan ICMP khusus untuk lalu lintas masuk. Dalam kasus ini, kami menyarankan Anda menyesuaikan MTU ke 1500 pada antarmuka jaringan (NIC) dari EC2 instans yang Anda sambungkan ke cluster Amazon Redshift Anda. Penyesuaian ini menonaktifkan bingkai jumbo TCP/IP untuk memastikan bahwa koneksi secara konsisten menggunakan ukuran paket yang sama. Namun, opsi ini mengurangi throughput jaringan maksimum untuk instans sepenuhnya, tidak hanya untuk koneksi ke Amazon Redshift. Untuk informasi selengkapnya, lihat prosedur berikut ini.

Untuk mengatur MTU pada sistem operasi Microsoft Windows

Jika klien Anda berjalan di sistem operasi Microsoft Windows, Anda dapat meninjau dan mengatur nilai MTU untuk adaptor Ethernet dengan menggunakan perintah. netsh

  1. Jalankan perintah berikut untuk menentukan nilai MTU saat ini:

    netsh interface ipv4 show subinterfaces
  2. Tinjau MTU nilai Ethernet adaptor dalam output.

  3. Jika nilainya tidak1500, jalankan perintah berikut untuk mengaturnya:

    netsh interface ipv4 set subinterface "Ethernet" mtu=1500 store=persistent

    Setelah Anda menetapkan nilai ini, restart komputer Anda agar perubahan diterapkan.

Untuk mengatur MTU pada sistem operasi Linux

Jika klien Anda berjalan di sistem operasi Linux, Anda dapat meninjau dan mengatur nilai MTU dengan menggunakan ip perintah.

  1. Jalankan perintah berikut untuk menentukan nilai MTU saat ini:

    $ ip link show eth0
  2. Tinjau nilai berikut mtu dalam output.

  3. Jika nilainya tidak1500, jalankan perintah berikut untuk mengaturnya:

    $ sudo ip link set dev eth0 mtu 1500
Untuk mengatur MTU pada sistem operasi Mac
  • Ikuti petunjuk tentang situs dukungan macOS. How to change the MTU for troubleshooting purposes Untuk informasi lebih lanjut, cari situs dukungan.

Mengatur parameter ukuran pengambilan JDBC

Secara default, driver JDBC mengumpulkan semua hasil untuk kueri pada satu waktu. Akibatnya, ketika Anda mencoba untuk mengambil hasil besar yang disetel melalui koneksi JDBC, Anda mungkin mengalami kesalahan sisi klien. out-of-memory Untuk memungkinkan klien Anda mengambil set hasil dalam batch, bukan dalam satu all-or-nothing pengambilan, setel parameter ukuran pengambilan JDBC di aplikasi klien Anda.

catatan

Ukuran pengambilan tidak didukung untuk ODBC.

Untuk kinerja terbaik, atur ukuran pengambilan ke nilai tertinggi yang tidak menyebabkan kesalahan memori. Nilai ukuran pengambilan yang lebih rendah menghasilkan lebih banyak perjalanan server, yang memperpanjang waktu eksekusi. Server menyimpan sumber daya, termasuk slot kueri WLM dan memori terkait, hingga klien mengambil seluruh kumpulan hasil atau kueri dibatalkan. Saat Anda menyetel ukuran pengambilan dengan tepat, sumber daya tersebut dirilis lebih cepat, membuatnya tersedia untuk kueri lain.

catatan

Jika Anda perlu mengekstrak kumpulan data besar, sebaiknya gunakan pernyataan UNLOAD untuk mentransfer data ke Amazon S3. Saat Anda menggunakan UNLOAD, node komputasi bekerja secara paralel untuk mempercepat transfer data.

Untuk informasi selengkapnya tentang pengaturan parameter ukuran pengambilan JDBC, buka Mendapatkan hasil berdasarkan kursor dalam dokumentasi PostgreSQL.