SQL Server AlwaysOn Availability Groups konfigurieren

Wenn Sie mehrere SQL Server Enterprise-Instanzen auf der Compute Engine ausführen, können Sie diese Instanzen so konfigurieren, dass Windows Server Failover Clustering und SQL Server AlwaysOn Availability Groups verwendet werden, um eine hohe Verfügbarkeit und eine Notfallwiederherstellung zu ermöglichen.

Diese Anleitung zeigt Ihnen, wie Sie ein Cluster von Instanzen mit SQL Server Enterprise mit den notwendigen Netzwerkeinstellungen erstellen und diese Instanzen so konfigurieren können, dass Windows Server Failover Clustering und SQL Server AlwaysOn Availability Groups verwendet werden. Sie können SQL Server Enterprise-Instanzen verwenden, die entweder mit öffentlichen SQL Server-Images oder mit Microsoft License Mobility erstellt wurden.

Voraussetzungen

In dieser Anleitung wird davon ausgegangen, dass Sie mit Folgendem vertraut sind:

VPC-Netzwerk einrichten

Erstellen Sie ein benutzerdefiniertes VPC-Netzwerk mit drei Subnetzen. Legen Sie dann die Firewallregeln fest, um den Datenverkehr zwischen internen virtuellen Maschinen zu ermöglichen. Sie können für diese Aufgabe bei Bedarf ein vorhandenes Netzwerk verwenden, aber es ist Best Prac­tice, die Systeme in verschiedene Netzwerke und Subnetze zu trennen. In dieser Anleitung wird davon ausgegangen, dass Sie die folgende VPC-Netzwerk- und Subnetzkonfiguration erstellen.

  1. Erstellen Sie ein VPC-Netzwerk im benutzerdefinierten Modus.

    gcloud compute networks create wsfcnet --subnet-mode custom
    
  2. Fügen Sie dem VPC-Netzwerk drei Subnetze hinzu:

    gcloud compute networks subnets create wsfcsubnet1 --network wsfcnet \
    --region us-central1 --range 10.0.0.0/24
    
    gcloud compute networks subnets create wsfcsubnet2 --network wsfcnet \
    --region us-central1 --range 10.1.0.0/24
    
    gcloud compute networks subnets create wsfcsubnet3 --network wsfcnet \
    --region us-central1 --range 10.2.0.0/24
    
  3. Erstellen Sie eine Firewallregel, die Traffic zwischen den Instanzen über interne IP-Adressen im neuen VPC-Netzwerk zulässt:

    gcloud compute firewall-rules create allow-internal-ports \
    --network wsfcnet --allow tcp:1-65535,udp:1-65535,icmp \
    --source-ranges 10.0.0.0/24,10.1.0.0/24,10.2.0.0/24
    
  4. Erstellen Sie eine Firewallregel, die RDP-Verbindungen auf Port 3389 im VPC-Netzwerk zulässt:

    gcloud compute firewall-rules create allow-rdp --network wsfcnet \
    --allow tcp:3389 --source-ranges 0.0.0.0/0
    

Windows-Domänencontroller einrichten

