Database
 sql >> Teknologi Basis Data >  >> RDS >> Database

Perutean Hanya-Baca untuk Selalu Aktif

Sebagai DBA, kami biasanya menemukan klien kami mengeluh bahwa Server Produksi saat ini tidak dapat menahan beban di server dan apakah beban dapat diseimbangkan dengan Server Sekunder. Ini dimungkinkan dengan database di DR Server dengan database baca-saja di Pengiriman Log dan replika SQL Server Sekunder di Always On Availability Group. Keuntungan terbesar dari Always On Groups adalah memungkinkan kita untuk mengatur HA tingkat grup untuk sejumlah database dan kita dapat membuat hingga empat replika sekunder dan ini adalah kombinasi dari Clustering, Log Shipping, dan Database Mirroring di mana transmisi data dilakukan. lebih fleksibel dan fungsional.

Always On Readable Secondary Replica memiliki fitur untuk menangani permintaan koneksi read-only tertentu yang disebut Read-only routing. Umumnya, secara default, read dan read-intent diarahkan ke replika Primer dan tidak ada yang ditujukan untuk replika sekunder. Sekarang, replika sekunder tidak hanya dapat digunakan untuk Pencadangan, DBCC, dan tujuan pelaporan, tetapi juga dapat ditanyakan di masa mendatang dengan menggunakan 'Hanya Baca' sebagai Maksud Aplikasinya dalam string koneksi aplikasi.

Kami memiliki tiga replika SQL1, SQL2 dan SQL3 di kluster failover Windows. Setiap node memiliki instans SQL Server 2012 mandiri yang diinstal dan dikonfigurasi dengan Always On AG. Kami selalu berada di AG Group bernama “CODEAG” dengan nama pendengar “CODELIS”

Pada tangkapan layar berikut, SQL1 adalah replika utama, SQL2 adalah replika sekunder, SQL3 adalah replika sekunder.

Cara Mengonfigurasi Daftar perutean baca-saja di grup ketersediaan selalu aktif

Langkah1:

Koneksi dibuat ke Grup Ketersediaan menggunakan nama Pendengar atau IP. Sekarang, untuk membuat beberapa pendengar untuk satu grup ketersediaan, ikuti prosedur di bawah ini.

Untuk membuat atau mengonfigurasi pendengar secara manual untuk grup ketersediaan

  1. Di bawah Object Explorer, sambungkan ke instance yang menyimpan replika utama grup ketersediaan.
  2. Perluas Grup AON dan klik Grup Ketersediaan yang kami coba konfigurasikan secara manual pendengar dan lanjutkan.
  3. Klik kanan Availability Group Listeners Node dan pilih New Listener Command. Ini akan membuka kotak dialog baru untuk mengonfigurasi pendengar.
  4. Nomor Port pendengar yang ada dapat diubah dengan memperluas Node Pendengar Grup Ketersediaan diikuti dengan mengklik kanan pendengar dan memilih properti.
  5. Sekarang, masukkan Nomor Port baru dan klik OK.

Identifikasi nama pendengar yang dikonfigurasi untuk replikasi Always On dengan menanyakan DMV seperti di bawah ini.

PILIH AV.name AS AVGName, AVGLis.dns_name AS ListenerName, AVGLis.ip_configuration_string_from_cluster AS ListenerIPFROM sys.availability_group_listeners AVGLisINNER GABUNG sys.availability_groups AV di AV.group_id =preAV>. 

Pada tangkapan layar berikut, nama grup AG adalah CODEAG dan IP pendengar AG adalah CODELIS.

Langkah 2:

Untuk mengonfigurasi perutean hanya-baca, kita perlu mengonfigurasi replika menjadi hanya-baca untuk mengizinkan koneksi baca-saja ke replika sekunder.

  1. Hubungkan ke instance yang menyimpan replika Utama.
  2. Perluas AON High Availability Node, lalu AG Group Node.
  3. Klik Grup AG yang replikanya harus diubah.
  4. Klik kanan replika dan pilih properti untuk mengubah akses koneksi untuk peran Utama dan Sekunder sebagai berikut.

Peran Sekunder memiliki nilai baru dari daftar drop sekunder yang dapat dibaca.

Hanya Maksud Baca

Opsi ini memungkinkan akses membaca database sekunder replika ini. Hanya koneksi baca-saja yang diperbolehkan.

Ya

Opsi ini memungkinkan akses baca saja tetapi semua koneksi diizinkan untuk replika sekunder.

Tidak

Ini menghentikan semua koneksi pengguna ke replika sekunder dan bahkan tidak mengizinkan Anda untuk membaca.

