IBM Cloud Docs
-Cluster erstellen

-Cluster erstellen

In diesem Abschnitt werden die Buildtasks beschrieben, die zum Erstellen des Windows-Server-Failover-Clusters (WSFC) und der Verfügbarkeitsgruppe erforderlich sind.

In diesem Handbuch wird Folgendes vorausgesetzt:

  • Verwenden Sie mindestens zwei Server, auf denen Windows 2019 und SQL Server 2019 ausgeführt werden, um einen Cluster zu erstellen.
  • Sie verfügen über einen Bastionshost mit externem Internetzugang.
  • Active Directory wurde implementiert.

Feature Failover Clustering installieren

  1. RDP zum ersten SQL-Server unter Verwendung eines Benutzers aus dem SQL-Admins-Gruppenkonto und Öffnen einer PowerShell-Sitzung.

  2. Fügen Sie die Gruppe "SQL-Administratoren" zur lokalen Gruppe "Remoteverwaltungsbenutzer" hinzu, damit Benutzer in dieser Gruppe ferne Befehle ausführen können.

  3. Lassen Sie den eingehenden TCP-Port 5022 im Server zu, da dieser Port für den Datenverkehr der Verfügbarkeitsgruppe verwendet wird. Installieren Sie die Failover Clustering-Funktion und starten Sie dann den Server erneut:

    $domainnb = "<NB_Domain>"
    $group = $domainnb + "\SQLAdmins"
    Add-LocalGroupMember -Group "Remote Management Users" -Member $group
    New-NetFirewallRule -DisplayName 'SQL-AG-Inbound' -Profile Domain -Direction Inbound -Action Allow -Protocol TCP -LocalPort 5022
    Install-WindowsFeature –Name Failover-Clustering –IncludeManagementTools
    Restart-Computer -Force
    
  4. Wiederholen Sie dies für den zweiten SQL Server.

WSFC erstellen und SQL Always On aktivieren

  1. RDP zum ersten SQL-Server unter Verwendung eines Benutzers aus dem SQL-Admins-Gruppenkonto und Öffnen einer PowerShell-Sitzung.

  2. Führen Sie einen Clustervalidierungstest aus. Ignorieren Sie alle Warnungen des Typs "Ein Paar Netzschnittstellen", da dies für diese Implementierung normal ist.

  3. Wenn keine Fehler auftreten, erstellen sie einen WSFC-Cluster mit dem Namen wsfc01 , der die beiden SQL-Server <hostname1> und <hostname2>enthält. Die Option -ManagementPointNetworkType Distributed verwendet die Knoten-IP-Adresse des virtuellen Servers, was bedeutet, dass die sekundäre IP-Adresse auf der Schnittstelle nicht erforderlich ist. Diese Option erstellt einen DNN (Distributed Network Name), der Datenverkehr an die entsprechende Clusterressource weiterleitet.

  4. Das Clusterquorum wird dann für Node und Plattenmehrheit unter Verwendung einer Dateifreigabe unter fs01konfiguriert. \\fs01\clusterwitness-wsfc01

    $sqldb01 = "<hostname1>"
    $sqldb02 = "<hostname2>"
    Test-Cluster -Node $sqldb01, $sqldb02
    New-Cluster -Name wsfc01 -Node $sqldb01, $sqldb02 -ManagementPointNetworkType Distributed
    Set-ClusterQuorum -NodeAndFileShareMajority \\fs01\clusterwitness-wsfc01
    Enable-SqlAlwaysOn -ServerInstance sqldb01, sqldb02 -Force
    

Diese Aktivität muss auf dem zweiten Knoten nicht wiederholt werden.

Dateifreigabe erstellen

