SQL Server AlwaysOn-Verfügbarkeitsgruppen mit synchronem Commit konfigurieren


Mit AlwaysOn Verfügbarkeitsgruppen (AGs) von Microsoft SQL Server können Sie Datenbanken über mehrere SQL Server Enterprise-Instanzen hinweg replizieren.

Ähnlich wie SQL Server-Failover-Clusterinstanzen verwenden AlwaysOn-Verfügbarkeitsgruppen Windows Server Failover Clustering (WSFC) zur Implementierung von Hochverfügbarkeit. Diese beiden Funktionen unterscheiden sich jedoch in mehreren Punkten:

AlwaysOn-Verfügbarkeitsgruppen Failover-Clusterinstanzen
Umfang des Failovers Gruppe von Datenbanken Instanz
Speicher Nicht freigegeben Freigegeben

Einen detaillierteren Vergleich finden Sie unter Vergleich von Failover-Clusterinstanzen und Verfügbarkeitsgruppen.

AlwaysOn-Verfügbarkeitsgruppen unterstützen mehrere Verfügbarkeitsmodi. In dieser Anleitung wird gezeigt, wie Sie AlwaysOn-Verfügbarkeitsgruppen im synchronen Commit-Modus bereitstellen können, um Hochverfügbarkeit für eine oder mehrere Datenbanken zu implementieren:

Bei der Einrichtung erstellen Sie drei VM-Instanzen. Die VM-Instanzen node-1 und node-2 dienen als WSFC-Knoten und führen SQL Server aus. Die dritte VM-Instanz witness wird verwendet, um ein Quorum in einem Failover-Szenario zu erreichen. Die drei VM-Instanzen werden auf drei Zonen verteilt und teilen sich ein gemeinsames Subnetz.

Mit einer SQL Server-AlwaysOn-Verfügbarkeitsgruppe wird eine Beispieldatenbank bookshelf synchron über die beiden SQL Server-Instanzen repliziert.

In einer lokalen Umgebung können Sie WSFC ARP-Ankündigungen ausführen lassen, wenn ein Failover auftritt, um Netzwerkgeräte über eine IP-Adressänderung zu benachrichtigen. Google Cloud ignoriert jedoch ARP-Ankündigungen. Daher müssen Sie eine der beiden folgenden Optionen implementieren:

Architektur

Architektur

In diesem Artikel wird davon ausgegangen, dass Sie Active Directory bereits in Google Cloud bereitgestellt haben und Grundkenntnisse in Sachen SQL Server, Active Directory und Compute Engine haben.

Ziele

Kosten

In dieser Anleitung werden kostenpflichtige Komponenten von Google Cloud verwendet, darunter:

Sie können mithilfe des Preisrechners eine Kostenschätzung für Ihre voraussichtliche Nutzung erstellen.

Vorbereitung

Zum Durcharbeiten dieser Anleitung benötigen Sie Folgendes:

  • Eine Active Directory-Domain mit mindestens einem Domain-Controller. Mit Managed Microsoft AD können Sie Active Directory-Domains erstellen. Alternativ können Sie eine benutzerdefinierte Active Directory-Umgebung in Compute Engine bereitstellen und eine private DNS-Weiterleitungszone einrichten, die DNS-Abfragen an Ihre Domain-Controller weiterleitet.
  • Einen Active Directory-Nutzer, der berechtigt ist, Computern der Domain beizutreten und sich über RDP anzumelden. Wenn Sie Managed Microsoft AD verwenden, können Sie den setupadmin-Nutzer verwenden.
  • Ein Google Cloud-Projekt und eine VPC mit Verbindung zu Ihren Active Directory-Domain-Controller.
  • Ein Subnetz, das für die WSFC-VM-Instanzen verwendet werden soll.

Sie benötigen außerdem ein Google Cloud-Projekt, um die Anleitung abzuschließen.

  1. Sign in to your Google Cloud account. If you're new to Google Cloud, create an account to evaluate how our products perform in real-world scenarios. New customers also get $300 in free credits to run, test, and deploy workloads.
  2. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Go to project selector

  3. Make sure that billing is enabled for your Google Cloud project.

  4. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Go to project selector

  5. Make sure that billing is enabled for your Google Cloud project.

Nach Abschluss dieser Anleitung können Sie weitere Kosten durch Löschen von erstellten Ressourcen vermeiden. Weitere Informationen finden Sie unter Bereinigen.

Projekt und Netzwerk vorbereiten

