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\quorum2. 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 -Force3. 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;