SQL Server AlwaysOn-Verfügbarkeitsgruppen mit synchronem Commit mit einem internen Load Balancer konfigurieren

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

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

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

Einen detaillierteren Vergleich finden Sie unter Vergleich von Failoverclusterinstanzen und Verfügbarkeitsgruppen.

AlwaysOn-Verfügbarkeitsgruppen unterstützen mehrere Verfügbarkeitsmodi. In dieser Anleitung wird gezeigt, wie Sie Always On-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 Clusterknoten 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 Windows-Clusterumgebung lösen ARP-Ankündigungen (Address Resolution Protocol) IP-Adressen-Failover aus. Google Cloudignoriert jedoch ARP-Ankündigungen. Daher müssen Sie eine der beiden folgenden Optionen implementieren: einen internen Load Balancer und einen verteilten Netzwerknamen (Distributed Network Name, DNN) verwenden.

In diesem Artikel wird davon ausgegangen, dass Sie Active Directory bereits in Google Cloudbereitgestellt haben und über Grundkenntnisse zu SQL Server, Active Directory und Compute Engine verfügen. Weitere Informationen zu Active Directory auf Google Cloudfinden Sie im Abschnitt Vorbereitung.

Mit einer SQL Server-AlwaysOn-Verfügbarkeitsgruppe wird eine Beispieldatenbank bookshelf synchron über die beiden SQL Server-Instanzen repliziert. Ein interner Load-Balancer sorgt dafür, dass der Traffic an den aktiven Knoten weitergeleitet wird.

Weitere Informationen zum Windows Server Failover Clustering mit einem internen Load Balancer finden Sie unter Failover-Clustering.

Architektur

Dieses Diagramm enthält Folgendes:

  • Zwei VM-Instanzen in derselben Region und verschiedenen Zonen für den Failover-Cluster namens node-1 und node-2. Auf dem einen wird das primäre Replikat der SQL Server-Datenbank gehostet, auf dem anderen das sekundäre Replikat.
  • Eine dritte VM namens witness dient als Dateifreigabezeuge, um eine ausschlaggebende Stimme bereitzustellen und ein Quorum für das Failover zu erreichen.
  • Ein interner Load-Balancer vor dem Cluster bietet einen einzelnen Endpunkt für SQL Server-Clients und verwendet eine Systemdiagnose, um sicherzustellen, dass der Traffic an den aktiven Knoten weitergeleitet wird.

Ziele

In dieser Anleitung werden die folgenden Ziele verfolgt:

Kosten

In dieser Anleitung werden kostenpflichtige Komponenten von Google Cloudverwendet, darunter:

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

Hinweis

Achten Sie darauf, dass die folgenden Voraussetzungen erfüllt sind, um die Aufgaben in dieser Anleitung auszuführen:

  1. Melden Sie sich in Ihrem Google Cloud -Konto an. Wenn Sie mit Google Cloudnoch nicht vertraut sind, erstellen Sie einfach ein Konto, um die Leistungsfähigkeit unserer Produkte in der Praxis sehen und bewerten zu können. Neukunden erhalten außerdem ein Guthaben von 300 $, um Arbeitslasten auszuführen, zu testen und bereitzustellen.
  2. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Roles required to select or create a project

    • Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
    • Create a project: To create a project, you need the Project Creator role (roles/resourcemanager.projectCreator), which contains the resourcemanager.projects.create permission. Learn how to grant roles.

    Go to project selector

  3. Verify 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.

    Roles required to select or create a project

    • Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
    • Create a project: To create a project, you need the Project Creator role (roles/resourcemanager.projectCreator), which contains the resourcemanager.projects.create permission. Learn how to grant roles.

    Go to project selector

  5. Verify that billing is enabled for your Google Cloud project.

  6. Sie haben eine Active Directory-Domain mit mindestens einem Domaincontroller. Sie können mit Managed Microsoft AD eine Active Directory-Domain 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 Domaincontroller weiterleitet.
  7. Sie haben einen Active Directory-Nutzer, der berechtigt ist, Computer mit der Domain zu verbinden und sich über RDP anzumelden. Wenn Sie Managed Microsoft AD verwenden, können Sie den setupadmin-Nutzer verwenden. Weitere Informationen zum Bereitstellen von Active Directory-Nutzerkonten finden Sie unter Active Directory-Nutzerkonten bereitstellen.
  8. Ein Google Cloud Projekt und eine Virtual Private Cloud (VPC) mit Verbindung zu Ihren Active Directory-Domaincontrollern.
  9. Ein Subnetz, das für die VM-Instanzen des Windows Server-Failoverclusters verwendet werden soll.
