SQL Server 2016 Availability Groups Direct Seeding

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;

seed1

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.

seed2

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.

Bir Cevap Yazın

Aşağıya bilgilerinizi girin veya oturum açmak için bir simgeye tıklayın:

WordPress.com Logosu

WordPress.com hesabınızı kullanarak yorum yapıyorsunuz. Çıkış  Yap /  Değiştir )

Twitter resmi

Twitter hesabınızı kullanarak yorum yapıyorsunuz. Çıkış  Yap /  Değiştir )

Facebook fotoğrafı

Facebook hesabınızı kullanarak yorum yapıyorsunuz. Çıkış  Yap /  Değiştir )

Connecting to %s