Bagikan melalui


Dukungan driver JDBC untuk Ketersediaan Tinggi, pemulihan bencana

Unduh driver JDBC

Artikel ini membahas dukungan Microsoft JDBC Driver for SQL Server untuk ketersediaan tinggi, pemulihan bencana: Grup ketersediaan AlwaysOn. Untuk informasi selengkapnya tentang grup ketersediaan AlwaysOn, lihat Buku Online SQL Server 2012 (11.x).

Mulai versi 4.0 dari Driver Microsoft JDBC untuk SQL Server, Anda dapat menentukan pendengar grup ketersediaan grup ketersediaan (ketersediaan tinggi, pemulihan bencana) grup ketersediaan (AG) di properti koneksi. Jika aplikasi Microsoft JDBC Driver for SQL Server terhubung ke database Always On yang gagal, koneksi asli rusak, dan aplikasi harus membuka koneksi baru untuk terus bekerja setelah failover. Properti koneksi berikut ditambahkan di Microsoft JDBC Driver 4.0 untuk SQL Server:

  • multiSubnetFailover

  • applicationIntent

Tentukan multiSubnetFailover=true saat menyambungkan ke pendengar grup ketersediaan grup ketersediaan atau Instans Kluster Failover.

Catatan

multiSubnetFailover salah secara default. Gunakan applicationIntent untuk mendeklarasikan jenis beban kerja aplikasi. Untuk detail selengkapnya, lihat bagian di bawah ini.

Mulai versi 6.0 dari Driver Microsoft JDBC untuk SQL Server, properti koneksi baru transparentNetworkIPResolution (TNIR) ditambahkan untuk koneksi transparan ke grup ketersediaan AlwaysOn atau ke server yang memiliki beberapa alamat IP yang terkait. Ketika transparentNetworkIPResolution benar, driver mencoba menyambungkan ke alamat IP pertama yang tersedia. Jika upaya pertama gagal, driver mencoba menyambungkan ke semua alamat IP secara paralel sampai batas waktu berakhir, membuang upaya koneksi yang tertunda ketika salah satunya berhasil.

Catatan:

  • transparentNetworkIPResolution adalah true secara default
  • transparentNetworkIPResolution diabaikan jika multiSubnetFailover benar
  • transparentNetworkIPResolution diabaikan jika pencerminan database digunakan
  • transparentNetworkIPResolution diabaikan jika ada lebih dari 64 alamat IP
  • Ketika transparentNetworkIPResolution benar, upaya koneksi pertama menggunakan nilai batas waktu 500 ms. Upaya koneksi lainnya mengikuti logika yang sama seperti pada fitur multiSubnetFailover.

Catatan

Jika Anda menggunakan Microsoft JDBC Driver 4.2 (atau lebih rendah) untuk SQL Server dan jika multiSubnetFailover salah, Driver Microsoft JDBC untuk SQL Server mencoba menyambungkan ke alamat IP pertama. Jika Driver Microsoft JDBC untuk SQL Server tidak dapat membuat koneksi dengan alamat IP pertama, koneksi gagal. Driver Microsoft JDBC untuk SQL Server tidak akan mencoba menyambungkan ke alamat IP berikutnya yang terkait dengan server.

Catatan

Meningkatkan batas waktu koneksi dan menerapkan logika coba lagi koneksi akan meningkatkan probabilitas bahwa aplikasi akan terhubung ke grup ketersediaan. Selain itu, karena koneksi dapat gagal karena failover grup ketersediaan, Anda harus menerapkan logika coba lagi koneksi, mencoba kembali koneksi yang gagal sampai koneksi kembali tersambung.

Menyambungkan dengan multiSubnetFailover

Selalu tentukan multiSubnetFailover=true saat menyambungkan ke pendengar grup ketersediaan grup ketersediaan grup ketersediaan SQL Server 2012 (11.x) atau Instans Kluster Failover SQL Server 2012 (11.x). multiSubnetFailover memungkinkan failover yang lebih cepat untuk semua Grup Ketersediaan dan instans kluster failover di SQL Server 2012 (11.x) dan akan secara signifikan mengurangi waktu failover untuk topologi Always On tunggal dan multi-subnet. Selama failover multi-subnet, klien akan mencoba koneksi secara paralel. Selama failover subnet, Driver Microsoft JDBC untuk SQL Server akan secara agresif mencoba kembali koneksi TCP.

Properti koneksi multiSubnetFailover menunjukkan bahwa aplikasi sedang disebarkan dalam grup ketersediaan atau Instans Kluster Failover dan bahwa Driver Microsoft JDBC untuk SQL Server akan mencoba menyambungkan ke database pada instans SQL Server utama dengan mencoba menyambungkan ke semua alamat IP. Ketika MultiSubnetFailover=true ditentukan untuk koneksi, klien mencoba kembali koneksi TCP mencoba lebih cepat daripada interval transmisi ulang TCP default sistem operasi. Perilaku ini memungkinkan koneksi ulang yang lebih cepat setelah failover Grup Ketersediaan AlwaysOn atau Instans Kluster Failover AlwaysOn, dan berlaku untuk Grup Ketersediaan tunggal dan multi-subnet dan Instans Kluster Failover.