Setel properti sekunder yang dapat dibaca ke Hanya niat baca.

Pada tangkapan layar berikut, properti Sekunder yang Dapat Dibaca dari setiap replika sekunder disetel ke Hanya niat baca.

Langkah 3:

Setiap replika sekunder yang dapat dibaca dapat diberi URL perutean hanya-baca yang akan digunakan untuk merutekan permintaan koneksi maksud-baca ke replika sekunder tertentu yang dapat dibaca.

Gunakan T-SQL untuk menentukan URL perutean hanya-baca untuk semua replika di Grup Ketersediaan kami.

ALTER AVAILABILITY GROUP [CODEAG]MODIFY REPLICA ONN'SQL1' WITH(SECONDARY_ROLE (ALLOW_CONNECTIONS =READ_ONLY));ALTER AVAILABILITY GROUP [CODEAG]MODIFY REPLICA ONN'SQL1' WITH(SECONDARY_ONLY_ROLE =N'TCP_ONLY_ROLE (SECONDARY_ONLY_ROLE) .abc.com:17999'));ALTER AVAILABILITY GROUP [CODEAG]MODIFY REPLICA ONN'SQL2' WITH(SECONDARY_ROLE (ALLOW_CONNECTIONS =READ_ONLY));ALTER AVAILABILITY GROUP [CODEAG]MODIFY REPLICA ONN'SQL2' WITH(LE_READOUTDARY_URL =SECRON'SQL2' WITH N'TCP://SQL2.abc.com:17999'));ALTER AVAILABILITY GROUP [CODEAG]MODIFY REPLICA ONN'SQL3' WITH(SECONDARY_ROLE (ALLOW_CONNECTIONS =READ_ONLY));ALTER AVAILABILITY GROUP [CODEAG]MODIFY REPLICA ONN'SQL3 ' WITH(SECONDARY_ROLE (READ_ONLY_ROUTING_URL =N'TCP://SQL3.abc.com:17999'));

Langkah 4:

Untuk replika yang kami tandai sebagai perutean hanya-baca ketika itu adalah replika utama, ada kebutuhan untuk menentukan daftar perutean hanya-baca dan ini hanya berlaku ketika replika lokal berjalan di bawah peran utama.

ALTER AVAILABILITY GROUP [CODEAG]MODIFY REPLICA ONN'SQL1' WITH(PRIMARY_ROLE (READ_ONLY_ROUTING_LIST=('SQL2','SQL3'))));ALTER AVAILABILITY GROUP [CODEAG]MODIFY REPLICA ONN'SQL3_ROUP(REAMARY_ONLE_ROUT'SQL3' =('SQL2','SQL1')));ALTER AVAILABILITY GROUP [CODEAG]MODIFY REPLICA ONN'SQL2' WITH(PRIMARY_ROLE (READ_ONLY_ROUTING_LIST=('SQL3','SQL1')));

Dalam skrip di atas, contoh ketika SQL1 adalah replika utama, beban kerja read-intent saja akan dialihkan ke replika sekunder yang dapat dibaca; SQL2 dan SQL3 masing-masing:sama, jika SQL3 adalah replika utama, beban kerja read-intent saja akan dialihkan ke replika sekunder yang dapat dibaca; SQL2 dan SQL1 masing-masing.

Lalu lintas yang diarahkan hanya baca akan dirutekan ke replika pertama yang tersedia hingga dan kecuali jika tidak dapat diakses, lalu lintas akan mengarahkan lalu lintas ke replika berikutnya yang tersedia dalam daftar perutean. Bila Anda memiliki lebih dari satu replika, tidak mungkin untuk berbagi beban antara replika hingga SQL Server 2012 dan 2014. Namun, SQL server 2016 memungkinkan Anda untuk menyeimbangkan beban antara replika baca-saja.

Contoh:

ALTER AVAILABILITY GROUP [CODEAG]MODIFY REPLICA ONN'SQL2' WITH(PRIMARY_ROLE (READ_ONLY_ROUTING_LIST=(('SQL3','SQL1'), 'SQL2')));

Perilaku daftar perutean ini 'memuat keseimbangan' koneksi baca-saja antara SQL3 dan SQL1. Di atas, kami memiliki dua daftar yang disematkan dalam daftar perutean:

Daftar 1:'SQL3', 'SQL1'

Daftar 2:'SQL2'

