Pengalihan koneksi baca/tulis replika utama sekunder (Grup Ketersediaan AlwaysOn)

Berlaku untuk: SQL Server 2019 (15.x)

SQL Server 2019 (15.x) CTP 2.0 memperkenalkan pengalihan koneksi baca/tulis replika utama untuk Grup Ketersediaan AlwaysOn. Pengalihan koneksi baca/tulis tersedia di platform sistem operasi apa pun. Ini memungkinkan koneksi aplikasi klien 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 di string koneksi, koneksi dapat secara otomatis dialihkan ke replika utama.

Kasus penggunaan

Sebelum SQL Server 2019 (15.x), pendengar AG dan sumber daya kluster yang sesuai mengalihkan lalu lintas pengguna ke replika utama untuk memastikan koneksi ulang setelah failover. SQL Server 2019 (15.x) terus mendukung fungsionalitas pendengar AG dan menambahkan pengalihan koneksi replika untuk skenario yang tidak dapat menyertakan pendengar. Misalnya:

  • Teknologi kluster yang diintegrasikan grup ketersediaan SQL Server tidak menawarkan kemampuan seperti pendengar
  • Konfigurasi multi-subnet seperti di IP mengambang cloud atau multi-subnet dengan Pacemaker di mana konfigurasi menjadi kompleks, rentan terhadap kesalahan, dan sulit untuk memecahkan masalah karena beberapa komponen yang terlibat
  • Peluasan skala baca, atau pemulihan bencana dan jenis kluster adalah NONE, karena tidak ada mekanisme mudah untuk memastikan koneksi ulang transparan saat failover manual

Persyaratan

Agar replika sekunder dapat mengalihkan permintaan koneksi baca/tulis:

  • Replika sekunder harus online.
  • Spesifikasi replika PRIMARY_ROLE harus mencakup READ_WRITE_ROUTING_URL.
  • string koneksi harus ReadWrite dengan menentukan ApplicationIntent sebagai ReadWrite atau dengan tidak mengatur ApplicationIntent dan membiarkan default (ReadWrite) berlaku.

Mengatur opsi READ_WRITE_ROUTING_URL

Untuk mengonfigurasi pengalihan koneksi baca/tulis, atur READ_WRITE_ROUTING_URL untuk replika utama saat Anda membuat AG.

Di SQL Server 2019 (15.x), READ_WRITE_ROUTING_URL telah ditambahkan ke <add_replica_option> spesifikasi. Lihat topik berikut:

PRIMARY_ROLE(READ_WRITE_ROUTING_URL) tidak diatur (default)

Secara default, pengalihan koneksi replika baca/tulis tidak diatur untuk replika. Cara replika sekunder menangani permintaan koneksi tergantung pada apakah replika sekunder diatur atau tidak untuk mengizinkan koneksi dan pada ApplicationIntent pengaturan di string koneksi. Tabel berikut menunjukkan bagaimana replika sekunder menangani koneksi berdasarkan SECONDARY_ROLE (ALLOW CONNECTIONS = ) dan ApplicationIntent.

ApplicationIntent nilai SECONDARY_ROLE (ALLOW CONNECTIONS = NO) SECONDARY_ROLE (ALLOW CONNECTIONS = READ_ONLY) SECONDARY_ROLE (ALLOW CONNECTIONS = ALL)
ApplicationIntent=ReadWrite
Default
Koneksi gagal Koneksi gagal Koneksi berhasil
Pembacaan berhasil
Penulisan gagal
ApplicationIntent=ReadOnly Koneksi gagal Koneksi berhasil Koneksi berhasil

Tabel sebelumnya menunjukkan perilaku default, yang sama dengan versi SQL Server sebelum SQL Server 2019 (15.x).

set PRIMARY_ROLE(READ_WRITE_ROUTING_URL)

Setelah Anda mengatur pengalihan koneksi baca/tulis, cara replika menangani permintaan koneksi berperilaku berbeda. Perilaku koneksi masih bergantung pada SECONDARY_ROLE (ALLOW CONNECTIONS = ) pengaturan dan ApplicationIntent . Tabel berikut ini memperlihatkan bagaimana replika sekunder dengan READ_WRITE_ROUTING set menangani koneksi berdasarkan SECONDARY_ROLE (ALLOW CONNECTIONS = ) dan ApplicationIntent.

ApplicationIntent nilai SECONDARY_ROLE (ALLOW CONNECTIONS = NO) SECONDARY_ROLE (ALLOW CONNECTIONS = READ_ONLY) SECONDARY_ROLE (ALLOW CONNECTIONS = ALL)
ApplicationIntent=ReadWrite
Default
Koneksi gagal Koneksi gagal rute Koneksi ions ke primer
ApplicationIntent=ReadOnly Koneksi gagal Koneksi berhasil Koneksi berhasil