Nach Abschluss dieser Anleitung können Sie weitere Kosten vermeiden, indem Sie die erstellten Ressourcen löschen. Weitere Informationen finden Sie unter Bereinigen.

Projekt und Netzwerk vorbereiten

Wenn Sie Ihre SQL Server AlwaysOn-Verfügbarkeitsgruppen bereitstellen möchten, müssen Sie IhrGoogle Cloud -Projekt und Ihre VPC für die Bereitstellung vorbereiten. In den folgenden Abschnitten wird ausführlich beschrieben, wie Sie das tun können.

Projekt und Region konfigurieren

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

  1. Öffnen Sie in der Google Cloud Console Cloud Shell. Klicken Sie hierzu auf den Button Cloud Shell aktivieren Aktivieren Sie Cloud Shell..

    Rufen Sie die Google Cloud Console auf.

  2. Initialisieren Sie die folgenden Variablen.

    VPC_NAME=VPC_NAME
    SUBNET_NAME=SUBNET_NAME
    

    Ersetzen Sie Folgendes:

    • VPC_NAME: Der Name Ihrer VPC
    • SUBNET_NAME: 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 Projekts von Google Cloud .

  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 und die Kommunikation zwischen den Clusterknoten möglich ist, müssen Sie mehrere Firewallregeln erstellen. Sie können Netzwerk-Tags verwenden, um die Erstellung dieser Firewallregeln zu vereinfachen:

  • Die beiden Clusterknoten werden mit dem Tag wsfc-node annotiert.
  • Alle Server (einschließlich des witness) werden mit dem Tag wsfc annotiert.

So erstellen Sie Firewallregeln, die diese Netzwerk-Tags verwenden:

  1. Kehren Sie zu Ihrer bestehenden Cloud Shell-Sitzung zurück.
  2. Erstellen Sie Firewallregeln, die Traffic zwischen Clusterknoten zulassen.

    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
    

VM-Instanzen erstellen

Erstellen und stellen Sie zwei VM-Instanzen für den Failovercluster 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 aufgerufen werden können.
  • Windows Server Failover Cluster 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.

Um eine ausschlaggebende Stimme bereitzustellen und ein Quorum für das Failover-Szenario zu erreichen, stellen Sie eine dritte VM bereit, die als Dateifreigabezeuge verwendet wird. Führen Sie dazu die folgenden Schritte aus:

  1. Kehren Sie zu Ihrer bestehenden Cloud Shell-Sitzung zurück.
  2. Erstellen Sie ein Spezialisierungsskript für die WSFC-Knoten. Mit diesem Skript werden die erforderlichen Windows-Features installiert und Firewallregeln für WSFC und SQL Server erstellt.

    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 WSFC health check" dir=in action=allow protocol=TCP localport=59998
    
    # 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. Hängen Sie auf den beiden Clusterknoten ein Datenlaufwerk an und setzen Sie den Metadatenschlüssel enable-wsfc auf true. Mit dieser Aktion wird Windows Server Failover Clustering aktiviert und ein lokaler Listener am Standardport (59998) konfiguriert.

    REGION=$(gcloud config get-value compute/region)
    ZONE1=ZONE1
    ZONE2=ZONE2
    ZONE3=ZONE3
    PD_SIZE=200
    MACHINE_TYPE=n2-standard-8
    
    gcloud compute instances create node-1 \
      --zone $ZONE1 \
      --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 $ZONE2 \
      --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 $ZONE3 \
      --machine-type e2-medium \
      --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"
    

    Ersetzen Sie ZONE1, ZONE2 und ZONE3 durch die Zonen, die Sie verwenden.

  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 einige 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.

    7. Geben Sie die Anmeldedaten eines Kontos ein, das berechtigt ist, eine VM der Domain hinzuzufügen.

      Warten Sie, bis die VM neu gestartet wurde. Sie haben die VM-Instanz jetzt mit Active Directory verknüpft.