Die zu replizierende Datenbank muss gesichert und in die sekundären Instanzen zurückgeschrieben werden. Eine Dateifreigabe ist erforderlich, um diesen Vorgang zu vereinfachen. Erstellen Sie auf dem Bastionsserver ein Verzeichnis und geben Sie es frei, sodass es eine Datenbanksicherung vom primären SQL-Server aufnehmen und auf den sekundären SQL-Server zurückschreiben kann. Das Verzeichnis und die Freigabe müssen für den SQL-Service-Account zugänglich sein, da die Sicherung vom Servicekonto für die Datenbank ausgeführt wird.

  1. Öffnen Sie auf dem Bastionshost eine PowerShell-Sitzung.

    $domainnb = "<NB_Domain>"
    $user = $domainnb + "\sqlsvc"
    New-Item -Path "C:\" -Name "TempShare" -ItemType "directory"
    $ACL=Get-ACL -Path "C:\TempShare"
    $AccessRule = New-Object System.Security.AccessControl.FileSystemAccessRule($user,"FullControl","Allow")
    $ACL.SetAccessRule($AccessRule)
    $ACL | Set-Acl -Path "C:\TempShare"
    New-SmbShare -Name "TempShare" -Path "C:\TempShare" -FullAccess $user
    

Endpunkte erstellen

  1. RDP zum ersten SQL-Server unter Verwendung eines Benutzers aus dem SQL-Admins-Gruppenkonto und Öffnen einer PowerShell-Sitzung.

  2. Für die Teilnahme an Verfügbarkeitsgruppen des Typs 'Immer aktiv' benötigt eine Serverinstanz einen eigenen Endpunkt, der TCP-Port 5022 zum Senden und Empfangen von Datenverkehr zwischen den Serverinstanzen verwendet, die Verfügbarkeitsreplikate hosten.

  3. Die folgenden PowerShell-Befehle werden verwendet, um diese Endpunkte zu konfigurieren, Hadr_endpoint in den Standard-SQL-Instanzen (DEFAULT) auf den SQL-Servern <hostname1>`` and <hostname2> und aktiviert die Verschlüsselung zwischen den Endpunkten:

    $sqldb01 = "<hostname1>"
    $sqldb02 = "<hostname2>"
    $domainnb = "<NB_Domain>"
    $user = $domainnb + "\sqlsvc"
    $pathsqldb01 = "SQLSERVER:\SQL\" + $sqldb01 + "\DEFAULT"
    $pathsqldb01 = "SQLSERVER:\SQL\" + $sqldb02 + "\DEFAULT"
    $endpoint1 = New-SqlHadrEndpoint Hadr_endpoint -Port 5022 -Path $pathsqldb01 -Encryption Required -EncryptionAlgorithm Aes -Owner $user
    Set-SqlHadrEndpoint -InputObject $endpoint1 -State "Started"
    $endpoint2 = New-SqlHadrEndpoint Hadr_endpoint -Port 5022 -Path $pathsqldb02 -Encryption Required -EncryptionAlgorithm Aes -Owner $user
    Set-SqlHadrEndpoint -InputObject $endpoint2 -State "Started"
    

Um Verbindungsberechtigungen für den von den Endpunkten verwendeten Domänenservice zu erteilen, müssen Sie die folgenden Schritte ausführen: Wenn dieser Schritt nicht ausgeführt wird, werden die Endpunktports nicht gestartet und nicht in einer netstat -a -Auflistung angezeigt:

  1. Starten Sie SQL Server Management Studio (SSMS) auf dem primären Replikathost und stellen Sie eine Verbindung zum primären Replikat her.
  2. Erweitern Sie Sicherheit, klicken Sie mit der rechten Maustaste auf Anmeldungen und wählen Sie Neue Anmeldung aus.
  3. Klicken Sie auf Suchen, und geben Sie das Benutzerkonto \sqlserver\sqlsvc ein. Klicken Sie anschließend auf OK.
  4. Klicken Sie mit der rechten Maustaste auf die erstellte Anmeldung und wählen Sie Eigenschaften aus.
  5. Klicken Sie auf Securables und anschließend auf Suchen.
  6. Wählen Sie im Dialog Objekte hinzufügen die Option Bestimmte Objekte aus, und klicken Sie auf OK.
  7. Klicken Sie im Dialog Objekte auswählen auf Objekttypen und wählen Sie Endpunkte aus.
  8. Klicken Sie auf Durchsuchen, um den Objektnamen auszuwählen.
  9. Wählen Sie Hadr_endpoint aus und klicken Sie auf OK.
  10. Erteilen Sie in der Berechtigung für Hadr_endpoint explizit die Verbindungsberechtigung für dieses Objekt.