So bereiten Sie Ihr Google Cloud-Projekt und Ihre VPC für die Bereitstellung von SQL Server AlwaysOn-Verfügbarkeitsgruppen vor:

  1. Öffnen Sie Cloud Shell in der Google Cloud Console. Klicken Sie hierzu auf die Schaltfläche Cloud Shell aktivieren Aktivieren Sie Cloud Shell..

    Weiter zur Google Cloud Console

  2. Initialisieren Sie die folgenden Variablen:

    VPC_NAME=VPC_NAME
    SUBNET_NAME=SUBNET_NAME
    

    Dabei gilt:

    • VPC_NAME: Der Name Ihrer VPC
    • SUBNET_NAME: Der Name Ihres Subnetzes
  3. Legen Sie Ihre standardmäßige Projekt-ID fest:

    gcloud config set project PROJECT_ID
    

    Ersetzen Sie PROJECT_ID durch die ID Ihres Google Cloud-Projekts.

  4. Legen Sie Ihre Standardregion fest:

    gcloud config set compute/region REGION
    

    Ersetzen Sie REGION durch die ID der Region, in der die Bereitstellung erfolgen soll.

Firewallregeln erstellen

Damit Clients eine Verbindung zu SQL Server herstellen können, müssen Sie die Kommunikation zwischen den WSFC-Knoten zulassen. Damit der Load-Balancer Systemdiagnosen durchführt, müssen Sie verschiedene Firewallregeln erstellen. Verwenden Sie Netzwerk-Tags, um die Erstellung dieser Firewallregeln zu vereinfachen:

  • Die beiden WSFC-Knoten werden mit dem Tag wsfc-node gekennzeichnet.
  • Alle Server, einschließlich des Zeugen, werden mit dem Tag wsfc gekennzeichnet.

Erstellen Sie Firewallregeln, die diese Netzwerk-Tags verwenden:

  1. Kehren Sie zu Ihrer bestehenden Cloud Shell-Sitzung zurück.
  2. Erstellen Sie Firewallregeln für die WSFC-Knoten:

    SUBNET_CIDR=$(gcloud compute networks subnets describe $SUBNET_NAME --format=value\('ipCidrRange'\))
    
    gcloud compute firewall-rules create allow-all-between-wsfc-nodes \
    --direction=INGRESS \
    --action=allow \
    --rules=tcp,udp,icmp \
    --enable-logging \
    --source-tags=wsfc \
    --target-tags=wsfc \
    --network=$VPC_NAME \
    --priority 10000
    
    gcloud compute firewall-rules create allow-sql-to-wsfc-nodes \
    --direction=INGRESS \
    --action=allow \
    --rules=tcp:1433 \
    --enable-logging \
    --source-ranges=$SUBNET_CIDR \
    --target-tags=wsfc-node \
    --network=$VPC_NAME \
    --priority 10000
    
  3. Erstellen Sie eine Firewallregel, die Systemdiagnosen aus den IP-Bereichen der Google Cloud-Prober zulässt:

    gcloud compute firewall-rules create allow-health-check-to-wsfc-nodes \
       --direction=INGRESS \
       --action=allow \
       --rules=tcp \
       --source-ranges=130.211.0.0/22,35.191.0.0/16 \
       --target-tags=wsfc-node \
       --network=$VPC_NAME \
       --priority 10000
    

VM-Instanzen erstellen

Sie stellen jetzt zwei VM-Instanzen für den Failover-Cluster bereit. Immer wenn eine dieser VMs das primäre Replikat der SQL Server-Datenbank hostet, hostet der andere Knoten das sekundäre Replikat. Die beiden VM-Instanzen müssen:

  • Sich in derselben Region befinden, damit sie von einem internen Passthrough-Netzwerk-Load-Balancer (gilt nicht für DNN) aufgerufen werden können.
  • WSFC und SQL Server installiert haben.
  • Compute Engine-WSFC-Unterstützung aktiviert haben.

Sie verwenden ein SQL Server-Premium-Image, auf dem SQL Server 2022 vorinstalliert ist.