Erstellen Sie einen Windows-Domänencontroller (Domaincontroller). In unserer Anleitung ist die Domain dbeng.com und der Name des Domain Controllers dc-windows unter der IP-Adresse 10.2.0.100. Der Domain Controller verwendet das Subnetz wsfcsubnet3.

  1. Erstellen Sie eine Instanz, die als Domänencontroller verwendet wird. Sie können einen beliebigen Maschinentyp und die von Ihnen benötigte Version von Windows Server festlegen. Geben Sie für den Domänencontroller einen kleinen n1-standard-1-Maschinentyp und das neueste Image aus der Image-Familie windows-2016 an.

    gcloud compute instances create dc-windows --machine-type n1-standard-1 \
    --boot-disk-type pd-ssd --image-project windows-cloud \
    --image-family windows-2016 --boot-disk-size 200GB \
    --zone us-central1-f --subnet wsfcsubnet3 --private-network-ip=10.2.0.100
    
  2. Stellen Sie mithilfe von RDP eine Verbindung zum Domänencontroller her.

  3. Führen Sie auf der Instanz PowerShell als Administrator aus, um das PowerShell-Terminal zu öffnen.

  4. Legen Sie die folgenden Variablen fest:

    PS C:\> $DomainName = "dbeng.com";
    
    PS C:\> $DomainMode = "Win2012R2";
    
    PS C:\> $ForestMode = "Win2012R2";
    
    PS C:\> $DatabasePath = "C:\Windows\NTDS";
    
    PS C:\> $LogPath = "C:\Windows\NTDS";
    
    PS C:\> $SysvolPath = "C:\Windows\SYSVOL";
    
  5. Installieren Sie die folgenden Active Directory-Tools:

    PS C:\> Install-WindowsFeature -Name AD-Domain-Services -IncludeManagementTools
    
    PS C:\> Install-ADDSForest -CreateDnsDelegation:$false -DatabasePath $DatabasePath -LogPath $LogPath -SysvolPath $SysvolPath -DomainName $DomainName -DomainMode $DomainMode -ForestMode $ForestMode -InstallDNS:$true -NoRebootOnCompletion:$false -SafeModeAdministratorPassword ((Get-Credential).Password) -Force:$true
    
  6. Wenn die Instanz nach dem Erstellen der Domain nicht automatisch neu startet, starten Sie die Instanz manuell.

  7. Nachdem die Instanz neu gestartet ist, stellen Sie die Verbindung zur Instanz mithilfe von RDP wieder her. Verwenden Sie Ihre Domainanmeldedaten, die Ihren ursprünglichen Anmeldedaten entsprechen.

  8. Führen Sie "Active Directory-Benutzer und -Computer" aus und setzen Sie das Passwort für "Administrator" zurück. Achten Sie darauf, dass das Häkchen bei der Option "Benutzer muss das Passwort bei der nächsten Anmeldung ändern" entfernt ist.

  9. Trennen Sie die Verbindung zur Instanz und stellen Sie die Verbindung mithilfe des Administrator-Kontos wieder her.

  10. Erstellen Sie ein Domainkonto namens "sql.service", mit dem SQL Server ausgeführt werden soll. Entfernen Sie das Häkchen bei der Option "Benutzer muss Kennwort bei der nächsten Anmeldung ändern" sowie bei der Option "Das Kennwort läuft nicht ab".

Der Domänencontroller ist konfiguriert und Sie können die Verbindung zur Instanz dc-windows trennen. Als nächstes erstellen Sie die Instanzen für die Verfügbarkeitsgruppe.

Instanzen für Ihre Verfügbarkeitsgruppe einrichten

Erstellen Sie SQL Server-Instanzen für eine Verfügbarkeitsgruppe. Diese Instanzen verwenden die folgenden IP-Adresskonfigurationen mit Alias-IPs:

  • Instanzname: cluster-sql1
    • Interne IP-Adresse: 10.0.0.4
    • Windows Failoverclustername: cluster-ag
    • Failovercluster-IP-Adresse: 10.0.0.5 (Alias-IP)
    • Name der Verfügbarkeitsgruppe: cluster-listener
    • Listeneradresse der Verfügbarkeitsgruppe: 10.0.0.6 (Alias-IP)
  • Instanzname: cluster-sql2
    • Interne IP-Adresse: 10.1.0.4
    • Windows Failoverclustername: cluster-ag
    • Failovercluster-IP-Adresse: 10.1.0.5 (Alias-IP)
    • Name der Verfügbarkeitsgruppe: cluster-listener
    • Listeneradresse der Verfügbarkeitsgruppe: 10.1.0.6 (Alias-IP)

Erstellen Sie die SQL Server-Instanzen mithilfe von einer der folgenden Methoden:

Öffentliche SQL Server-Images

Erstellen Sie zwei Instanzen von öffentlichen SQL Server-Images. In diesem Beispiel nehmen wir die Instanznamen cluster-sql1 und cluster-sql2. Legen Sie für die Größe des Bootlaufwerks 200GB und den Maschinentyp n1-highmem-4 fest. SQL Server-Instanzen erfordern in der Regel mehr Computerressourcen als die Domain Controller-Instanz. Falls Sie später zusätzliche Computerressourcen benötigen, können Sie eine Änderung des Maschinentyps für diese Instanzen vornehmen. Wenn zusätzlicher Speicherplatz erforderlich ist, fügen Sie ein Laufwerk hinzu oder ändern die Größe des nichtflüchtigen Bootlaufwerks. In größeren Verfügbarkeitsgruppen können Sie mehrere Instanzen erstellen.

Fügen Sie außerdem das Flag --metadata sysprep-specialize-script-ps1 ein, um während des Erstellens einer Instanz einen PowerShell-Befehl auszuführen, der die Funktion Failover-Clustering installiert.

Erstellen Sie für dieses Beispiel zwei Instanzen mithilfe der folgenden Befehle:

