Always On Secondary Sunucudan Read Yapmak

Always On Mimarisinde Secondary Sunucudan Read yapılabiliyor. Peki bunu uygulamalarınızda nasıl kullanabilirsiniz. Bu makalede bu konunun detaylarını inceliyor olacağız.

Örneğin SQLNODE01\INSTANCE01 ve SQLNODE02\INSTANCE01 şeklinde iki node’unuz olsun. Ve bu iki node arasında AG1 isimli bir ag tanımlanmış olsun. Primary Instance’ımız SQLNODE01\INSTANCE01 olsun.  AG1 port olarak 1435’i kullanıyor olsun. Aşağıdaki script yardımıyla bu işlemi gerçekleştirebilirsiniz.

“SQLNODE01.mydomain.com” yazan yere cmd komut satırını açıp “ping SQLNODE01” yazdığınızda ne geliyorsa onu yazmalısınız.

use master
go
ALTER AVAILABILITY GROUP [AG1]

 MODIFY REPLICA ON

N'SQLNODE01\INSTANCE01' WITH

(SECONDARY_ROLE (ALLOW_CONNECTIONS = READ_ONLY));

ALTER AVAILABILITY GROUP [AG1]

 MODIFY REPLICA ON

N'SQLNODE01\INSTANCE01' WITH


(SECONDARY_ROLE (READ_ONLY_ROUTING_URL = N'TCP://SQLNODE01.mydomain.com:1435'));
ALTER AVAILABILITY GROUP [AG1]

 MODIFY REPLICA ON

N'SQLNODE02\INSTANCE01' WITH

(SECONDARY_ROLE (ALLOW_CONNECTIONS = READ_ONLY));

ALTER AVAILABILITY GROUP [AG1]

 MODIFY REPLICA ON

N'SQLNODE02\INSTANCE01' WITH

(SECONDARY_ROLE (READ_ONLY_ROUTING_URL = N'TCP://SQLNODE02.mydomain.com:1435'));
ALTER AVAILABILITY GROUP [AG1]

MODIFY REPLICA ON

N'SQLNODE01\INSTANCE01' WITH

(PRIMARY_ROLE (READ_ONLY_ROUTING_LIST=('SQLNODE02\INSTANCE01')));

ALTER AVAILABILITY GROUP [AG1]

MODIFY REPLICA ON

N'SQLNODE02\INSTANCE01' WITH

(PRIMARY_ROLE (READ_ONLY_ROUTING_LIST=('SQLNODE01\INSTANCE01')));

Yukarıdaki script ile read intent seçeneğini aktif hale getirip route işlemlerini yaptık.

 

Eğer uygulama bazı noktalarda secondary sunucudan read yapacaksa veritabanına bağlanmak için, sadece read yapacak sorguların kullanacağı connection string’in sonuna “ApplicationIntent=ReadOnly” ifadesini eklemelisiniz. Eğer SSMS üzerinden bağlanacaksa öncelikle Options’a tıklayarak Connect To Database kısmına erişeceğiniz veritabanı ismini, Additional Connection Parameters kısmına da “ApplicationIntent=ReadOnly” ifadesini eklemelisiniz. Bu şekilde secondary sunucu o anda hangi node ise read only connetion lar oraya yönlenecektir. Bu şekilde select yükünü dağıtabilir ya da rapor sorgularınızı secondary sunucunuza yönlendirebilirsiniz.

 

Eğer birden fazla replika varsa, Select’ler uygun olan ilk read only replikaya gidiyordu. SQL Server 2016 ile beraber read işlemi secondary sunuculara load balancing mantığında dağıtılarak yapılabilir. Aşağıdaki şekilde konfigüre edebilirsiniz.

 

ALTER AVAILABILITY GROUP [AG1] MODIFY REPLICA ON N'SQLNODE01\INSTANCE01' 
WITH (PRIMARY_ROLE (READ_ONLY_ROUTING_LIST=('SQLNODE01\INSTANCE01','SQLNODE02\INSTANCE01')));

ALTER AVAILABILITY GROUP [AG1] MODIFY REPLICA ON N'SQLNODE02\INSTANCE01' 
WITH (PRIMARY_ROLE (READ_ONLY_ROUTING_LIST=('SQLNODE01\INSTANCE01','SQLNODE02\INSTANCE01')));

 

Loading

Leave Your Comment