Für eine Tiebreak-Abstimmung und zur Erfüllung eines Quorums für das Failover-Szenario stellen Sie eine dritte VM bereit, die als Dateifreigabezeuge verwendet wird.

  1. Kehren Sie zu Ihrer bestehenden Cloud Shell-Sitzung zurück.
  2. Erstellen Sie ein Spezialisierungsskript für die WSFC-Knoten. Das Skript installiert das erforderliche Windows-Feature und erstellt Firewallregeln für WSFC und SQL Server:

    cat << "EOF" > specialize-node.ps1
    
    $ErrorActionPreference = "stop"
    
    # Install required Windows features
    Install-WindowsFeature Failover-Clustering -IncludeManagementTools
    Install-WindowsFeature RSAT-AD-PowerShell
    
    # Open firewall for WSFC
    netsh advfirewall firewall add rule name="Allow SQL Server health check" dir=in action=allow protocol=TCP localport=59997
    
    # Open firewall for SQL Server
    netsh advfirewall firewall add rule name="Allow SQL Server" dir=in action=allow protocol=TCP localport=1433
    
    # Open firewall for SQL Server replication
    netsh advfirewall firewall add rule name="Allow SQL Server replication" dir=in action=allow protocol=TCP localport=5022
    
    # Format data disk
    Get-Disk |
     Where partitionstyle -eq 'RAW' |
     Initialize-Disk -PartitionStyle MBR -PassThru |
     New-Partition -AssignDriveLetter -UseMaximumSize |
     Format-Volume -FileSystem NTFS -NewFileSystemLabel 'Data' -Confirm:$false
    
    # Create data and log folders for SQL Server
    md d:\Data
    md d:\Logs
    EOF
    
  3. Erstellen Sie die VM-Instanzen. Fügen Sie auf den beiden VMs, die als WSFC-Knoten dienen, ein zusätzliches Datenlaufwerk hinzu und aktivieren Sie das Windows Server Failover Clustering. Setzen Sie dazu den Metadatenschlüssel enable-wsfc auf true:

    REGION=$(gcloud config get-value compute/region)
    PD_SIZE=200
    MACHINE_TYPE=n2-standard-8
    
    gcloud compute instances create node-1 \
      --zone $REGION-a \
      --machine-type $MACHINE_TYPE \
      --subnet $SUBNET_NAME \
      --image-family sql-ent-2022-win-2022 \
      --image-project windows-sql-cloud \
      --tags wsfc,wsfc-node \
      --boot-disk-size 50 \
      --boot-disk-type pd-ssd \
      --boot-disk-device-name "node-1" \
      --create-disk=name=node-1-datadisk,size=$PD_SIZE,type=pd-ssd,auto-delete=no \
      --metadata enable-wsfc=true \
      --metadata-from-file=sysprep-specialize-script-ps1=specialize-node.ps1
    
    gcloud compute instances create node-2 \
      --zone $REGION-b \
      --machine-type $MACHINE_TYPE \
      --subnet $SUBNET_NAME \
      --image-family sql-ent-2022-win-2022 \
      --image-project windows-sql-cloud \
      --tags wsfc,wsfc-node \
      --boot-disk-size 50 \
      --boot-disk-type pd-ssd \
      --boot-disk-device-name "node-2" \
      --create-disk=name=node-2-datadisk,size=$PD_SIZE,type=pd-ssd,auto-delete=no \
      --metadata enable-wsfc=true \
      --metadata-from-file=sysprep-specialize-script-ps1=specialize-node.ps1
    
    gcloud compute instances create "witness" \
      --zone $REGION-c \
      --machine-type n2-standard-2 \
      --subnet $SUBNET_NAME \
      --image-family=windows-2022 \
      --image-project=windows-cloud \
      --tags wsfc \
      --boot-disk-size 50 \
      --boot-disk-type pd-ssd \
      --metadata sysprep-specialize-script-ps1="add-windowsfeature FS-FileServer"
    
  4. Führen Sie für jede der drei VM-Instanzen folgende Schritte aus, um sie jeweils mit Active Directory zu verknüpfen:

    1. Überwachen Sie den Initialisierungsprozess der VM. Rufen Sie dazu die Ausgabe des seriellen Ports auf:

      gcloud compute instances tail-serial-port-output NAME
      

      Ersetzen Sie NAME durch den Namen der VM-Instanz.

      Warten Sie etwa drei Minuten, bis die Ausgabe Instance setup finished angezeigt wird, und drücken Sie dann STRG + C. Jetzt kann die VM-Instanz verwendet werden.

    2. Erstellen Sie einen Nutzernamen und ein Passwort für die VM-Instanz.

    3. Stellen Sie mithilfe von Remote Desktop eine Verbindung zur VM her und melden Sie sich mit dem Nutzernamen und dem Passwort an, den bzw. das Sie im vorherigen Schritt erstellt haben.

    4. Klicken Sie mit der rechten Maustaste auf Start (oder drücken Sie Win + X) und klicken Sie anschließend auf Windows PowerShell (Administrator).

    5. Bestätigen Sie die Eingabeaufforderung für erhöhte Rechte durch Klicken auf Ja.

    6. Verbinden Sie den Computer mit Ihrer Active Directory-Domain und starten Sie ihn neu:

      Add-Computer -Domain DOMAIN -Restart
      

      Ersetzen Sie DOMAIN durch den DNS-Namen Ihrer Active Directory-Domain.

      Warten Sie etwa eine Minute, bis der Neustart abgeschlossen ist.

Cluster-IP-Adressen reservieren

