Grup Always On Availability, Selalu mengarahkan pengguna untuk hanya membaca contoh

9

Kami memiliki grup ketersediaan Selalu Aktif dengan primer dan sekunder yang aktif untuk dibaca. Kami memiliki pengguna untuk tim implementasi yang menggunakan database untuk memeriksa kebenaran data yang ingin mereka masukkan ke dalam database.

Pengguna hanya memiliki hak untuk membaca dari database tetapi ketika mereka terhubung (melalui SSMS) melalui AG Listener mereka selalu terhubung ke node aktif.

Saya sudah mencoba untuk membuat mereka mengakses contoh read only secara langsung tetapi mereka terjebak dalam cara mereka dan setelah satu atau dua hari mereka semua kembali pada node aktif lagi.

Apakah ada cara bagi SQL Server untuk mengatakan bahwa pengguna ini akan selalu dengan maksud membaca saja dan mengarahkan mereka ke sana?

CATATAN: Saya sudah mencoba pengaturan 'ApplicationIntent = ReadOnly' di parameter koneksi tambahan tetapi ini sepertinya tidak mengarahkan ke node sekunder, dan bukan solusi yang ideal karena mereka pasti akan lupa untuk mengaturnya untuk pemula baru.

SQL Server 2012 Enterprise, grup Ketersediaan 1 primer, 1 sekunder terbaca dengan komit sinkron.

Saya tidak bermaksud agar pengguna terhubung ke server yang ditautkan, atau melalui server lain. Para pengguna terhubung langsung ke database melalui SSMS (tidak ada aplikasi lain) dan saya ingin AG Listener (atau sesuatu di sekitar sana) untuk dapat mengarahkan pengguna itu ke simpul sekunder jika tersedia (karena hanya memiliki akses baca di sana) tidak ada gunanya mengakses primer) tanpa pengguna harus melakukan apa pun, karena mereka bergerak di sekitar mesin dan akan lupa untuk menambahkan maksud aplikasi. Saya juga menemukan bahwa menambahkan ke parameter koneksi tambahan tidak selalu mengarahkan Anda ke node sekunder.

Ste Bov
sumber
selain komentar di bawah ini, Anda perlu menentukan basis data di AG yang Anda hubungkan.
swasheck

Jawaban:

4

Saya tidak punya jawaban untuk seluruh pertanyaan Anda (meskipun saya memberikan jawaban untuk pertanyaan serupa hari ini https://dba.stackexchange.com/a/137844/36812 ) tetapi Anda menyebutkan bahwa menggunakan ApplicationIntent = ReadOnly tidak berfungsi tepat.

Sudahkah Anda menyiapkan URL perutean hanya baca? Karena itu tidak dilakukan di luar kotak dan jika Anda tidak melakukannya maka pengaturan ini dan bendera itu tidak akan berfungsi. Saya pikir jika Anda berhasil maka Anda dapat mulai mengevaluasi kembali persyaratan Anda.

Petunjuk tentang MSDN https://msdn.microsoft.com/en-us/library/hh710054.aspx dan paling mudah dilakukan di PowerShell.

Set-Location SQLSERVER:\SQL\PrimaryServer\default\AvailabilityGroups\MyAg
$primaryReplica = Get-Item "AvailabilityReplicas\PrimaryServer"
$secondaryReplica = Get-Item "AvailabilityReplicas\SecondaryServer"

Set-SqlAvailabilityReplica -ReadOnlyRoutingConnectionUrl "TCP://PrimaryServer.domain.com:1433" -InputObject $primaryReplica
Set-SqlAvailabilityReplica -ReadOnlyRoutingConnectionUrl "TCP://SecondaryServer.domain.com:1433" -InputObject $secondaryReplica
Set-SqlAvailabilityReplica -ReadOnlyRoutingList "SecondaryServer","PrimaryServer" -InputObject $primaryReplica
Cody Konior
sumber
1

Ste, yang Anda inginkan adalah solusi titik dan klik atau pengaturan di suatu tempat. Sayangnya, tidak satu pun dari ini saat ini ada dalam bentuk "off the shelf". Akan sangat bagus jika Microsoft memasukkan ini dalam pengaturan koneksi untuk Server Terdaftar sehingga bisa disimpan, tetapi sayangnya mereka tidak.

Ini memberi Anda satu dari dua opsi:

  • Tulis Sesuatu Sendiri
  • Ubah Perilaku Pengguna

Saya menemukan Microsoft unduhan untuk SNAC - SQL Native Access Client, mencari sesuatu yang mungkin memenuhi kebutuhan Anda. Ini akan memungkinkan Anda untuk menulis sedikit kode untuk memberi pengguna tombol untuk mengakses langsung ke sekunder Read-Only. https://blogs.msdn.microsoft.com/alwaysonpro/2013/08/02/connect-to-sql-server-using-application-intent-read-only/

Kemungkinan lainnya adalah memaksa pengguna untuk mengisi dialog parameter koneksi saat terhubung melalui SSMS. Untuk memaksakan perilaku ini, Anda harus memodifikasi login di server primer dan sekunder, menolak menyambungkan ke primer dan memungkinkan koneksi ke sekunder. Anda dapat menggunakan pekerjaan SQL Agent untuk memeriksa status server dan mengatur login yang sesuai.

Memang, saya belum mencoba melakukan yang terakhir, tetapi secara teori itu harus berhasil.

Steve Mangiameli
sumber
-2

Sepertinya ini sekarang fitur di SQL Server 2019.

Dari pengalihan koneksi baca / tulis replika Sekunder ke primer (Grup Selalu Ada Ketersediaan) dalam dokumentasi resmi:

SQL Server 2019 pratinjau CTP 2.0 memperkenalkan pengalihan koneksi baca / tulis replika sekunder ke utama untuk Grup Ketersediaan Selalu Aktif. Pengalihan koneksi baca / tulis tersedia di semua platform sistem operasi. Ini memungkinkan koneksi aplikasi klien untuk diarahkan ke replika utama terlepas dari server target yang ditentukan dalam string koneksi.

Misalnya, string koneksi dapat menargetkan replika sekunder. Bergantung pada konfigurasi replika grup ketersediaan (AG) dan pengaturan dalam string koneksi, koneksi dapat secara otomatis dialihkan ke replika utama.

Mat
sumber
Saya tidak yakin dapat melihat bagaimana fitur baru ini relevan di sini. Skenario OP tampaknya berbeda dari yang dimaksudkan oleh fitur ini. OP ingin mengalihkan koneksi read-only ke node sekunder (read-only), sementara dokumentasi untuk fitur baru ini mengatakan bahwa itu untuk mengarahkan koneksi read / write ke node primer. Bisakah Anda jelaskan bagaimana fungsionalitas baru dapat digunakan untuk menyelesaikan masalah yang dimaksud?
Andriy M