Statische IP-Adressen reservieren

Jetzt reservieren Sie zwei statische IP-Adressen auf Ihrer VPC. Eine IP-Adresse wird als Standard-WSFC-Cluster-IP-Adresse verwendet, die andere dient als statische IP-Adresse für den Listener der SQL Server-Verfügbarkeitsgruppe.

In einem WSFC-Cluster dient die Cluster-IP-Adresse hauptsächlich administrativen Zwecken und dem Zugriff auf Clusterressourcen. Diese virtuelle IP-Adresse wird dem Cluster selbst zugewiesen. So können Administratoren den Cluster verwalten und Aufgaben wie das Konfigurieren von Clustereinstellungen, das Überwachen des Zustands von Knoten und das Verwalten von Failover-Prozessen ausführen.

Im Kontext der SQL Server-Verfügbarkeitsgruppe ist ein Listener ein virtueller Netzwerkname (VNN) und eine IP-Adresse, über die Clients eine Verbindung zur Verfügbarkeitsgruppe herstellen können, ohne wissen zu müssen, welcher Server der primäre Knoten ist.

Ein interner Load Balancer benötigt eine interne IP-Adresse, um internen Traffic effizient weiterzuleiten und Hochverfügbarkeit und Load Balancing im Kontext eines WSFC-Clusters zu unterstützen. Der interne Load-Balancer sorgt dafür, dass Anfragen immer an das aktuelle primäre Replikat des Clusters weitergeleitet werden. Bei Failover-Ereignissen erkennt der Load Balancer Änderungen am primären Replikat und leitet Clientverbindungen an das neue primäre Replikat weiter, ohne dass ein manueller Eingriff erforderlich ist. So werden Ausfallzeiten minimiert und die kontinuierliche Verfügbarkeit der Datenbankdienste sichergestellt.

Im Kontext eines WSFC mit SQL Server Always On-Verfügbarkeitsgruppen werden sowohl reservierte interne statische IP-Adressen für die standardmäßige WSFC-Cluster-IP-Adresse als auch für den Verfügbarkeitsgruppen-Listener von zugehörigen internen Load-Balancern verwendet.

  1. So reservieren Sie zwei statische IP-Adressen in Ihrer VPC:

    gcloud compute addresses create wsfc-cluster-ip \
      --subnet $SUBNET_NAME \
      --region $(gcloud config get-value compute/region) && \
    CLUSTER_IP=$(gcloud compute addresses describe wsfc-cluster-ip \
        --region $(gcloud config get-value compute/region) \
        --format=value\(address\)) && \
    echo "cluster IP: $CLUSTER_IP"
    
  2. Ersetzen Sie die Cluster-IP-Adresse in der Variablen CLUSTER_IP. Sie benötigen sie später, um sie als Cluster-IP anzugeben:

    CLUSTER_IP=CLUSTER_IP
    
  3. Reservieren Sie eine weitere statische IP-Adresse für den Listener der Verfügbarkeitsgruppe und erfassen Sie die Adresse in einer neuen Umgebungsvariablen namens LISTENER_IP.

    gcloud compute addresses create wsfc-listener-ip \
      --subnet $SUBNET_NAME \
      --region $(gcloud config get-value compute/region)
    
    LISTENER_IP=$(gcloud compute addresses describe wsfc-listener-ip \
      --region $(gcloud config get-value compute/region) \
      --format=value\(address\)) && \
    echo "Listener IP: $LISTENER_IP"
    
  4. Ersetzen Sie die reservierte IP-Adresse des Load Balancers durch die Variable LISTENER_IP. Sie benötigen sie später, um Ihre Verfügbarkeitsgruppe zu konfigurieren.

    LISTENER_IP=LISTENER_IP
    