Jetzt reservieren Sie zwei statische IP-Adressen auf Ihrer VPC. Eine IP-Adresse wird als WSFC-Cluster-IP-Adresse verwendet, die andere nutzt der interne Load-Balancer.

  1. Reservieren Sie eine statische IP-Adresse, die Sie als Cluster-IP-Adresse verwenden:

    gcloud compute addresses create wsfc-cluster \
      --subnet $SUBNET_NAME \
      --region $(gcloud config get-value compute/region) && \
    CLUSTER_ADDRESS=$(gcloud compute addresses describe wsfc-cluster \
        --region $(gcloud config get-value compute/region) \
        --format=value\(address\)) && \
    echo "Cluster IP: $CLUSTER_ADDRESS"
    

    Notieren Sie sich die IP-Adresse. Sie benötigen sie später.

  2. Reservieren Sie eine statische IP-Adresse für den internen Load-Balancer und erfassen Sie die Adresse in einer neuen Umgebungsvariablen namens LOADBALANCER_ADDRESS:

    gcloud compute addresses create wsfc \
      --subnet $SUBNET_NAME \
      --region $(gcloud config get-value compute/region)
    
    LOADBALANCER_ADDRESS=$(gcloud compute addresses describe wsfc \
      --region $(gcloud config get-value compute/region) \
      --format=value\(address\)) && \
    echo "Load Balancer IP: $LOADBALANCER_ADDRESS"
    

    Notieren Sie sich die IP-Adresse. Sie benötigen sie später.

Ihr Projekt und Ihre VPC sind jetzt für die Bereitstellung von WSFC und SQL Server bereit.

Failovercluster bereitstellen

Sie stellen jetzt mit den VM-Instanzen ein WSFC und SQL Server bereit.

SQL Server vorbereiten

Erstellen Sie ein neues Nutzerkonto in Active Directory für SQL Server:

  1. Stellen Sie mithilfe von Remote Desktop eine Verbindung zu node-1 her. Melden Sie sich mit Ihrem Domainnutzerkonto an.
  2. Klicken Sie mit der rechten Maustaste auf Start (oder drücken Sie Win + X) und klicken Sie anschließend auf Windows PowerShell (Administrator).
  3. Bestätigen Sie die Eingabeaufforderung für erhöhte Rechte durch Klicken auf Ja.
  4. Erstellen Sie ein Domainnutzerkonto für SQL Server und den SQL-Agent und weisen Sie ein Passwort zu:

    $Credential = Get-Credential -UserName sql_server -Message 'Enter password'
    New-ADUser `
      -Name "sql_server" `
      -Description "SQL Admin account." `
      -AccountPassword $Credential.Password `
      -Enabled $true -PasswordNeverExpires $true
    

Führen Sie folgende Schritte sowohl für node-1 als auch für node-2 aus, um SQL Server zu konfigurieren:

  1. Klicken Sie mit der rechten Maustaste auf Start (oder drücken Sie Win + X) und klicken Sie anschließend auf Windows PowerShell (Administrator).

    Benennen Sie die SQL-Serverinstanz so um, dass ihr Name mit dem Hostnamen übereinstimmt:

    $OLD_NAME = Invoke-Sqlcmd -Query "
      select @@SERVERNAME;
      GO" | ConvertTo-Csv | SELECT -Skip 2
    $OLD_NAME = $OLD_NAME.Replace('"', '')
    Invoke-Sqlcmd -Query "
      sp_dropserver '$OLD_NAME';
      GO
      sp_addserver '$env:computername', local;
      GO"
    Restart-Service -Name MSSQLSERVER
    
  2. Öffnen Sie den SQL Server-Konfigurations-Manager.

  3. Wählen Sie im Navigationsbereich die Option SQL Server-Dienste aus.

  4. Klicken Sie in der Liste der Dienste mit der rechten Maustaste auf SQL Server (MSSQLSERVER) und wählen Sie Eigenschaften.

  5. Ändern Sie unter Anmeldung als das Konto:

    • Kontoname: DOMAIN\sql_server, wobei DOMAIN der NetBIOS-Name Ihrer Active Directory-Domain ist.
    • Passwort: Geben Sie das Passwort ein, das Sie zuvor ausgewählt haben.
  6. Klicken Sie auf OK.

  7. Wenn Sie aufgefordert werden, SQL Server neu zu starten, wählen Sie Ja.

SQL Server wird jetzt unter einem Domainnutzerkonto ausgeführt.

Dateifreigaben erstellen

Erstellen Sie zwei Dateifreigaben auf witness, damit die VM-Instanz SQL Server-Back-ups speichern und als Dateifreigabenzeuge fungieren kann:

  1. Stellen Sie mithilfe von Remote Desktop eine Verbindung zu witness her. Melden Sie sich mit Ihrem Domainnutzerkonto an.
  2. Klicken Sie mit der rechten Maustaste auf Start (oder drücken Sie Win + X) und klicken Sie anschließend auf Windows PowerShell (Administrator).
  3. Bestätigen Sie die Eingabeaufforderung für erhöhte Rechte durch Klicken auf Ja.
  4. Erstellen Sie eine Zeugendateifreigabe und gewähren Sie sich und den beiden WSFC-Knoten Zugriff auf die Dateifreigabe:

    New-Item "C:\QWitness" –type directory
    
    icacls C:\QWitness\ /grant 'node-1$:(OI)(CI)(M)'
    icacls C:\QWitness\ /grant 'node-2$:(OI)(CI)(M)'
    
    New-SmbShare `
      -Name QWitness `
      -Path "C:\QWitness" `
      -Description "SQL File Share Witness" `
      -FullAccess $env:username,node-1$,node-2$
    
  5. Erstellen Sie eine weitere Dateifreigabe zum Speichern von Back-ups und gewähren Sie SQL Server uneingeschränkten Zugriff:

    New-Item "C:\Backup" –type directory
    New-SmbShare `
      -Name Backup `
      -Path "C:\Backup" `
      -Description "SQL Backup" `
      -FullAccess  $env:USERDOMAIN\sql_server
    

