DBAtlas · Veritabanı operasyon atlası

SQL Server Always On Availability Group kurulumu

Belirti

Amaç: SQL Server için Always On Availability Group (AG) ile otomatik failover ve okunabilir secondary replika kur.

1. Windows Server Failover Cluster (WSFC) kur

Always On, altta bir WSFC'ye dayanır. Tüm düğümlerde Failover Clustering rolü kurulur, ağ ve tanık (witness) yapılandırılır. PowerShell ile cluster oluşturulur.

SQL Server

-- PowerShell (her düğümde Failover-Clustering özelliği kurulu olmalı):
New-Cluster -Name sqlclu -Node node1,node2 -StaticAddress 10.0.0.50
-- Tanık:
Set-ClusterQuorum -NodeAndFileShareMajority \\fs01\quorum

2. Her instance'ta Always On'u etkinleştir

SQL Server Configuration Manager veya PowerShell ile Always On Availability Groups özelliği açılır. Ardından SQL Server servisi yeniden başlatılır. Bu, cluster üyeliğini instance'a bağlar.

SQL Server

-- PowerShell:
Enable-SqlAlwaysOn -ServerInstance node1\SQL01 -Force
Enable-SqlAlwaysOn -ServerInstance node2\SQL01 -Force

3. Veritabanını yedekle ve secondary düğüme NORECOVERY ile geri yükle

AG'ye alınacak veritabanı FULL recovery modunda olmalı. Primary'de tam ve log yedeği alınır; secondary düğümde NORECOVERY ile geri yüklenir (böylece redo almaya devam eder). Bu manuel seeding yöntemidir; alternatif otomatik seeding'dir.

SQL Server

-- Primary'de:
BACKUP DATABASE app TO DISK='\\fs01\bak\app.bak';
BACKUP LOG app TO DISK='\\fs01\bak\app.trn';
-- Secondary'de:
RESTORE DATABASE app FROM DISK='\\fs01\bak\app.bak' WITH NORECOVERY;
RESTORE LOG app FROM DISK='\\fs01\bak\app.trn' WITH NORECOVERY;

4. Uç noktaları oluştur ve Availability Group'u tanımla

Düğümler arası redo trafiği için 5022 portunda HADR endpoint kurulur. Senkron mod (SYNCHRONOUS_COMMIT) veri kaybı sıfır otomatik failover sağlar; asenkron (ASYNCHRONOUS_COMMIT) uzak DR için gecikmeli ama performanslıdır.

SQL Server

CREATE ENDPOINT hadr_endpoint STATE=STARTED
  AS TCP (LISTENER_PORT=5022)
  FOR DATA_MIRRORING (ROLE=ALL, ENCRYPTION=REQUIRED ALGORITHM AES);

CREATE AVAILABILITY GROUP appag
  FOR DATABASE app
  REPLICA ON
    'NODE1\SQL01' WITH (ENDPOINT_URL='TCP://node1:5022', AVAILABILITY_MODE=SYNCHRONOUS_COMMIT, FAILOVER_MODE=AUTOMATIC, SECONDARY_ROLE(ALLOW_CONNECTIONS=ALL)),
    'NODE2\SQL01' WITH (ENDPOINT_URL='TCP://node2:5022', AVAILABILITY_MODE=SYNCHRONOUS_COMMIT, FAILOVER_MODE=AUTOMATIC, SECONDARY_ROLE(ALLOW_CONNECTIONS=ALL));

5. Secondary düğümü AG'ye katıp veritabanını birleştir

Secondary instance'ta AG'ye JOIN yapılır, sonra geri yüklenen veritabanı AG'ye eklenir. Manuel seeding kullanıldıysa bu adım gerekir; otomatik seeding'de primary tarafında SET(SEEDING_MODE) ile hallolur.

SQL Server

-- Secondary'de:
ALTER AVAILABILITY GROUP appag JOIN;
ALTER DATABASE app SET HADR AVAILABILITY GROUP = appag;

6. Availability Group Listener oluştur

Listener, uygulamaların bağlandığı sanal ad ve IP'dir; failover sonrası bağlantı otomatik olarak yeni primary'ye yönlenir. Uygulama connection string'inde bu ad ve MultiSubnetFailover=True kullanılır.

SQL Server

ALTER AVAILABILITY GROUP appag
  ADD LISTENER 'appag-listener' (WITH IP ((N'10.0.0.60', N'255.255.255.0')), PORT=1433);

7. Failover testi yap ve senkronizasyon durumunu doğrula

Senkronizasyon 'HEALTHY' olduğunda planlı bir failover ile rol değişimi test edilir. Otomatik failover için mod senkron ve FAILOVER_MODE=AUTOMATIC olmalı. Durumu sys.dm_hadr_availability_replica_states ile izle.

SQL Server

SELECT ag.name, ars.role_desc, ars.synchronization_health_desc
FROM sys.dm_hadr_availability_replica_states ars
JOIN sys.availability_groups ag ON ag.group_id=ars.group_id;
-- Planlı failover (yeni primary olacak düğümde):
ALTER AVAILABILITY GROUP appag FAILOVER;
DBAtlas'ta aç →