Ihr Projekt und Ihre VPC sind jetzt für die Bereitstellung des Windows Server-Failoverclusters und von SQL Server bereit.

Failovercluster bereitstellen

Sie können jetzt mit den VM-Instanzen einen Windows Server-Failovercluster und SQL Server bereitstellen. In den folgenden Abschnitten wird ausführlich beschrieben, wie Sie das tun können.

SQL Server vorbereiten

Erstellen Sie mit den folgenden Schritten 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 die folgenden Schritte sowohl für node-1 als auch für node-2 aus, um SQL Server zu konfigurieren:

  1. Öffnen Sie den SQL Server-Konfigurations-Manager.
  2. Wählen Sie im Navigationsbereich SQL Server Services aus.
  3. Klicken Sie in der Liste der Dienste mit der rechten Maustaste auf SQL Server (MSSQLSERVER) und wählen Sie Eigenschaften aus.
  4. Ändern Sie das Konto unter Anmelden als so:

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

  6. 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 der VM-Instanz witness, damit sie SQL Server-Sicherungen 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 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
    

Failovercluster erstellen

So erstellen Sie den Failover-Cluster:

  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:

    New-Cluster `
      -Name sql-cluster `
      -Node node-1,node-2 `
      -NoStorage `
      -StaticAddress CLUSTER_IP
    

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

  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 in 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 die folgenden Warnungen angezeigt, die Sie ignorieren 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 vom Windows-Cluster verwendete Computerkonto der Gruppe Cloud Service Domain Join Accounts hinzu, damit es Computer mit der Domain verbinden kann.

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

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

Verfügbarkeitsgruppe erstellen

Erstellen Sie nun eine Beispieldatenbank bookshelf, fügen Sie sie in eine neue Verfügbarkeitsgruppe mit dem Namen bookshelf-ag ein und konfigurieren Sie 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

Sie können jetzt die Hochverfügbarkeit für die Verfügbarkeitsgruppe entweder mit T-SQL oder mit SQL Server Management Studio konfigurieren.

T-SQL verwenden