gcloud compute instances create cluster-sql1 --machine-type n1-highmem-4 \
--boot-disk-type pd-ssd --boot-disk-size 200GB \
--image-project windows-sql-cloud --image-family sql-ent-2016-win-2016 \
--zone us-central1-f \
--network-interface "subnet=wsfcsubnet1,private-network-ip=10.0.0.4,aliases=10.0.0.5;10.0.0.6" \
--can-ip-forward --metadata sysprep-specialize-script-ps1="Install-WindowsFeature Failover-Clustering -IncludeManagementTools;"
gcloud compute instances create cluster-sql2 --machine-type n1-highmem-4 \
--boot-disk-type pd-ssd --boot-disk-size 200GB \
--image-project windows-sql-cloud --image-family sql-ent-2016-win-2016 \
--zone us-central1-f \
--network-interface "subnet=wsfcsubnet2,private-network-ip=10.1.0.4,aliases=10.1.0.5;10.1.0.6" \
--can-ip-forward --metadata sysprep-specialize-script-ps1="Install-WindowsFeature Failover-Clustering -IncludeManagementTools;"

Für größere Verfügbarkeitsgruppen können Sie zusätzliche Instanzen mit den entsprechenden IP-Adressen erstellen.

Bestehende Lizenzen

Wenn Sie eigene Lizenzen für SQL Server Enterprise basierend auf Microsoft License Mobility über Software Assurance verwenden möchten, erstellen Sie ein Windows-Image, bei dem --guestOSFeatures aktiviert ist. Installieren Sie SQL Server Enterprise dann später manuell.

  1. Erstellen Sie eine Windows Serverinstanz.
  2. Aktualisieren Sie auf dieser Instanz alle Komponenten auf die neuesten Versionen.
  3. Setzen Sie den Status der automatischen Löschfunktion für das Bootlaufwerk dieser Instanz auf false.
  4. Löschen Sie die Instanz.
  5. Erstellen Sie ein temporäres Laufwerk mit einem Windows Server-Standard-Image.

    gcloud compute disks create windows-2012-disk-new --size 200 \
    --zone us-central1-f --type pd-ssd --image-family windows-2012-r2 \
    --image-project windows-cloud
    
  6. Erstellen Sie vom neuen Laufwerk ein benutzerdefiniertes Windows Server-Image und aktivieren Sie dabei MULTI_IP_SUBNET im Parameter guestOSFeatures.

    gcloud beta compute images create windows-server-2012-r2-dc-new \
    --source-disk windows-2012-disk-new --source-disk-zone us-central1-f \
    --guest-os-features MULTI_IP_SUBNET
    
  7. Nachdem das Image erstellt wurde, löschen Sie das temporäre Laufwerk:

    gcloud compute disks delete windows-2012-disk-new --zone us-central1-f
    
  8. Verwenden Sie das benutzerdefinierte Image für das Erstellen der neuen SQL Server-Instanzen für Ihre Verfügbarkeitsgruppe. SQL Server-Instanzen benötigen in der Regel mehr Computing-Ressourcen als die Domänencontrollerinstanz. Legen Sie deshalb mindestens einen n1-highmem-4-Maschinentyp fest. Wenn Sie später zusätzliche Computing-Ressourcen benötigen, können Sie eine Änderung des Maschinentyps für diese Instanzen vornehmen. Wenn zusätzlicher Speicherplatz erforderlich ist, fügen Sie ein Laufwerk hinzu oder ändern die Größe des nichtflüchtigen Bootlaufwerks. In größeren Verfügbarkeitsgruppen können Sie mehrere Instanzen erstellen. Für dieses Beispiel legen Sie zwei Instanzen an:

    gcloud compute instances create cluster-sql1 --machine-type n1-highmem-4 \
    --boot-disk-type pd-ssd --boot-disk-size 200GB \
    --image windows-server-2012-r2-dc-new --zone us-central1-f \
    --subnet wsfcsubnet1 --private-network-ip=10.0.0.4 --can-ip-forward \
    --metadata sysprep-specialize-script-ps1="Install-WindowsFeature Failover-Clustering -IncludeManagementTools;"
    
    gcloud compute instances create cluster-sql2 --machine-type n1-highmem-4 \
    --boot-disk-type pd-ssd --boot-disk-size 200GB \
    --image windows-server-2012-r2-dc-new --zone us-central1-f \
    --subnet wsfcsubnet2 --private-network-ip=10.1.0.4 --can-ip-forward \
    --metadata sysprep-specialize-script-ps1="Install-WindowsFeature Failover-Clustering -IncludeManagementTools;"
    
  9. Installieren Sie auf jeder Instanz manuell SQL Server Enterprise.