Rutekan ke replika di daftar pertama. SQL3 dan SQL1 dapat diakses oleh koneksi read-only. Koneksi read-only pertama yang masuk akan dirutekan ke SQL3, koneksi read-only kedua akan dirutekan ke SQL1, koneksi read-only ketiga akan dirutekan ke SQL3, koneksi read-only keempat akan dirutekan ke SQL1, dan seterusnya, dengan distribusi 'round-robin' dari koneksi read-only antara dua replika di daftar pertama.

Jika ada replika yang tidak tersedia, perutean akan dilanjutkan dengan replika yang tersisa di daftar pertama. Jika SQL3 atau SQL1 menjadi tidak dapat diakses ke koneksi baca-saja, maka koneksi baca-saja hanya akan dirutekan ke replika baca-saja yang dapat diakses di daftar pertama. Misalnya, jika SQL3 dalam status tidak disinkronkan atau ALLOW_CONNECTIONS diatur ke NO, maka semua koneksi baca-saja akan dirutekan ke SQL1. Selama salah satu server tersedia untuk koneksi read-only, NO koneksi read-only akan dirutekan ke SQL2.

Jika semua replika dalam daftar pertama tidak dapat diakses, rute ke replika di daftar berikutnya. Jika SQL3 dan SQL1 menjadi tidak dapat diakses oleh koneksi read-only, maka semua koneksi read-only hanya akan dirutekan ke daftar replika berikutnya, yang dalam hal ini adalah SQL2.

Lanjutkan perutean ke daftar pertama jika ada replika yang tersedia. Karena replika sekunder yang memiliki prioritas lebih tinggi dalam daftar menjadi dapat diakses oleh koneksi hanya-baca, koneksi hanya-baca di masa mendatang akan terhubung ke sana sebagaimana mestinya.

Di SQL Server 2016, Anda dapat mengonfigurasi load-balancing di seluruh kumpulan replika hanya-baca.

Langkah 5:

sys.availability_read_only_routing_lists DMV, yang mengembalikan daftar perutean hanya-baca dari setiap replika Grup Ketersediaan di Grup Ketersediaan Selalu.

SELECT AVGSrc.replica_server_name AS SourceReplica , AVGRepl.replica_server_name AS ReadOnlyReplica, AVGRepl.read_only_routing_url AS RoutingURL, AVGRL.routing_priority AS RoutingPriorityFROM sys.availability_read_only_routing_lists AVGRLINNER JOIN sys.availability_replicas AVGSrc ON AVGRL.replica_id =AVGSrc.replica_idINNER JOIN sys.availability_replicas AVGRepl ON AVGRL.read_only_replica_id =AVGRepl.replica_idINNER GABUNG sys.availability_groups AV PADA AV.group_id =AVGSrc.group_idORDER OLEH SourceReplica

Pada tangkapan layar berikut, hasilnya menunjukkan URL perutean dan prioritas perutean.

Langkah 6:

Untuk menguji perutean baca-saja menggunakan SQLCMD, gunakan parameter –K ReadOnly yang menunjukkan replika sekunder menerima koneksi baca sesuai daftar perutean.

Pada tangkapan layar berikut, replika sekunder menerima koneksi baca yaitu… SQL2.

Langkah 7:

Gagalkan grup ketersediaan dan uji perutean hanya-baca.

  1. Di Object Explorer, sambungkan ke instance server yang menghosting replika sekunder grup ketersediaan yang perlu digagalkan. Perluas struktur server.
  2. Perluas node AlwaysOn High Availability dan node Availability Groups.
  3. Klik kanan grup ketersediaan yang akan digagalkan, lalu pilih Failover.

Sekarang, SQL2 menjadi replika utama dan koneksi ditangani oleh SQL1.

Sintaks String Koneksi yang harus digunakan aplikasi akan bergantung pada Penyedia SQL Server.

Jika .Net Framework Data Provider 4.0.2 untuk SQL Server, sintaksnya adalah sebagai berikut:

Server=tcp:MyAgListener,portnumber;Database=SQL1;IntegratedSecurity=SSPI;ApplicationIntent=ReadOnly;MultiSubnetFailover=True

Kesimpulan:

Untuk mengurangi beban kerja, perutean Baca-saja ini tetap menjadi pilihan terbaik. Aplikasi yang melibatkan Layanan Pelaporan SQL Server yang dihosting di SharePoint atau penginstalan Mode Asli Report Server dapat menggunakan maksud Baca-saja yang menghindari pemblokiran biasa, Penggunaan Memori dan CPU pada Node Utama.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Game MMO dan Desain Basis Data

  2. Operator SQL IN untuk Pemula

  3. Operator SQL NOT untuk Pemula

  4. Memahami peran arsitek data dalam tata kelola data

  5. Meminimalkan dampak DBCC CHECKDB :DO dan DONT