So konfigurieren Sie die Hochverfügbarkeit für die Verfügbarkeitsgruppe mit T-SQL:

  1. Stellen Sie eine Verbindung zu node-1 her und führen Sie dann das folgende Skript aus, um die Verfügbarkeitsgruppe „bookshelf-ag“ zu erstellen.

    CREATE LOGIN [NET_DOMAIN\sql_server] FROM WINDOWS;
    GO
    
    USE [bookshelf];
    CREATE USER [NET_DOMAIN\sql_server] FOR LOGIN [NET_DOMAIN\sql_server];
    GO
    
    USE [master];
    CREATE ENDPOINT bookshelf_endpoint
      STATE=STARTED
      AS TCP (LISTENER_PORT=5022)
      FOR DATABASE_MIRRORING (ROLE=ALL);
    GO
    
    GRANT CONNECT ON ENDPOINT::[bookshelf_endpoint] TO [NET_DOMAIN\sql_server]
    GO
    
  2. Stellen Sie eine Verbindung zu node-2 her und führen Sie das folgende Skript aus.

    CREATE LOGIN [NET_DOMAIN\sql_server] FROM WINDOWS;
    GO
    
    CREATE ENDPOINT bookshelf_endpoint
      STATE=STARTED
      AS TCP (LISTENER_PORT=5022)
      FOR DATABASE_MIRRORING (ROLE=ALL);
    GO
    
    GRANT CONNECT ON ENDPOINT::[bookshelf_endpoint] TO [NET_DOMAIN\sql_server]
    GO
    
  3. Führen Sie auf node-1 das folgende Skript aus, um die Verfügbarkeitsgruppe bookshelf-ag zu erstellen.

    USE master;
    GO
    
    CREATE AVAILABILITY GROUP [bookshelf-ag]
    WITH (AUTOMATED_BACKUP_PREFERENCE = SECONDARY,
    CLUSTER_TYPE = WSFC,
    DB_FAILOVER = ON
    )
    FOR DATABASE [bookshelf]
    REPLICA ON
      N'node-1' WITH (
          ENDPOINT_URL = 'TCP://node-1:5022',
          AVAILABILITY_MODE = SYNCHRONOUS_COMMIT,
          FAILOVER_MODE = AUTOMATIC,
          BACKUP_PRIORITY = 50,
          SEEDING_MODE = AUTOMATIC,
          SECONDARY_ROLE(ALLOW_CONNECTIONS = NO)
      ),
      N'node-2' WITH (
          ENDPOINT_URL = 'TCP://node-2:5022',
          AVAILABILITY_MODE = SYNCHRONOUS_COMMIT,
          FAILOVER_MODE = AUTOMATIC,
          BACKUP_PRIORITY = 50,
          SEEDING_MODE = AUTOMATIC,
          SECONDARY_ROLE(ALLOW_CONNECTIONS = NO)
      );
    GO
    
  4. Ersetzen Sie im folgenden Script LISTENER_IP durch die IP-Adresse, die Sie zuvor für den internen Load Balancer reserviert haben, und führen Sie es aus.

    USE master;
    GO
    
    ALTER AVAILABILITY GROUP [bookshelf-ag]
    ADD LISTENER N'bookshelf' (
    WITH IP (
      (N'LISTENER_IP', N'255.255.255.0')
    ),
    PORT = 1433);
    GO
    
  5. Stellen Sie eine Verbindung zu node-2 her und führen Sie dann das folgende Skript aus, um das sekundäre Replikat der Verfügbarkeitsgruppe hinzuzufügen und das automatische Seeding zu aktivieren.

    USE master;
    GO
    
    ALTER AVAILABILITY GROUP [bookshelf-ag] JOIN;
    ALTER AVAILABILITY GROUP [bookshelf-ag] GRANT CREATE ANY DATABASE;
    
    
  6. Prüfen Sie den Status der Verfügbarkeitsgruppe.

    SELECT * FROM sys.dm_hadr_availability_group_states;
    GO
    

    synchronization_health_desc sollte als HEALTHY angezeigt werden.

SQL Server Management Studio verwenden

So konfigurieren Sie die Hochverfügbarkeit für die Verfügbarkeitsgruppe mit SQL Server Management Studio:

  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 aus.
      2. Geben Sie die folgenden Einstellungen ein.

        • Listener-DNS-Name: bookshelf.
        • Port: 1433
        • Netzwerkmodus: Static IP
      3. Wählen Sie Hinzufügen aus und geben Sie die Listener-IP-Adresse (LISTENER_IP) ein, die Sie zuvor für den internen Load Balancer reserviert haben. Wählen Sie dann OK aus.

    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.

Interne Load Balancer und Systemdiagnosen erstellen

Die Cluster-IP-Adresse stellt einen einzelnen Endpunkt für den Windows-Failovercluster dar. Sie verwenden sie für administrative Zwecke und zum Verwalten von Clusterressourcen. Die Cluster-IP verweist immer auf den Host- (oder primären) Knoten des Clusters. Sie stellen einen internen Load Balancer bereit, der eine Systemdiagnose verwendet, um sicherzustellen, dass der Traffic an den Hostknoten des Clusters weitergeleitet wird. Da für WSFC-Tools mehrere Protokolle für die Weiterleitung verfügbar sein müssen (ICMP, UDP und TCP), empfehlen wir, einen internen Load-Balancer mit mehreren Protokollen, die alle Ports unterstützen, bereitzustellen.