Untuk informasi selengkapnya tentang kata kunci string koneksi di Driver Microsoft JDBC untuk SQL Server, lihat Mengatur Properti Koneksi.

Menentukan multiSubnetFailover=true saat menyambungkan ke sesuatu selain pendengar grup ketersediaan atau Instans Kluster Failover dapat mengakibatkan dampak performa negatif, dan tidak didukung.

Jika manajer keamanan tidak diinstal, Java Virtual Machine menyimpan alamat IP virtual (VIP) untuk jangka waktu terbatas, secara default, yang ditentukan oleh implementasi JDK Anda dan properti Java networkaddress.cache.ttl dan networkaddress.cache.negative.ttl. Jika manajer keamanan JDK diinstal, Java Virtual Machine akan menyimpan cache VIP, dan tidak akan me-refresh cache secara default. Anda harus mengatur "time-to-live" (networkaddress.cache.ttl) ke satu hari untuk cache Java Virtual Machine. Jika Anda tidak mengubah nilai default menjadi satu hari (atau lebih), nilai lama tidak akan dihapus menyeluruh dari cache Java Virtual Machine saat VIP ditambahkan atau diperbarui. Untuk informasi selengkapnya tentang networkaddress.cache.ttl dan networkaddress.cache.negative.ttl, lihat https://download.oracle.com/javase/6/docs/technotes/guides/net/properties.html.

Gunakan panduan berikut untuk menyambungkan ke server dalam grup ketersediaan atau Instans Kluster Failover:

  • Driver akan menghasilkan kesalahan jika properti koneksi instanceName digunakan dalam string koneksi yang sama dengan properti koneksi multiSubnetFailover . Kesalahan ini mencerminkan fakta bahwa Browser SQL tidak digunakan dalam grup ketersediaan. Namun, jika properti koneksi portNumber juga ditentukan, driver akan mengabaikan instanceName dan menggunakan portNumber.

  • Gunakan properti koneksi multiSubnetFailover saat menyambungkan ke satu subnet atau multi-subnet, itu akan meningkatkan performa untuk keduanya.

  • Untuk menyambungkan ke grup ketersediaan, tentukan pendengar grup ketersediaan grup ketersediaan sebagai server dalam string koneksi Anda. Misalnya, jdbc:sqlserver://VNN1.

  • Menyambungkan ke instans SQL Server yang dikonfigurasi dengan lebih dari 64 alamat IP akan menyebabkan kegagalan koneksi.

  • Perilaku aplikasi yang menggunakan properti koneksi multiSubnetFailover tidak terpengaruh berdasarkan jenis autentikasi: autentikasi SQL Server, Autentikasi Kerberos, atau Autentikasi Windows.

  • Tingkatkan nilai loginTimeout untuk mengakomodasi waktu failover dan mengurangi upaya coba lagi koneksi aplikasi.

Jika perutean baca-saja tidak berlaku, menyambungkan ke lokasi replika sekunder dalam grup ketersediaan akan gagal dalam situasi berikut:

  • Jika lokasi replika sekunder tidak dikonfigurasi untuk menerima koneksi.

  • Jika aplikasi menggunakan applicationIntent=ReadWrite (dibahas di bawah) dan lokasi replika sekunder dikonfigurasi untuk akses baca-saja.

Koneksi akan gagal jika replika utama dikonfigurasi untuk menolak beban kerja baca-saja dan string koneksi berisi ApplicationIntent=ReadOnly.

Memutakhirkan untuk Menggunakan kluster multi-subnet dari pencerminan database

Jika Anda meningkatkan Driver Microsoft JDBC untuk aplikasi SQL Server yang saat ini menggunakan pencerminan database ke skenario multi-subnet, Anda harus menghapus properti koneksi failoverPartner dan menggantinya dengan multiSubnetFailover diatur ke true dan mengganti nama server dalam string koneksi dengan listener grup ketersediaan. Jika string koneksi menggunakan failoverPartner dan multiSubnetFailover=true, driver akan menghasilkan kesalahan. Namun, jika string koneksi menggunakan failoverPartner dan multiSubnetFailover=false (atau ApplicationIntent=ReadWrite), aplikasi akan menggunakan pencerminan database.

Driver akan mengembalikan kesalahan jika pencerminan database digunakan pada database utama di AG, dan jika multiSubnetFailover=true digunakan dalam string koneksi yang terhubung ke database utama alih-alih ke listener grup ketersediaan.