Testdatenbank erstellen

Zum Konfigurieren einer Verfügbarkeitsgruppe muss eine Datenbank auf dem Primärknoten verfügbar sein und anschließend eine Kopie dieser Datenbank auf dem Sekundärknoten. Diese Task erstellt eine Testdatenbank und kopiert anschließend mithilfe einer Sicherungs-und Zurückschreibungsoperation über eine Dateifreigabe die Datenbank auf den sekundären Knoten.

  1. RDP zum ersten SQL-Server unter Verwendung eines Benutzers aus dem SQL-Admins-Gruppenkonto und Öffnen einer PowerShell-Sitzung. Es ist wichtig, den Wiederherstellungsmodus für Datenbanken, die in Verfügbarkeitsgruppen verwendet werden, auf Full zu setzen:

    $sql = "
    CREATE DATABASE [TestDatabase]
     CONTAINMENT = NONE
     ON  PRIMARY
    ( NAME = N'TestDatabase', FILENAME = N'D:\MSSQL15.MSSQLSERVER\MSSQL\DATA\TestDatabase.mdf' , SIZE = 1048576KB , FILEGROWTH = 262144KB )
     LOG ON
    ( NAME = N'MyDatabase_log', FILENAME = N'E:\MSSQL15.MSSQLSERVER\MSSQL\Logs\TestDatabase_log.ldf' , SIZE = 524288KB , FILEGROWTH = 131072KB )
    GO
    
    USE [master]
    GO
    ALTER DATABASE [TestDatabase] SET RECOVERY FULL
    GO
    
    ALTER AUTHORIZATION ON DATABASE::[TestDatabase] TO [sa]
    GO "
    Invoke-SqlCmd -ServerInstance sqldb01 -Query $sql
    
  2. Bereiten Sie die sekundäre Datenbank vor, indem Sie mit den Befehlen Backup-SqlDatabase und Restore-SqlDatabase eine Sicherung von TestDatabase unter <hostname1> unter TempShare unter <file_share_host>, der SQL Server-Instanz, die das primäre Replikat hostet, erstellen. Stellen Sie die Sicherung in <hostname2>wieder her, die das sekundäre Replikat hostet. Der Wiederherstellungsparameter NoRecovery muss verwendet werden.

    $sqldb01 = "<hostname1>"
    $sqldb02 = "<hostname2>"
    $filesharehost = "<file_share_host>"
    $backupfiledata = "\\" + $filesharehost +"\TempShare\TestDatabase.bak"
    $backupfilelog = "\\" + $filesharehost +"\TempShare\TestDatabase.trn"
    Backup-SqlDatabase -Database "TestDatabase" -ServerInstance $sqldb01 -BackupFile $backupfiledata -CopyOnly
    Backup-SqlDatabase -Database "TestDatabase" -BackupFile $backupfilelog -ServerInstance $sqldb01 -BackupAction Log -CopyOnly
    Restore-SqlDatabase -Database "TestDatabase" -BackupFile $backupfiledata -ServerInstance $sqldb02 -NoRecovery  
    Restore-SqlDatabase -Database "TestDatabase" -BackupFile $backupfilelog -ServerInstance $sqldb02 -RestoreAction Log -NoRecovery
    

Die neue sekundäre Datenbank befindet sich im Status RESTORING (Zurückschreibungsstatus). Auf sie kann erst zugegriffen werden, wenn sie mit der Verfügbarkeitsgruppe verknüpft wurde.

Verfügbarkeitsgruppe erstellen

