Einrichtung einer SQL Server Always On Availability Group
Symptom
Ziel: automatisches Failover und eine lesbare Secondary Replica für SQL Server mit einer Always On Availability Group (AG) einrichten.
1. Windows Server Failover Cluster (WSFC) einrichten
Always On setzt einen darunterliegenden WSFC voraus. Installiere das Feature Failover Clustering auf allen Knoten und konfiguriere Netzwerk und Witness. Erstelle den Cluster mit PowerShell.
SQL Server
-- PowerShell (the Failover-Clustering feature must be installed on every node):
New-Cluster -Name sqlclu -Node node1,node2 -StaticAddress 10.0.0.50
-- Witness:
Set-ClusterQuorum -NodeAndFileShareMajority \\fs01\quorum2. Always On auf jeder Instanz aktivieren
Aktiviere das Feature Always On Availability Groups mit dem SQL Server Configuration Manager oder PowerShell. Starte danach den SQL-Server-Dienst neu. Damit wird die Cluster-Mitgliedschaft an die Instanz gebunden.
SQL Server
-- PowerShell:
Enable-SqlAlwaysOn -ServerInstance node1\SQL01 -Force
Enable-SqlAlwaysOn -ServerInstance node2\SQL01 -Force3. Datenbank sichern und auf der Secondary WITH NORECOVERY wiederherstellen
Die Datenbank, die der AG hinzugefügt wird, muss im Recovery-Modell FULL sein. Erstelle auf der Primary ein Voll- und ein Log-Backup; stelle sie auf der Secondary WITH NORECOVERY wieder her (damit sie weiter Redo empfangen kann). Das ist manuelles Seeding; die Alternative ist automatisches Seeding.
SQL Server
-- On the primary:
BACKUP DATABASE app TO DISK='\\fs01\bak\app.bak';
BACKUP LOG app TO DISK='\\fs01\bak\app.trn';
-- On the secondary:
RESTORE DATABASE app FROM DISK='\\fs01\bak\app.bak' WITH NORECOVERY;
RESTORE LOG app FROM DISK='\\fs01\bak\app.trn' WITH NORECOVERY;4. Endpoints erstellen und die Availability Group definieren
Erstelle einen HADR-Endpoint auf Port 5022 für den Redo-Verkehr zwischen den Knoten. Der synchrone Modus (SYNCHRONOUS_COMMIT) bietet automatisches Failover ohne Datenverlust; der asynchrone (ASYNCHRONOUS_COMMIT) hat Verzögerung, ist aber performant für entferntes DR.
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 der AG beitreten lassen und Datenbank hinzufügen
Führe auf der Secondary-Instanz JOIN für die AG aus und füge dann die wiederhergestellte Datenbank der AG hinzu. Dieser Schritt ist bei manuellem Seeding nötig; bei automatischem Seeding erfolgt er auf der Primary über SET(SEEDING_MODE).
SQL Server
-- On the secondary:
ALTER AVAILABILITY GROUP appag JOIN;
ALTER DATABASE app SET HADR AVAILABILITY GROUP = appag;6. Availability Group Listener erstellen
Der Listener ist der virtuelle Name samt IP, mit dem sich Anwendungen verbinden; nach einem Failover werden Verbindungen automatisch zur neuen Primary umgeleitet. Verwende im Connection String der Anwendung diesen Namen und MultiSubnetFailover=True.
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 testen und Synchronisationszustand prüfen
Ist die Synchronisation 'HEALTHY', teste einen Rollenwechsel per geplantem Failover. Für automatisches Failover muss der Modus synchron und FAILOVER_MODE=AUTOMATIC sein. Überwache den Zustand mit sys.dm_hadr_availability_replica_states.
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;
-- Planned failover (on the node that will become the new primary):
ALTER AVAILABILITY GROUP appag FAILOVER;