Nachdem Sie die Instanzen erstellt haben, konfigurieren Sie sie so, dass sie als eine Verfügbarkeitsgruppe fungieren können.

  1. Verbinden Sie beide Instanzen mithilfe von RDP-Verbindungen.
  2. Legen Sie für beide Instanzen die Verwendung statischer IP-Adressen fest und geben Sie für die Netzmaske den Wert 255.255.0.0 an. Öffnen Sie ein PowerShell-Terminal als Administrator und setzen Sie die statischen IP-Adressen auf "Statisch". Diese Befehle können Ihre Remotedesktopverbindung beenden:

    • Instanz 1:

      PS C:\> netsh interface ip set address name=Ethernet static 10.0.0.4 255.255.0.0 10.0.0.1 1
      
      PS C:\> netsh interface ip set dns Ethernet static 10.2.0.100
      
      PS C:\> netsh advfirewall firewall add rule name="Open Port 5022 for Availability Groups" dir=in action=allow protocol=TCP localport=5022
      
      PS C:\> netsh advfirewall firewall add rule name="Open Port 1433 for SQL Server" dir=in action=allow protocol=TCP localport=1433
      
    • Instanz 2:

      PS C:\> netsh interface ip set address name=Ethernet static 10.1.0.4 255.255.0.0 10.1.0.1 1
      
      PS C:\> netsh interface ip set dns Ethernet static 10.2.0.100
      
      PS C:\> netsh advfirewall firewall add rule name="Open Port 5022 for Availability Groups" dir=in action=allow protocol=TCP localport=5022
      
      PS C:\> netsh advfirewall firewall add rule name="Open Port 1433 for SQL Server" dir=in action=allow protocol=TCP localport=1433
      
  3. Fügen Sie der Windows-Domain beide Instanzen hinzu. Öffnen Sie PowerShell als Administrator und führen Sie den folgenden Add-Computer-Befehl auf beiden Instanzen aus:

    PS C:\> Add-Computer -DomainName "dbeng.com" -Credential "dbeng.com\Administrator" -Restart -Force
    

    Mit diesem Befehl werden Sie aufgefordert, Ihre Anmeldedaten einzugeben. Wenn der Befehl ausgeführt wurde, startet die Instanz erneut.

Die Instanzen werden nun für die Verfügbarkeitsgruppe erstellt. Als nächstes konfigurieren Sie den Failover Cluster-Manager.

Failover Cluster-Manager konfigurieren

Aktivieren Sie das Failover-Clustering auf den Instanzen in Ihrer Verfügbarkeitsgruppe und konfigurieren Sie eine Instanz so, dass sie als Failover Cluster-Manager fungiert. Aktivieren Sie "Hohe Verfügbarkeit mit AlwaysOn" für alle Instanzen der Gruppe.

  1. Verbinden Sie Ihre Instanzen noch einmal über RDP. Verwenden Sie dazu aber die Anmeldedaten des Domänenadministrators (Domainadministrator). In diesem Beispiel lautet die Domain dbeng und das Administratorkonto Administrator. Wenn Sie Chrome RDP für Google Cloud Platform verwenden, löschen Sie die vorhandenen RDP-Zertifikate für diese Adressen in der Liste "Zertifikate" im Menü "Optionen".

  2. Wählen Sie eine Instanz aus und konfigurieren Sie sie für eine Ausführung als Failovercluster-Manager.

    1. Öffnen Sie PowerShell als Administrator und legen Sie Variablen gemäß Ihrer Clusterumgebung fest. Geben Sie für dieses Beispiel die folgenden Variablen an:

      PS C:\> $node1 = "cluster-sql1"
      
      PS C:\> $node2 = "cluster-sql2"
      
      PS C:\> $nameWSFC = "cluster-dbclus" #Name of cluster
      
      PS C:\> $ipWSFC1 = "10.0.0.5" #IP address of cluster in subnet 1
      
      PS C:\> $ipWSFC2 = "10.1.0.5" #IP address of cluster in subnet 2
      
    2. Erstellen Sie den Failover-Cluster:

      PS C:\> New-Cluster -Name $nameWSFC -Node $node1, $node2 -NoStorage -StaticAddress $ipWSFC1, $ipWSFC2
      
    3. Aktivieren Sie "Hohe Verfügbarkeit mit AlwaysOn" für beide Knoten im Cluster:

      PS C:\> Enable-SqlAlwaysOn -ServerInstance $node1 -Force
      
      PS C:\> Enable-SqlAlwaysOn -ServerInstance $node2 -Force
      
  3. Erstellen Sie auf der sekundären Instanz, auf der kein Cluster-Manager vorhanden ist, einen Sicherungsordner unter C:\SQLBackup und geben Sie diesen Ordner als \\cluster-sql2\SQLBackup frei. Sie können für einen freigegebenen Ordner einen anderen Standort wählen, solange beide Instanzen Zugriff auf den freigegebenen Ordner haben.

  4. Erstellen Sie auf beiden Instanzen zwei Ordner unter C:\SQLData und C:\SQLLog. Verwenden Sie diese Ordner für die Datenbankdaten und Protokolldateien.

