Merhaba,
SQL Server 2012 ile birlikte hayatımıza AlwaysOn teknolojisi girmişti. Bu teknoloji ile HA/DR çözümlerinde önemli adımlar atılmış oldu.
En az 2 node ile kurulan yapıda veritabanlarını full ve log backup – restore ile dağıtmamız gerekiyordu.
SQL Server 2016 ile bu mimariye “direct seeding” isminde bir özellik geldi. Bu özellik sayesinde availability group içine dahil ettiğimiz bir veritabanı diğer tüm nodelara network üzerinden otomatik olarak restore ediliyor*.
* Tüm nodeların disk harf ve klasör yapısının aynı olması gerekiyor.
SQL Server Management Studio 2016 üzerinde bu özelliği GUI üzerinden yapamıyoruz.
Bunun için T-SQL kullanmamız gerekiyor.
Yeni bir AG kurulumunda veya mevcut yapınızda “direct seeding” özelliğini kullanmanız için gereken scripti aşağıda paylaşıyorum.
Yeni AG oluştururken;
/******************************************* -- EXECUTE IN SQLCMD MODE -- REPLACE NODE1, NODE2, NODE1.domain.com, NODE2.domain.com ******************************************/ :connect NODE1 USE [master] GO IF NOT EXISTS(SELECT * FROM sys.tcp_endpoints WHERE name = 'Hadr_endpoint') BEGIN CREATE ENDPOINT [Hadr_endpoint] STATE=STARTED AS TCP (LISTENER_PORT = 5022, LISTENER_IP = ALL) FOR DATA_MIRRORING (ROLE = ALL, AUTHENTICATION = WINDOWS NEGOTIATE , ENCRYPTION = REQUIRED ALGORITHM AES) END GO :connect NODE2 USE [master] GO IF NOT EXISTS(SELECT * FROM sys.tcp_endpoints WHERE name = 'Hadr_endpoint') BEGIN CREATE ENDPOINT [Hadr_endpoint] STATE=STARTED AS TCP (LISTENER_PORT = 5022, LISTENER_IP = ALL) FOR DATA_MIRRORING (ROLE = ALL, AUTHENTICATION = WINDOWS NEGOTIATE , ENCRYPTION = REQUIRED ALGORITHM AES) END GO :connect NODE1 CREATE AVAILABILITY GROUP AG1 FOR REPLICA ON N'NODE1' WITH (ENDPOINT_URL = N'TCP://NODE1.domain.com:5022', FAILOVER_MODE = MANUAL, AVAILABILITY_MODE = ASYNCHRONOUS_COMMIT, BACKUP_PRIORITY = 50, SECONDARY_ROLE(ALLOW_CONNECTIONS = ALL), SEEDING_MODE = AUTOMATIC) , N'NODE2' WITH (ENDPOINT_URL = N'TCP://NODE2.domain.com:5022', FAILOVER_MODE = MANUAL, AVAILABILITY_MODE = ASYNCHRONOUS_COMMIT, BACKUP_PRIORITY = 50, SECONDARY_ROLE(ALLOW_CONNECTIONS = ALL), SEEDING_MODE = AUTOMATIC); GO ALTER AVAILABILITY GROUP [AG1] GRANT CREATE ANY DATABASE GO :connect NODE2 ALTER AVAILABILITY GROUP [AG1] JOIN GO ALTER AVAILABILITY GROUP [AG1] GRANT CREATE ANY DATABASE GO
Direct seeding özelliğinin açıldığını teyit etmek için sys.availability_replicas viewı kullanılabilir.
SELECT AVGrp.name as group_name, AVGRep.replica_server_name as replica_name, AVGRep.endpoint_url, AVGRep.availability_mode_desc, AVGRep.failover_mode_desc, AVGRep.seeding_mode_desc as seeding_mode FROM sys.availability_replicas as AVGRep JOIN sys.availability_groups as AVGrp ON AVGRep.group_id = AVGrp.group_id;
Halihazırda kurulu olan yapınızda “direct seeding” özelliğini açmak için de aşağıdaki scripti kullanabilirsiniz.
ALTER AVAILABILITY GROUP [<availability_group_name>] MODIFY REPLICA ON '<primary_node>' WITH (SEEDING_MODE = AUTOMATIC) GO
Direct seeding’i monitor etmek için;
select start_time ,completion_time , current_state ,performed_seeding , failure_state_desc,error_code , number_of_attempts from sys.dm_hadr_automatic_seeding
Test için bir veritabanı yaratalım ve bunu AG içine dahil edelim;
use master; create database DirectSeedTest alter database DirectSeedTest set recovery full; backup database DirectSeedTest to disk='C:\Backup\DirectSeedTest.bak' with no_checksum, compression; backup log DirectSeedTest to disk='C:\Backup\DirectSeedTest.trn' with no_checksum, compression; go alter availability group [AG1] add database DirectSeedTest; go
Gruba dahil ettiğim an 2. node üzerinde veritabanı restore edilmeye başladı ve ardından sync moda geçti.
Siz de kendi demo ortamınızda test ettikten sonra bu özelliği kullanabilirsiniz.
Büyük veritabanlarında bu durum network ve storage katmanlarında yüke sebep olacağından bu tarz işlemleri network ve sistem yöneticisi arkadaşlarla yapmanızı tavsiye ederim.
Aklınıza takılan her türlü soru için yorum bırakabilirsiniz.
Teşekkürler.