WSFC bereitstellen

Sie können nun den Failovercluster erstellen:

  1. Kehren Sie zur Remote Desktop-Sitzung auf node-1 zurück.
  2. Klicken Sie mit der rechten Maustaste auf Start (oder drücken Sie Win + X) und klicken Sie anschließend auf Windows PowerShell (Administrator).
  3. Bestätigen Sie die Eingabeaufforderung für erhöhte Rechte durch Klicken auf Ja.
  4. Erstellen Sie einen neuen Cluster:

    • Für Load Balancer-Konfiguration
    New-Cluster `
      -Name sql-cluster `
      -Node node-1,node-2 `
      -NoStorage `
      -StaticAddress CLUSTER_ADDRESS
    

    Ersetzen Sie CLUSTER_ADDRESS durch die zuvor erstellte Cluster-IP-Adresse.

    • Für DNN-Konfiguration
    New-Cluster `
      -Name sql-cluster `
      -Node node-1,node-2 `
      -NoStorage `
      -ManagementPointNetworkType Distributed
    
  5. Kehren Sie zur PowerShell-Sitzung auf witness zurück und gewähren Sie dem virtuellen Computerobjekt des Clusters die Berechtigung für den Zugriff auf die Dateifreigabe:

    icacls C:\QWitness\ /grant 'sql-cluster$:(OI)(CI)(M)'
    Grant-SmbShareAccess `
      -Name QWitness `
      -AccountName 'sql-cluster$' `
      -AccessRight Full `
      -Force
    
  6. Kehren Sie zur PowerShell-Sitzung auf node-1 zurück und konfigurieren Sie den Cluster so, dass die Dateifreigabe auf witness als Clusterquorum verwendet wird:

    Set-ClusterQuorum -FileShareWitness \\witness\QWitness
    
  7. Prüfen Sie, ob der Cluster erfolgreich erstellt wurde:

    Test-Cluster
    

    Möglicherweise werden einige Warnungen angezeigt, die ignoriert werden können:

    WARNING: System Configuration - Validate All Drivers Signed: The test reported some warnings..
    WARNING: Network - Validate Network Communication: The test reported some warnings..
    WARNING:
    Test Result:
    HadUnselectedTests, ClusterConditionallyApproved
    Testing has completed for the tests you selected. You should review the warnings in the Report.  A cluster solution is
    supported by Microsoft only if you run all cluster validation tests, and all tests succeed (with or without warnings).
    

    Sie können auch das Failovercluster-Manager-MMC-Snap-In starten, um den Zustand des Clusters zu prüfen. Führen Sie dazu cluadmin.msc aus.

  8. Wenn Sie Managed AD verwenden, fügen Sie das von WSFC verwendete Computerkonto der Gruppe Cloud Service Domain Join-Konten hinzu, damit der Computer sich mit der Domain verknüpfen kann:

    Add-ADGroupMember `
      -Identity "Cloud Service Domain Join Accounts" `
      -Members sql-cluster$
    
  9. Aktivieren Sie AlwaysOn-Verfügbarkeitsgruppen auf beiden Knoten:

    Enable-SqlAlwaysOn -ServerInstance node-1 -Force
    Enable-SqlAlwaysOn -ServerInstance node-2 -Force
    

Verfügbarkeitsgruppe erstellen

Sie erstellen jetzt eine Beispieldatenbank bookshelf, fügen sie in eine neue Verfügbarkeitsgruppe namens bookshelf-ag ein und konfigurieren die Hochverfügbarkeit.

Datenbank erstellen