So stellen Sie einen internen Load Balancer bereit:

  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 die beiden Knoten den folgenden Gruppen hinzu:

    REGION=$(gcloud config get-value compute/region)
    
    gcloud compute instance-groups unmanaged create wsfc-group-1 --zone $ZONE1
    gcloud compute instance-groups unmanaged add-instances wsfc-group-1 --zone $ZONE1 \
      --instances node-1
    
    gcloud compute instance-groups unmanaged create wsfc-group-2 --zone $ZONE2
    gcloud compute instance-groups unmanaged add-instances wsfc-group-2 --zone $ZONE2 \
      --instances node-2
    
  3. Erstellen Sie eine Systemdiagnose für die Cluster-IP-Adresse, damit der Load-Balancer den aktiven Knoten aus Sicht des Windows-Clusters ermitteln kann. Der Standardport, über den der Compute Engine-Gast-Agent auf Systemdiagnosen antwortet, ist 59998. Die Systemdiagnose stellt die Cluster-IP-Adresse in der Anfrage bereit und erwartet 1 als Antwort vom aktiven Knoten.

    gcloud compute health-checks create tcp wsfc-healthcheck \
      --request=$CLUSTER_IP \
      --response=1 \
      --check-interval="2s" \
      --healthy-threshold=2 \
      --unhealthy-threshold=2 \
      --port=59998 \
      --timeout="1s"
    
  4. Erstellen Sie einen Backend-Dienst und fügen Sie die beiden vorhandenen Instanzgruppen hinzu.

    gcloud compute backend-services create wsfc-backend \
      --load-balancing-scheme internal \
      --region $REGION \
      --health-checks wsfc-healthcheck \
      --protocol UNSPECIFIED
    
    gcloud compute backend-services add-backend wsfc-backend \
      --instance-group wsfc-group-1 \
      --instance-group-zone $ZONE1 \
      --region $REGION
    
    gcloud compute backend-services add-backend wsfc-backend \
      --instance-group wsfc-group-2 \
      --instance-group-zone $ZONE2 \
      --region $REGION
    
  5. Erstellen Sie den internen Load Balancer, der mit der Cluster-IP-Adresse verknüpft ist.

    gcloud compute forwarding-rules create wsfc \
      --load-balancing-scheme internal \
      --address $CLUSTER_IP \
      --ports ALL \
      --network $VPC_NAME \
      --subnet $SUBNET_NAME \
      --region $REGION \
      --ip-protocol L3_DEFAULT \
      --backend-service wsfc-backend
    

Wenn Sie einen einzelnen Endpunkt für SQL Server-Clients bereitstellen möchten, die eine Verbindung zu einer beliebigen Datenbank in Ihrer bookshelf-Verfügbarkeitsgruppe herstellen möchten, stellen Sie einen neuen internen Load Balancer bereit, der dieser Verfügbarkeitsgruppe zugewiesen ist. Gehen Sie dazu so vor:

  1. Erstellen Sie eine Systemdiagnose für den Verfügbarkeitsgruppenlistener, damit der Load Balancer den primären Knoten in der bookshelf-SQL Server-Verfügbarkeitsgruppe ermitteln kann.

    gcloud compute health-checks create tcp wsfc-bookshelf-healthcheck \
      --request=$LISTENER_IP \
      --response=1 \
      --check-interval="2s" \
      --healthy-threshold=1 \
      --unhealthy-threshold=2 \
      --port=59998 \
      --timeout="1s"
    

    Die Systemdiagnose verwendet denselben Compute Engine-Gastagent-Port, stellt in ihrer Anfrage jedoch die Listener-IP-Adresse der bookshelf-Verfügbarkeitsgruppe bereit.

  2. Erstellen Sie einen neuen Backend-Dienst und fügen Sie die beiden Instanzgruppen hinzu.

    gcloud compute backend-services create wsfc-bookshelf-backend \
      --load-balancing-scheme internal \
      --region $REGION \
      --health-checks wsfc-bookshelf-healthcheck \
      --protocol UNSPECIFIED
    
    gcloud compute backend-services add-backend wsfc-bookshelf-backend \
      --instance-group wsfc-group-1 \
      --instance-group-zone $ZONE1 \
      --region $REGION
    
    gcloud compute backend-services add-backend wsfc-bookshelf-backend \
      --instance-group wsfc-group-2 \
      --instance-group-zone $ZONE2 \
      --region $REGION
    
  3. Erstellen Sie den internen Load-Balancer, der dem SQL Server-Verfügbarkeitsgruppen-Listener bookshelf-ag zugeordnet ist.

    gcloud compute forwarding-rules create wsfc-bookshelf \
      --load-balancing-scheme internal \
      --address $LISTENER_IP \
      --ports ALL \
      --network $VPC_NAME \
      --subnet $SUBNET_NAME \
      --region $REGION \
      --ip-protocol L3_DEFAULT \
      --backend-service wsfc-bookshelf-backend
    