Der Failover Cluster-Manager ist fertig. Als nächstes erstellen Sie die Verfügbarkeitsgruppe.

Die Verfügbarkeitsgruppe erstellen

Erstellen Sie eine Testdatenbank und konfigurieren Sie sie so, dass sie mit einer neuen Verfügbarkeitsgruppe arbeitet. Alternativ können Sie stattdessen eine vorhandene Datenbank für die Verfügbarkeitsgruppe festlegen.

  1. Erstellen Sie, wenn Sie noch keine Datenbank konfiguriert haben, eine Testdatenbank. Führen Sie auf der Cluster-Manager-Instanz SQL Server Management Studio aus und erstellen Sie mit dem folgenden SQL-Befehl eine Testdatenbank:

    CREATE DATABASE TestDB
    ON PRIMARY (NAME = 'TestDB_Data', FILENAME='C:\SQLData\TestDB_Data.mdf', SIZE = 256MB, MAXSIZE = UNLIMITED, FILEGROWTH = 256MB )
    LOG ON (NAME = 'TestDB_Log', FILENAME='C:\SQLLog\TestDB_Log.ldf', SIZE = 256MB, MAXSIZE = UNLIMITED, FILEGROWTH = 256MB )
    GO
    USE [TestDB]
    Exec dbo.sp_changedbowner @loginame = 'sa', @map = false;
      ALTER DATABASE [TestDB] SET RECOVERY FULL;
      GO
      BACKUP DATABASE TestDB to disk = '\\\\cluster-sql2\SQLBackup\TestDB.bak' WITH INIT
    GO
    
  2. Führen Sie SQL Server Management Studio auf der Cluster-Manager-Instanz aus.

  3. Klicken Sie mit der rechten Maustaste auf Hohe Verfügbarkeit mit AlwaysOn und wählen Sie Assistent für neue Verfügbarkeitsgruppen aus.

  4. Legen Sie auf der Seite Namen angeben den Namen der Verfügbarkeitsgruppe fest. Geben Sie für dieses Beispiel cluster-ag an.

  5. Geben Sie auf der Seite Datenbanken auswählen an, welche Datenbank Sie replizieren möchten. Geben Sie für dieses Beispiel als Datenbank TestDB an.

  6. Legen Sie auf der Seite Replikate angeben beide Instanzen als Replikate mit automatischem Failover und synchronem Commit fest.

  7. Legen Sie auf der Seite Datensynchronisierung auswählen die Netzwerkfreigabe fest, um die Sicherung der Datenbank für die erste Synchronisierung beizubehalten. Geben Sie für dieses Beispiel \\cluster-sql2\SQLBackup an.

  8. Die Seite Validierung zeigt eine Warnung an, da kein Listener vorhanden ist. Diese Warnung können Sie ignorieren.

  9. Nachdem der Assistent abgeschlossen ist, klicken Sie mit der rechten Maustaste auf die neue Verfügbarkeitsgruppe und wählen Sie Listener hinzufügen aus.

  10. Geben Sie die Parameter für diesen Listener an:

    • Listener-DNS-Name: cluster-listener
    • Netzwerkport: 1433
    • Netzwerkmodus: Static IP
  11. Fügen Sie zwei Subnetz- und IP-Adressfelder hinzu. In diesem Beispiel verwenden Sie die folgenden Subnetz- und IP-Adresspaare:

    • 10.0.0.0/16 und 10.0.0.6
    • 10.1.0.0/16 und 10.1.0.6

Jetzt können Sie eine Verbindung zum SQL Server herstellen mit cluster-listener als Name für die SQL Server-Datenbank anstelle des Namens der Instanzen. Diese Verbindung zeigt auf die Instanz, die derzeit aktiv ist.

Weitere Informationen

Hat Ihnen diese Seite weitergeholfen? Teilen Sie uns Ihr Feedback mit:

Feedback geben zu...

Compute Engine-Dokumentation