Neue Datenbank erstellen. Für diese Anleitung muss die Datenbank keine Daten enthalten.

  1. Kehren Sie zur Remote Desktop-Sitzung auf node-1 zurück.
  2. Öffnen Sie SQL Server Management Studio.
  3. Prüfen Sie im Dialogfeld Mit Server verbinden, ob der Servername auf NODE-1 festgelegt ist, und wählen Sie Verbinden aus.
  4. Wählen Sie im Menü Datei > Neu > Abfrage mit aktueller Verbindung aus.
  5. Fügen Sie das folgende SQL-Skript in den Editor ein:

    -- Create a sample database
    CREATE DATABASE bookshelf ON PRIMARY (
      NAME = 'bookshelf',
      FILENAME='d:\Data\bookshelf.mdf',
      SIZE = 256MB,
      MAXSIZE = UNLIMITED,
      FILEGROWTH = 256MB)
    LOG ON (
      NAME = 'bookshelf_log',
      FILENAME='d:\Logs\bookshelf.ldf',
      SIZE = 256MB,
      MAXSIZE = UNLIMITED,
      FILEGROWTH = 256MB)
    GO
    
    USE [bookshelf]
    SET ANSI_NULLS ON
    SET QUOTED_IDENTIFIER ON
    GO
    
    -- Create sample table
    CREATE TABLE [dbo].[Books] (
      [Id] [bigint] IDENTITY(1,1) NOT NULL,
      [Title] [nvarchar](max) NOT NULL,
      [Author] [nvarchar](max) NULL,
      [PublishedDate] [datetime] NULL,
      [ImageUrl] [nvarchar](max) NULL,
      [Description] [nvarchar](max) NULL,
      [CreatedById] [nvarchar](max) NULL,
      CONSTRAINT [PK_dbo.Books] PRIMARY KEY CLUSTERED ([Id] ASC) WITH (
        PAD_INDEX = OFF,
        STATISTICS_NORECOMPUTE = OFF,
        IGNORE_DUP_KEY = OFF,
        ALLOW_ROW_LOCKS = ON,
        ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
    ) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY]
    GO
    
    -- Create a backup
    EXEC dbo.sp_changedbowner @loginame = 'sa', @map = false;
      ALTER DATABASE [bookshelf] SET RECOVERY FULL;
      GO
      BACKUP DATABASE bookshelf to disk = '\\witness\Backup\bookshelf.bak' WITH INIT
    GO
    

    Das Skript erstellt eine neue Datenbank mit einer einzelnen Tabelle und führt ein erstes Back-up in witness durch.

  6. Wählen Sie Ausführen, um das SQL-Skript auszuführen.

Hochverfügbarkeit konfigurieren

  1. Klicken Sie im Fenster Object Explorer mit der rechten Maustaste auf AlwaysOn-Hochverfügbarkeit und wählen Sie dann den New Availability Group Wizard aus.
  2. Legen Sie auf der Seite Optionen angeben den Namen der Verfügbarkeitsgruppe auf bookshelf-ag fest und wählen Sie Weiter.
  3. Wählen Sie auf der Seite Datenbanken auswählen die Datenbank bookshelf und dann Weiter aus.
  4. Wählen Sie auf der Seite Replikate angeben den Tab Replikate aus:

    1. Wählen Sie Replikat hinzufügen aus.
    2. Geben Sie im Dialogfeld Mit Server verbinden den Servernamen node-2 ein und wählen Sie Verbinden aus.

      Die Liste der Verfügbarkeitsreplikate enthält jetzt die SQL Server-Instanzen node-1 und node-2.

    3. Setzen Sie den Verfügbarkeitsmodus für beide Instanzen auf Synchrounous-Commit.

    4. Setzen Sie für beide Instanzen das automatische Failover auf Aktiviert.

    5. Wählen Sie den Tab Listener **.

      1. Wählen Sie Listener für Verfügbarkeitsgruppe erstellen.
      2. Geben Sie die folgenden Einstellungen ein:

        • Listener-DNS-Name: bookshelf.
        • Port: 1433
        • Netzwerkmodus: Static IP
      3. Wählen Sie Hinzufügen und geben Sie die IP-Adresse des Load-Balancers ein, die Sie zuvor erstellt haben. Wählen Sie dann OK.

    6. Wählen Sie Weiter aus.

  5. Wählen Sie auf der Seite Datensynchronisierung auswählen die Option Automatisches Seeding aus.

  6. Prüfen Sie auf der Seite Validierung, ob alle Prüfungen erfolgreich abgeschlossen wurden.

  7. Wählen Sie auf der Seite Zusammenfassung die Option Fertigstellen aus.

  8. Wählen Sie auf der Seite Ergebnisse die Option Schließen.

Systemdiagnosen konfigurieren

Als letzten Schritt konfigurieren Sie den Cluster so, dass ein Endpunkt für Systemdiagnosen zur Verfügung steht, der von einem internen Load-Balancer verwendet werden kann:

  1. Kehren Sie zur PowerShell-Sitzung auf node-1 zurück.
  2. Initialisieren Sie eine Variable mit der IP-Adresse des Load-Balancers.

    $LoadBalancerIP = 'IP_ADDRESS'
    

    Ersetzen Sie IP_ADDRESS durch die IP-Adresse der zuvor reservierten wsfc-Adresse.

  3. Konfigurieren Sie den Failovercluster, der auf den Systemdiagnosedienst reagieren soll:

    $SqlIpAddress = Get-ClusterResource |
      Where-Object {$_.ResourceType -eq "IP Address"} |
      Where-Object {$_.Name.StartsWith("bookshelf")}
    
    $SqlIpAddress | Set-ClusterParameter -Multiple @{
     'Address'= $LoadBalancerIP;
     'ProbePort'= 59997;
     'SubnetMask'='255.255.255.255';
     'Network'= (Get-ClusterNetwork).Name;
     'EnableDhcp'=0; }
    
  4. Starten Sie die Clusterressource neu:

    $SqlIpAddress | Stop-ClusterResource
    $SqlIpAddress | Start-ClusterResource
    