Sie können jetzt mit dem DNS-Namen bookshelf und dem im Verfügbarkeitsgruppen-Listener des Bücherregals definierten Port eine Verbindung zum SQL Server-Verfügbarkeitsgruppen-Listener herstellen. Der interne Load Balancer leitet den Traffic an den primären Knoten der bookshelf-Verfügbarkeitsgruppe weiter.

Wenn Sie mehrere Verfügbarkeitsgruppen in einem einzelnen Failover-Cluster erstellen möchten, müssen Sie separate Backend-Dienste und einen separaten Load-Balancer mit einer eigenen Systemdiagnose pro Verfügbarkeitsgruppe verwenden.

Jede Verfügbarkeitsgruppe kann unterschiedliche Knoten als primär festgelegt haben, die sich vom Hostknoten des Windows-Clusters unterscheiden können. Für mehrere Verfügbarkeitsgruppen benötigen Sie Folgendes:

  • Eine reservierte statische IP-Adresse für den Listener der Verfügbarkeitsgruppe, die vom internen Load-Balancer verwendet wird. Reservieren Sie eine Adresse für jede Verfügbarkeitsgruppe.

  • Eine separate Systemdiagnoseregel für jede Verfügbarkeitsgruppe. Die Anfrage der Systemdiagnose liefert die statische IP-Adresse des Listeners der Verfügbarkeitsgruppe (die auch die reservierte IP-Adresse aus dem vorherigen Schritt ist). Die Systemdiagnose prüft auf die Antwort 1, die vom GCE-Agent zurückgegeben wird. Alle Systemdiagnosen verwenden Port 59998.

  • Ein separater Backend-Dienst für jede Verfügbarkeitsgruppe, dem Sie die beiden vorhandenen Compute-Instanzgruppen hinzufügen. Der Backend-Dienst verwendet die im vorherigen Schritt definierte Systemdiagnose.

  • Ein interner Load-Balancer für jede Verfügbarkeitsgruppe für den im vorherigen Schritt erstellten Backend-Dienst. Der Load-Balancer ist mit der statischen IP-Adresse des Verfügbarkeitsgruppenlisteners verknüpft.

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=tcp:bookshelf,1433;Integrated Security=true;Initial Catalog=master"
      $Conn.Open()
    
      $Cmd = New-Object System.Data.SqlClient.SqlCommand
      $Cmd.Connection = $Conn
      $Cmd.CommandText = "SELECT SERVERPROPERTY('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
    }
    

    In dieser Anleitung haben wir den DNS-Namen bookshelf und den Portwert 1433 für den Verfügbarkeitsgruppen-Listener in der Serverdefinition tcp:bookshelf,1433 verwendet.

    Alle zwei Sekunden stellt das Skript über den Verfügbarkeitsgruppen-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 durch Löschen des für die Anleitung erstellten Projekts.

So löschen Sie das Projekt:

  1. Wechseln Sie in der Google Cloud -Console zur Seite Ressourcen verwalten.

    Zur Seite „Ressourcen verwalten“

  2. Wählen Sie in der Projektliste das Projekt aus, das Sie löschen möchten, und klicken Sie dann auf Löschen.
  3. Geben Sie im Dialogfeld die Projekt-ID ein und klicken Sie auf Shut down (Beenden), um das Projekt zu löschen.

Nächste Schritte