Datenbanken, die einer Verfügbarkeitsgruppe hinzugefügt werden, werden als Verfügbarkeitsdatenbanken bezeichnet. Wenn Sie Datenbanken hinzufügen, muss die Datenbank eine Online-Datenbank mit Schreib-/Lesezugriff sein und auf der Serverinstanz vorhanden sein, die das primäre Replikat in WSFC hostet. Nach dem Hinzufügen verknüpft die Datenbank die Verfügbarkeitsgruppe als primäre Datenbank und bleibt für Clients verfügbar. Es ist keine sekundäre Datenbank vorhanden, bis Sicherungen der primären Datenbank auf die Serverinstanz zurückgeschrieben werden, die zum sekundären Replikat wird. Die neue sekundäre Datenbank befindet sich im Status RESTORE, bis sie mit der Verfügbarkeitsgruppe verknüpft wird. Weitere Informationen finden Sie unter Automatisches Seeding zum Initialisieren eines sekundären Replikats für eine Always On-Verfügbarkeitsgruppe verwenden , wenn die Sicherungs-und Zurückschreibungsmethode nicht verwendet wird.

  1. RDP zum ersten SQL-Server unter Verwendung eines Benutzers aus dem SQL-Admins-Gruppenkonto und Öffnen einer PowerShell-Sitzung.

  2. Um sicherzustellen, dass keine Pfadfehler auftreten, verwenden Sie Invoke-SQLCmd , um das Laden der SQL PowerShell-Bibliothek zu erzwingen, auf die dann über die Baumstruktur des PowerShell-Laufwerks zugegriffen werden kann. PowerShell behandelt die Objekte in SQL Server ähnlich wie Dateien in einem Verzeichnis. Ersetzen Sie <hostname1> durch den Hostnamen des SQL-Servers:

    invoke-sqlcmd
    cd SQLSERVER:\SQL\<hostname1>
    
  3. Zum Erstellen der Verfügbarkeitsgruppe wird der Befehl New-SqlAvailabilityReplica mit dem Parameter "-AsTemplate" verwendet, um ein speicherinternes Verfügbarkeitsreplikatobjekt für jedes der beiden Verfügbarkeitsreplikate zu erstellen, das in die Verfügbarkeitsgruppe eingeschlossen werden soll. Anschließend wird die Verfügbarkeitsgruppe mit dem Befehl New-SqlAvailabilityGroup erstellt und auf die Verfügbarkeitsreplikatobjekte verwiesen. AutomatedBackupPreference Primary wird verwendet, um anzugeben, dass die Sicherungen immer im primären Replikat erfolgen sollen, während -FailureConditionLevel OnCriticalServerErrors angibt, dass die automatische Funktionsübernahme ausgelöst wird, wenn ein kritischer Serverfehler auftritt. Es ist möglich, die Option -SeedingMode Automatic zu verwenden, die direktes Seeding ermöglicht, da diese Methode keine Sicherung und Wiederherstellung einer Kopie der Primärdatenbank erfordert. Für SQL 2019 lautet die Versionsnummer 15.

    Beschreibungen anderer Parameter finden Sie in der Dokumentation zu New-SqlAvailabilityGroup .

    $sqldb01 = "<hostname1>"
    $sqldb02 = "<hostname2>"
    $sqldb01fqdn = "<fqdn1>"
    $sqldb02fqdn = "<fqdn2>"
    $endpointurl1 "TCP://" + $sqldb01fqdn + ":5022"
    $endpointurl2 "TCP://" + $sqldb02fqdn + ":5022"
    $pathsqldb01 = "SQLSERVER:\SQL\" + $sqldb01 +" \DEFAULT"
    $primaryReplica = New-SqlAvailabilityReplica -Name $sqldb01 -EndpointURL $endpointurl1 -AvailabilityMode "SynchronousCommit" -FailoverMode "Automatic" -Version 15 -AsTemplate  
    $secondaryReplica = New-SqlAvailabilityReplica -Name $sqldb02 -EndpointURL $endpointurl2 -AvailabilityMode "SynchronousCommit" -FailoverMode "Automatic" -Version 15 -AsTemplate
    New-SqlAvailabilityGroup -Name "AG01" -Path $pathsqldb01 -AvailabilityReplica @($primaryReplica,$secondaryReplica) -Database "TestDatabase" -ClusterType WSFC -AutomatedBackupPreference Primary -FailureConditionLevel OnCriticalServerErrors
    
  4. Verknüpfen Sie das sekundäre Replikat mit den folgenden Befehlen mit der Verfügbarkeitsgruppe. Durch die Verknüpfung wird die sekundäre Datenbank in den Status ONLINE versetzt und die Datensynchronisation mit der entsprechenden Primärdatenbank eingeleitet. Die Datensynchronisation ist der Prozess, bei dem Änderungen an einer primären Datenbank in einer sekundären Datenbank reproduziert werden. Bei der Datensynchronisation sendet die Primärdatenbank Transaktionsprotokollsätze an die Sekundärdatenbank.

    $sqldb02 = "<hostname2>"
    $pathsqldb02 = "SQLSERVER:\SQL\" + $sqldb02 + " \DEFAULT"
    Join-SqlAvailabilityGroup -Path $pathsqldb02 -Name "AG01" -ClusterType WSFC
    
  5. Starten Sie die Datensynchronisation, indem Sie jede sekundäre Datenbank mit der Verfügbarkeitsgruppe verknüpfen:

    $sqldb02 = "<hostname2>"
    $agpathsqldb02 = "SQLSERVER:\SQL\" + $sqldb02 + " \DEFAULT\AvailabilityGroups\AG01"
    Add-SqlAvailabilityDatabase -Path $agpathsqldb02 -Database "TestDatabase"
    
  6. Verwenden Sie den Befehl dir, um den Inhalt der neuen Verfügbarkeitsgruppe zu überprüfen, z. B. dir SQLSERVER:\SQL\sqldb01\DEFAULT\AvailabilityGroups\AG01.

