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. Contohnya:
- 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 mencakupREAD_WRITE_ROUTING_URL
. - string koneksi harus
ReadWrite
dengan menentukanApplicationIntent
sebagaiReadWrite
atau dengan tidak mengaturApplicationIntent
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 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.
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
.
- Domain dan domain tingkat atas dari nama domain yang sepenuhnya memenuhi syarat. Contohnya,
Perilaku koneksi
Dalam diagram berikut, aplikasi klien terhubung ke COMPUTER02, dengan ApplicationIntent=ReadWrite
. Koneksi dialihkan ke replika utama.
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.
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)