Internen Load-Balancer erstellen

Um einen einzelnen Endpunkt für SQL Server-Clients bereitzustellen, stellen Sie jetzt einen internen Load-Balancer bereit, der eine Systemdiagnose nutzt und dafür sorgt, dass der Traffic an den aktiven Knoten des WSFC weitergeleitet wird.

  1. Kehren Sie zu Ihrer bestehenden Cloud Shell-Sitzung zurück.
  2. Erstellen Sie zwei nicht verwaltete Instanzgruppen, eine pro Zone, und fügen Sie den beiden Knoten den folgenden Gruppen hinzu:

    REGION=$(gcloud config get-value compute/region)
    
    gcloud compute instance-groups unmanaged create wsfc-group-1 --zone $REGION-a
    gcloud compute instance-groups unmanaged add-instances wsfc-group-1 --zone $REGION-a \
      --instances node-1
    
    gcloud compute instance-groups unmanaged create wsfc-group-2 --zone $REGION-b
    gcloud compute instance-groups unmanaged add-instances wsfc-group-2 --zone $REGION-b \
      --instances node-2
    
  3. Erstellen Sie eine Systemdiagnose, damit der Load-Balancer den aktiven Knoten ermitteln kann.

    gcloud compute health-checks create tcp wsfc-healthcheck \
      --check-interval="2s" \
      --healthy-threshold=1 \
      --unhealthy-threshold=2 \
      --port=59997 \
      --timeout="1s"
    

    Die Systemdiagnose prüft Port 59997, den Port, den Sie zuvor als ProbePort für den Listener der Verfügbarkeitsgruppe konfiguriert haben.

  4. Erstellen Sie einen Back-End-Dienst und fügen Sie die beiden Instanzgruppen hinzu:

    gcloud compute backend-services create wsfc-backend \
      --load-balancing-scheme internal \
      --region $(gcloud config get-value compute/region) \
      --health-checks wsfc-healthcheck \
      --protocol tcp
    
    gcloud compute backend-services add-backend wsfc-backend \
      --instance-group wsfc-group-1 \
      --instance-group-zone $REGION-a \
      --region $REGION
    
    gcloud compute backend-services add-backend wsfc-backend \
      --instance-group wsfc-group-2 \
      --instance-group-zone $REGION-b \
      --region $REGION
    
  5. Internen Load-Balancer erstellen:

    gcloud compute forwarding-rules create wsfc-sql \
      --load-balancing-scheme internal \
      --address $LOADBALANCER_ADDRESS \
      --ports 1433 \
      --network $VPC_NAME \
      --subnet $SUBNET_NAME \
      --region $REGION \
      --backend-service wsfc-backend
    

Sie können jetzt mit dem internen Load-Balancer und dem DNS-Namen bookshelf eine Verbindung zum SQL Server-Verfügbarkeitsgruppen-Listener herstellen.

Wenn Sie mehrere Verfügbarkeitsgruppen in einem einzelnen Failover-Cluster erstellen möchten, müssen Sie einen separaten Load-Balancer mit einer eigenen Systemdiagnose pro Verfügbarkeitsgruppe verwenden. Das bedeutet für jede Verfügbarkeitsgruppe:

  1. Eine reservierte interne IP-Adresse (eine für jede Verfügbarkeitsgruppe), die für den Listener und den internen Load-Balancer verwendet werden soll.

  2. Ein separater Load-Balancer (einer für jede Verfügbarkeitsgruppe) mit einer eigenen IP-Adresse, die im vorherigen Schritt reserviert wurde.

  3. Ein separater Prüfungsport (z. B. 59997, 59998 und 59999 für jede Verfügbarkeitsgruppe) und eine separate Firewallregel, um Traffic auf diesen Prüfungsports zuzulassen.

  4. Eine separate Systemdiagnoseregel für jede Verfügbarkeitsgruppe mit den jeweiligen Prüfungsports.

DNN-Listener für eine Verfügbarkeitsgruppe konfigurieren