Namen des verteilten Netzes der Verfügbarkeitsgruppe erstellen

Bei SQL Server auf IBM Cloud VPCleitet der DNN (Distributed Network Name) Datenverkehr an die entsprechende Clusterressource weiter. Der DNN-Listener ersetzt den traditionellen VNN-Verfügbarkeitsgruppenlistener (VNN = Virtual Network Name), wenn er mit Verfügbarkeitsgruppen verwendet wird, und vereinfacht die Implementierung in einer Cloudumgebung.

DNN-Listener sind so konzipiert, dass sie an einem eindeutigen Port empfangsbereit sind. Der DNS-Eintrag für den Listenernamen wird in alle IP-Adressen der Replikate in der Verfügbarkeitsgruppe aufgelöst. Da SQL Server an Port 1433 empfangsbereit ist, kann Port 1433 nicht für DNN-Listener verwendet werden.

RDP zum ersten SQL-Server unter Verwendung eines Benutzers aus dem SQL-Admins-Gruppenkonto, öffnen Sie eine PowerShell-Sitzung und verwenden Sie die folgenden Befehle, um eine DNN-Ressource mit dem Namen dnnlsnr-6789zu erstellen, DNS auf dem AD-DNS-Server der DNN-Ressource zu konfigurieren, die DNN-Ressource zu starten, die Abhängigkeit von der Verfügbarkeitsgruppenressource zur DNN-Ressource hinzuzufügen und schließlich die Verfügbarkeitsgruppenressource zurücksetzt.

$ag = "AG01"
$dns = "dnnlsnr"
$port = "6789"
Add-ClusterResource -Name $port -ResourceType "Distributed Network Name" -Group $ag
Get-ClusterResource -Name $port | Set-ClusterParameter -Name DnsName -Value $dns
Start-ClusterResource -Name $port
$Dep = Get-ClusterResourceDependency -Resource $ag
if ( $Dep.DependencyExpression -match '\s*\((.*)\)\s*' ) {$DepStr = "$($Matches.1) or [$port]"} else {$DepStr = "[$port]"}
Set-ClusterResourceDependency -Resource $ag -Dependency "$DepStr"
Stop-ClusterResource -Name $ag
Start-ClusterResource -Name $ag

Verwenden Sie den folgenden Befehl, um TCP 6789 über die Windows-Firewall zuzulassen:

New-NetFirewallRule -DisplayName 'SQL-dnnlsnr-6789-Inbound' -Profile Domain -Direction Inbound -Action Allow -Protocol TCP -LocalPort 6789