Tabel sebelumnya menunjukkan bahwa ketika replika utama telah READ_WRITE_ROUTING_URL diatur, replika sekunder akan mengalihkan koneksi ke replika utama saat SECONDARY_ROLE (ALLOW CONNECTIONS = ALL), dan koneksi menentukan ReadWrite.

Contoh

Dalam contoh ini, grup ketersediaan memiliki tiga replika:

  • Replika utama pada COMPUTER01
  • Replika sekunder sinkron pada COMPUTER02
  • Replika sekunder asinkron pada COMPUTER03

Gambar berikut mewakili grup ketersediaan.

Availability group with primary, secondary, and asynchronous secondary

Skrip Transact-SQL berikut membuat AG ini. Dalam contoh ini, Setiap replika menentukan READ_WRITE_ROUTING_URL.

CREATE AVAILABILITY GROUP MyAg   
     WITH ( CLUSTER_TYPE =  NONE )  
   FOR   
     DATABASE  [<Database1>]   
   REPLICA ON   
      'COMPUTER01' WITH   
         (  
         ENDPOINT_URL = 'TCP://COMPUTER01.<domain>.<tld>:5022',  
         AVAILABILITY_MODE = SYNCHRONOUS_COMMIT,  
         FAILOVER_MODE = MANUAL,  
         SECONDARY_ROLE (ALLOW_CONNECTIONS = ALL,   
            READ_ONLY_ROUTING_URL = 'TCP://COMPUTER01.<domain>.<tld>:1433' ),
         PRIMARY_ROLE (ALLOW_CONNECTIONS = READ_WRITE,   
            READ_ONLY_ROUTING_LIST = ('COMPUTER02', 'COMPUTER03'),
            READ_WRITE_ROUTING_URL = 'TCP://COMPUTER01.<domain>.<tld>:1433' ),   
         SESSION_TIMEOUT = 10  
         ),   
      'COMPUTER02' WITH   
         (  
         ENDPOINT_URL = 'TCP://COMPUTER02.<domain>.<tld>:5022',  
         AVAILABILITY_MODE = SYNCHRONOUS_COMMIT,  
         FAILOVER_MODE = MANUAL, 
         SECONDARY_ROLE (ALLOW_CONNECTIONS = ALL,   
            READ_ONLY_ROUTING_URL = 'TCP://COMPUTER02.<domain>.<tld>:1433' ),  
         PRIMARY_ROLE (ALLOW_CONNECTIONS = READ_WRITE,   
            READ_ONLY_ROUTING_LIST = ('COMPUTER01', 'COMPUTER03'),  
            READ_WRITE_ROUTING_URL = 'TCP://COMPUTER02.<domain>.<tld>:1433' ),
         SESSION_TIMEOUT = 10  
         ),   
      'COMPUTER03' WITH   
         (  
         ENDPOINT_URL = 'TCP://COMPUTER03.<domain>.<tld>:5022',  
         AVAILABILITY_MODE = ASYNCHRONOUS_COMMIT,  
         FAILOVER_MODE = MANUAL,  
         SECONDARY_ROLE (ALLOW_CONNECTIONS = ALL,   
            READ_ONLY_ROUTING_URL = 'TCP://COMPUTER03.<domain>.<tld>:1433' ),  
         PRIMARY_ROLE (ALLOW_CONNECTIONS = READ_WRITE,   
            READ_ONLY_ROUTING_LIST = ('COMPUTER01', 'COMPUTER02'),  
            READ_WRITE_ROUTING_URL = 'TCP://COMPUTER03.<domain>.<tld>:1433' ),
         SESSION_TIMEOUT = 10  
         );
GO  
  • <domain>.<tld>
    • Domain dan domain tingkat atas dari nama domain yang sepenuhnya memenuhi syarat. Contohnya, corporation.com.

perilaku Koneksi ion

Dalam diagram berikut, aplikasi klien terhubung ke COMPUTER02, dengan ApplicationIntent=ReadWrite. Koneksi dialihkan ke replika utama.

Connection to computer 2 is re-directed to the primary replica

Replika sekunder mengalihkan panggilan baca/tulis ke replika utama. Koneksi tulis baca ke salah satu replika akan dialihkan ke replika utama.

Dalam diagram berikut, replika utama telah di-failover secara manual ke COMPUTER02. Aplikasi klien terhubung ke COMPUTER01, dengan ApplicationIntent=ReadWrite. Koneksi dialihkan ke replika utama.

Connection redirected to new primary replica on computer2

Lihat Juga

Gambaran Umum Grup Ketersediaan AlwaysOn (SQL Server)

Tentang Akses Koneksi Klien ke Replika Ketersediaan (SQL Server)

Listener Grup Ketersediaan, Konektivitas Klien, dan Kegagalan Aplikasi (SQL Server)