Ähnlich wie bei der internen Load Balancing-Konfiguration dient der DNN-Listener als einzelner Endpunkt für SQL Server-Clients.

  1. Kehren Sie zur PowerShell-Sitzung auf node-1 zurück.
  2. Führen Sie das folgende Script aus, um einen DNN-Listener zu erstellen.

      $Ag='bookshelf-ag'
      $Port='DNN_PORT'
      $Dns='DNN_NAME'
    
      # create the DNN resource with the port as the resource name
      Add-ClusterResource -Name $Port -ResourceType "Distributed Network Name" -Group $Ag
    
      # set the DNS name of the DNN resource
      Get-ClusterResource -Name $Port | Set-ClusterParameter -Name DnsName -Value $Dns
    
      # start the DNN resource
      Start-ClusterResource -Name $Port
    
      # add the Dependency from availability group resource to the DNN resource
      Set-ClusterResourceDependency -Resource $Ag -Dependency "[$Port]"
    
      #bounce the AG resource
      Stop-ClusterResource -Name $Ag
      Start-ClusterResource -Name $Ag
    

    Ersetzen Sie DNN_PORT durch den DNN-Listener-Port. Der DNN-Listenerport muss mit einem eindeutigen Port konfiguriert sein. Weitere Informationen finden Sie unter Überlegungen zum Anschluss.

    Ersetzen Sie DNN_NAME durch den Namen des DNN-Listeners.

  3. Erstellen Sie Firewallregeln für den DNN-Listener-Port sowohl auf node-1 als auch auf node-2.

      netsh advfirewall firewall add rule name="Allow DNN listener" dir=in action=allow protocol=TCP localport=DNN_PORT
    

Failover testen

Jetzt können Sie testen, ob das Failover wie erwartet funktioniert:

  1. Kehren Sie zur PowerShell-Sitzung auf witness zurück.
  2. Führen Sie das folgende Skript aus:

    while ($True){
      $Conn = New-Object System.Data.SqlClient.SqlConnection
      $Conn.ConnectionString = "Server=LISTENER;Integrated Security=true;Initial Catalog=master"
      $Conn.Open()
    
      $Cmd = New-Object System.Data.SqlClient.SqlCommand
      $Cmd.Connection = $Conn
      $Cmd.CommandText = "SELECT @@SERVERNAME"
    
      $Adapter = New-Object System.Data.SqlClient.SqlDataAdapter $Cmd
      $Data = New-Object System.Data.DataSet
      $Adapter.Fill($Data) | Out-Null
      $Data.Tables[0] + (Get-Date -Format "MM/dd/yyyy HH:mm:ss")
    
      Start-Sleep -Seconds 2
    }
    

    Ersetzen Sie LISTENER durch den DNS-Namen des Listeners oder DNN-Listeners und den Port der Verfügbarkeitsgruppe.

    Alle zwei Sekunden stellt das Skript über den Verfügbarkeitsgruppen-Listener oder DNN-Listener eine Verbindung zu SQL Server her und fragt den Servernamen ab.

    Lassen Sie das Skript laufen.

  3. Kehren Sie zur Remote Desktop-Sitzung auf node-1 zurück, um einen Failover auszulösen:

    1. Gehen Sie in SQL Server Management Studio zu Always On-Hochverfügbarkeit > Verfügbarkeitsgruppen > bookshelf-ag (primär) und klicken Sie mit der rechten Maustaste auf den Knoten.
    2. Wählen Sie Failover.
    3. Prüfen Sie auf der SeiteNeues primäres Replikat auswählen ob node-2 als neues primäres Replikat ausgewählt ist und dass die Spalte Failover-Bereitschaft No data loss angibt. Klicken Sie dann auf Weiter.
    4. Wählen Sie auf der Seite Mit Replikat verbinden die Option Verbinden.
    5. Prüfen Sie im Dialogfeld Verbindung zum Server herstellen, ob der Servername node-2 lautet, und klicken Sie auf Verbinden.
    6. Wählen Sie Weiter und dann Fertigstellen.
    7. Prüfen Sie auf der Seite Ergebnisse, ob der Failover erfolgreich war.
  4. Kehren Sie zur PowerShell-Sitzung auf witness zurück.

  5. Beobachten Sie die Ausgabe des laufenden Skripts. Der Servername ändert sich aufgrund des Failovers von node-1 in node-2.

  6. Beenden Sie das Skript durch Druck auf Ctrl+C.

Bereinigen

Nachdem Sie die Anleitung abgeschlossen haben, können Sie die erstellten Ressourcen bereinigen, damit sie keine Kontingente mehr nutzen und keine Gebühren mehr anfallen. In den folgenden Abschnitten erfahren Sie, wie Sie diese Ressourcen löschen oder deaktivieren.

Projekt löschen

Am einfachsten vermeiden Sie weitere Kosten, wenn Sie das zum Ausführen der Anleitung erstellte Projekt löschen.

So löschen Sie das Projekt:

  1. In the Google Cloud console, go to the Manage resources page.

    Go to Manage resources

  2. In the project list, select the project that you want to delete, and then click Delete.
  3. In the dialog, type the project ID, and then click Shut down to delete the project.

Nächste Schritte