Tentukan niat aplikasi

Anda dapat menentukan kata kunci ApplicationIntent dalam string koneksi Anda. Nilai yang dapat ditetapkan adalah ReadWrite (default) atau ReadOnly.

Saat Anda mengatur ApplicationIntent=ReadOnly, klien meminta beban kerja baca saat menyambungkan. Server memberlakukan niat pada waktu koneksi, dan selama USE pernyataan database.

Kata ApplicationIntent kunci tidak berfungsi dengan database baca-saja warisan.

Target ReadOnly

Saat koneksi memilih ReadOnly, koneksi ditetapkan ke salah satu konfigurasi khusus berikut yang mungkin ada untuk database:

  • Selalu Aktif. Database dapat mengizinkan atau melarang beban kerja baca pada database grup ketersediaan yang ditargetkan. Pilihan ini dikendalikan dengan menggunakan ALLOW_CONNECTIONS klausul PRIMARY_ROLE pernyataan dan SECONDARY_ROLE Transact-SQL.

  • Replikasi lokasi geografis

  • Peluasan skala

Jika tidak ada target khusus yang tersedia, database reguler akan dibaca.

Kata ApplicationIntent kunci memungkinkan perutean baca-saja.

Perutean baca-saja

Perutean baca-saja adalah fitur yang dapat memastikan ketersediaan replika database baca-saja. Untuk mengaktifkan perutean baca-saja, semua hal berikut ini berlaku:

  • Anda harus tersambung ke pendengar grup ketersediaan AlwaysOn.

  • Kata ApplicationIntent kunci string koneksi harus diatur ke ReadOnly.

  • Administrator database harus mengonfigurasi grup ketersediaan untuk mengaktifkan perutean baca-saja.

Beberapa koneksi yang masing-masing menggunakan perutean baca-saja mungkin tidak semuanya tersambung ke replika baca-saja yang sama. Perubahan sinkronisasi database atau perubahan konfigurasi perutean server dapat mengakibatkan koneksi klien ke replika baca-saja yang berbeda.

Anda dapat memastikan bahwa semua permintaan baca-saja tersambung ke replika baca-saja yang sama dengan tidak meneruskan pendengar grup ketersediaan ke Server kata kunci string koneksi. Sebagai gantinya, tentukan nama instans baca-saja.

Perutean baca-saja mungkin memakan waktu lebih lama daripada menyambungkan ke primer. Ini karena perutean baca-saja pertama kali terhubung ke primer, dan kemudian mencari sekunder terbaik yang dapat dibaca yang tersedia. Karena beberapa langkah ini, Anda harus meningkatkan batas waktu Anda login menjadi setidaknya 30 detik.

Pengumpulan koneksi

Saat menggunakan Driver Microsoft JDBC untuk SQL Server dalam kombinasi dengan pustaka kumpulan koneksi, Anda harus mempertimbangkan poin-poin berikut:

  • Jika Anda memiliki perutean baca-saja yang dikonfigurasi dan kumpulan server baca-saja yang ingin Anda distribusikan bebannya, pengumpulan koneksi akan mengurangi jumlah peluang bagi koneksi baru untuk tersebar di server target.
  • Untuk menghindari beban yang lebih tinggi pada server tunggal mana pun dalam kumpulan, pilih opsi kumpulan yang mendorong distribusi koneksi yang merata di seluruh kumpulan.
  • Pastikan kumpulan koneksi Anda dikonfigurasi dengan masa pakai koneksi. Jika replika baca-saja tidak tersedia ketika koneksi baca-saja dibuat, konfigurasi harus memastikan bahwa koneksi akhirnya ditutup dan dibuat kembali ke replika baca-saja ketika koneksi tersedia lagi.

Metode baru yang mendukung multiSubnetFailover dan applicationIntent

Metode berikut memberi Anda akses terprogram ke kata kunci string koneksi multiSubnetFailover, applicationIntent, dan transparentNetworkIPResolution :

getMultiSubnetFailover, metode setMultiSubnetFailover, getApplicationIntent, setApplicationIntent, getTransparentNetworkIPResolution, dan setTransparentNetworkIPResolution juga ditambahkan ke Kelas SQLServerDataSource, Kelas SQLServerConnectionPoolDataSource, dan Kelas SQLServerXADataSource.

Validasi sertifikat TLS/SSL

Grup ketersediaan terdiri dari beberapa server fisik. Microsoft JDBC Driver 4.0 untuk SQL Server menambahkan dukungan untuk Nama Alternatif Subjek dalam sertifikat TLS/SSL sehingga beberapa host dapat dikaitkan dengan sertifikat yang sama. Untuk informasi selengkapnya tentang TLS, lihat Memahami dukungan enkripsi.

Lihat juga

Menyambungkan ke SQL Server dengan driver JDBC
Mengatur properti koneksi