Einsatz von PowerShell oder Azure CLI zum Konfigurieren einer Verfügbarkeitsgruppe mit einem einzelnen Subnetz für SQL Server auf Azure VM

Gilt für:SQL Server auf Azure-VM

Tipp

Es gibt viele Methoden zum Bereitstellen einer Verfügbarkeitsgruppe. Vereinfachen Sie Ihre Bereitstellung, indem Sie Ihre SQL Server-VMs in mehreren Subnetzen innerhalb desselben virtuellen Azure-Netzwerks erstellen. So benötigen Sie weder eine Azure Load Balancer-Instanz noch einen verteilten Netzwerknamen (DNN) für Ihre Always On-Verfügbarkeitsgruppe. Wenn Sie Ihre Verfügbarkeitsgruppe bereits in einem einzelnen Subnetz erstellt haben, können Sie sie in eine Umgebung mit mehreren Subnetzen migrieren.

In diesem Artikel wird beschrieben, wie Sie mithilfe von PowerShell oder der Azure CLI einen Windows-Failover-Cluster bereitstellen, dem Cluster SQL Server-VMs hinzufügen und den internen Load Balancer und Listener für eine Always On-Verfügbarkeitsgruppe innerhalb eines einzelnen Subnetzes erstellen.

Die Bereitstellung der Verfügbarkeitsgruppe erfolgt weiterhin manuell über SQL Server Management Studio (SSMS) oder Transact-SQL (T-SQL).

In diesem Artikel werden PowerShell und die Azure CLI eingesetzt, um die Umgebung der Verfügbarkeitsgruppe zu konfigurieren. Diese Konfiguration kann aber auch über das Azure-Portal mit Azure-Schnellstartvorlagen oder manuell erfolgen.

Hinweis

Sie können Ihre Verfügbarkeitsgruppenlösung jetzt mithilfe von Azure Migrate per Lift-und-Shift-Verfahren zu SQL Server auf Azure-VMs verschieben. Weitere Informationen finden Sie unter Migrieren von Verfügbarkeitsgruppen.

Voraussetzungen

Zum Konfigurieren einer Always On-Verfügbarkeitsgruppe müssen folgende Voraussetzungen erfüllt sein:

  • Ein Azure-Abonnement.
  • Eine Ressourcengruppe mit einem Domänencontroller.
  • Ein oder mehrere in eine Domäne eingebundene VMs in Azure, auf denen die Enterprise Edition von SQL Server 2016 (oder höher) ausgeführt wird, die sich in der gleichen Verfügbarkeitsgruppe oder in unterschiedlichen Verfügbarkeitszonen befinden, die mit der SQL-IaaS-Agent-Erweiterung registriert wurden.
  • Die aktuelle Version von PowerShell oder der Azure CLI.
  • Zwei verfügbare (nicht von einer Entität verwendete) IP-Adressen. Eine wird für den internen Lastenausgleich verwendet. Die andere ist für den Verfügbarkeitsgruppenlistener innerhalb des Subnetzes vorgesehen, in dem sich auch die Verfügbarkeitsgruppe befindet. Wenn ein vorhandener Lastenausgleich verwendet wird, ist nur eine verfügbare IP-Adresse für den Verfügbarkeitsgruppenlistener erforderlich.
  • Windows Server Core ist kein unterstütztes Betriebssystem für die PowerShell-Befehle, auf die in diesem Artikel verwiesen wird, da eine Abhängigkeit von RSAT besteht, die nicht in Core-Installationen von Windows enthalten ist.

Berechtigungen

Sie benötigen die folgenden Kontoberechtigungen, um die Always On-Verfügbarkeitsgruppe mithilfe der Azure CLI zu konfigurieren:

  • Ein vorhandenes Domänenbenutzerkonto mit der Berechtigung zum Erstellen von Computerobjekten in der Domäne. Beispielsweise verfügt ein Domänenadministratorkonto in der Regel über ausreichende Berechtigungen (Beispiel: account@domain.com). Dieses Konto muss auch Teil der lokalen Administratorgruppe auf allen virtuellen Computern sein, um den Cluster zu erstellen.
  • Das Domänenbenutzerkonto, das SQL Server steuert.

Speicherkonto erstellen

Der Cluster benötigt ein Speicherkonto, das als Cloudzeuge fungieren kann. Sie können ein beliebiges vorhandenes Speicherkonto verwenden oder ein neues Speicherkonto erstellen. Wenn Sie ein vorhandenes Speicherkonto verwenden möchten, fahren Sie mit dem nächsten Absatz fort.

Das Speicherkonto wird mit dem folgenden Codeausschnitt erstellt:

# Create the storage account
# example: az storage account create -n 'cloudwitness' -g SQLVM-RG -l 'West US' `
#  --sku Standard_LRS --kind StorageV2 --access-tier Hot --https-only true

az storage account create -n <name> -g <resource group name> -l <region> `
  --sku Standard_LRS --kind StorageV2 --access-tier Hot --https-only true

Tipp

Möglicherweise wird der Fehler az sql: 'vm' is not in the 'az sql' command group angezeigt, wenn Sie eine veraltete Version der Azure CLI verwenden. Laden Sie die neueste Version von Azure CLI herunter, um diesen Fehler zu überwinden.

Definieren von Clustermetadaten

Die Azure CLI-Befehlsgruppe az sql vm group verwaltet die Metadaten des Windows Server-Failoverclusterdiensts (WSFC), der die Verfügbarkeitsgruppe hostet. Zu den Clustermetadaten gehören die Active Directory-Domäne, Clusterkonten, als Cloudzeugen zu verwendende Speicherkonten und die SQL Server-Version. Verwenden Sie az sql vm group create, um die Metadaten für den WSFC zu definieren, sodass der Cluster beim Hinzufügen der ersten SQL Server-VM wie definiert erstellt wird.

Im folgenden Codeausschnitt werden die Metadaten für den Cluster definiert:

# Define the cluster metadata
# example: az sql vm group create -n Cluster -l 'West US' -g SQLVM-RG `
#  --image-offer SQL2017-WS2016 --image-sku Enterprise --domain-fqdn domain.com `
#  --operator-acc vmadmin@domain.com --bootstrap-acc vmadmin@domain.com --service-acc sqlservice@domain.com `
#  --sa-key '4Z4/i1Dn8/bpbseyWX' `
#  --storage-account 'https://cloudwitness.blob.core.windows.net/'
#  --cluster-subnet-type 'SingleSubnet'

az sql vm group create -n <cluster name> -l <region ex:eastus> -g <resource group name> `
  --image-offer <SQL2016-WS2016 or SQL2017-WS2016> --image-sku Enterprise --domain-fqdn <FQDN ex: domain.com> `
  --operator-acc <domain account ex: testop@domain.com> --bootstrap-acc <domain account ex:bootacc@domain.com> `
  --service-acc <service account ex: testservice@domain.com> `
  --sa-key '<PublicKey>' `
  --storage-account '<ex:https://cloudwitness.blob.core.windows.net/>'
  --cluster-subnet-type 'SingleSubnet'

Hinzufügen von VMs zum Cluster

Beim Hinzufügen der ersten SQL Server-VM zum Cluster wird der Cluster erstellt. Der Befehl az sql vm add-to-group erstellt den Cluster mit dem zuvor gegebenen Namen, installiert die Clusterrolle in den SQL Server-VMs und fügt sie dem Cluster hinzu. Nachfolgende Verwendungen des Befehls az sql vm add-to-group fügen dem neu erstellten Cluster weitere SQL Server-VMs hinzu.

Der folgende Codeausschnitt erstellt den Cluster und fügt ihm die erste SQL Server-VM hinzu:

# Add SQL Server VMs to cluster
# example: az sql vm add-to-group -n SQLVM1 -g SQLVM-RG --sqlvm-group Cluster `
#  -b Str0ngAzur3P@ssword! -p Str0ngAzur3P@ssword! -s Str0ngAzur3P@ssword!
# example: az sql vm add-to-group -n SQLVM2 -g SQLVM-RG --sqlvm-group Cluster `
#  -b Str0ngAzur3P@ssword! -p Str0ngAzur3P@ssword! -s Str0ngAzur3P@ssword!

az sql vm add-to-group -n <VM1 Name> -g <Resource Group Name> --sqlvm-group <cluster name> `
  -b <bootstrap account password> -p <operator account password> -s <service account password>
az sql vm add-to-group -n <VM2 Name> -g <Resource Group Name> --sqlvm-group <cluster name> `
  -b <bootstrap account password> -p <operator account password> -s <service account password>

Verwenden Sie diesen Befehl, um dem Cluster weitere SQL Server-VMs hinzuzufügen. Ändern Sie nur den Parameter -n für den Namen der SQL Server-VM.

Konfigurieren des Quorums

Obwohl der Datenträgerzeuge die ausfallsicherste Quorumoption ist, erfordert er einen freigegebenen Azure-Datenträger, der der Verfügbarkeitsgruppe einige Einschränkungen auferlegt. Daher ist der Cloudzeuge die empfohlene Quorumlösung für Cluster, die Verfügbarkeitsgruppen für SQL Server auf Azure-VMs hosten.

Wenn Sie im Cluster über eine gerade Anzahl von Stimmen verfügen, konfigurieren Sie die Quorumlösung, die Ihren Geschäftsanforderungen am besten entspricht. Weitere Informationen finden Sie unter Quorum mit SQL Server-VMs.

Validieren des Clusters

Damit ein Failovercluster von Microsoft unterstützt werden kann, muss er die Clustervalidierung bestehen. Stellen Sie (z. B. über RDP, Remotedesktopprotokoll) eine Verbindung mit dem virtuellen Computer her, und überprüfen Sie, ob Ihr Cluster die Validierung besteht. Wird dieser Schritt nicht erfolgreich ausgeführt, verbleibt Ihr Cluster in einem nicht unterstützten Zustand.

Sie können den Cluster mit dem Failovercluster-Manager (FCM) oder mit dem folgenden PowerShell-Befehl validieren:

Test-Cluster –Node ("<node1>","<node2>") –Include "Inventory", "Network", "System Configuration"

Erstellen der Verfügbarkeitsgruppe

Erstellen Sie die Verfügbarkeitsgruppe wie gewohnt manuell mithilfe von SQL Server Management Studio, PowerShell oder Transact-SQL.

Wichtig

Erstellen Sie zu diesem Zeitpunkt keinen Listener, da dieser Schritt in den folgenden Abschnitten mithilfe der Azure CLI ausgeführt wird.

Erstellen eines internen Lastenausgleichs

Hinweis

Bereitstellungen von Verfügbarkeitsgruppen in mehreren Subnetzen erfordern keinen Lastenausgleich. Kunden mit SQL Server 2019 CU8 und höher unter Windows 2016 und höher können den herkömmlichen VNN-Listener (virtual network name, virtueller Netzwerkname) und Azure Load Balancer in einer Umgebung mit einem einzelnen Subnetz durch einen DNN-Listener (Distributed Network Name, Name des verteilten Netzwerks) ersetzen. Wenn Sie einen DNN verwenden möchten, überspringen Sie alle Tutorialschritte, mit denen Azure Load Balancer für Ihre Verfügbarkeitsgruppe konfiguriert wird.

Für den Always On-Verfügbarkeitsgruppenlistener ist eine interne Azure Load Balancer-Instanz erforderlich. Der interne Lastenausgleich stellt eine Floating IP-Adresse für den Verfügbarkeitsgruppenlistener bereit, um Failovervorgänge und Verbindungswiederherstellungen zu beschleunigen. Wenn die SQL Server-VMs in einer Verfügbarkeitsgruppe Teil des gleichen Verfügbarkeitssatzes sind, können Sie einen Lastenausgleich im Tarif „Basic“ verwenden. Andernfalls benötigen einen Lastenausgleich im Tarif „Standard“.

Hinweis

Der interne Lastenausgleich muss sich im selben virtuellen Netzwerk befinden wie die SQL Server-VM-Instanzen.

Der folgende Codeausschnitt erstellt den internen Lastenausgleich:

# Create the internal load balancer
# example: az network lb create --name sqlILB -g SQLVM-RG --sku Standard `
# --vnet-name SQLVMvNet --subnet default

az network lb create --name sqlILB -g <resource group name> --sku Standard `
  --vnet-name <VNet Name> --subnet <subnet name>

Wichtig

Die öffentliche IP-Adressressource für die einzelnen SQL Server-VMs muss über eine Standard-SKU verfügen, um mit dem Load Balancer „Standard“ kompatibel zu sein. Um die SKU der öffentlichen IP-Ressource Ihrer VM zu ermitteln, navigieren Sie zu Ressourcengruppe, und wählen Sie die Ressource Öffentliche IP-Adresse für die gewünschte SQL Server-VM aus. Der Wert befindet sich im Bereich Übersicht unter SKU.

Erstellen des Listeners

Nachdem die Verfügbarkeitsgruppe manuell erstellt wurde, können Sie den Listener mithilfe von az sql vm ag-listener erstellen.

Die Subnetzressourcen-ID ist der Wert von /subnets/<subnetname>, der an die Ressourcen-ID der VNET-Ressource angehängt wurde. So bestimmen Sie die Subnetzressourcen-ID:

  1. Navigieren Sie im Azure-Portal zu Ihrer Ressourcengruppe.
  2. Wählen Sie die Ressource für das virtuelle Netzwerk aus.
  3. Wählen Sie im Bereich EinstellungenEigenschaften aus.
  4. Bestimmen Sie die Ressourcen-ID des virtuellen Netzwerks, und hängen Sie am Ende /subnets/<subnetname> an, um die Subnetzressourcen-ID zu erstellen. Beispiel:
    • Die Ressourcen-ID des virtuellen Netzwerks lautet /subscriptions/a1a1-1a11a/resourceGroups/SQLVM-RG/providers/Microsoft.Network/virtualNetworks/SQLVMvNet.
    • Ihr Subnetzname ist default.
    • Daher heißt Ihre Subnetzressourcen-ID /subscriptions/a1a1-1a11a/resourceGroups/SQLVM-RG/providers/Microsoft.Network/virtualNetworks/SQLVMvNet/subnets/default.

Der Verfügbarkeitsgruppenlistener wird mithilfe des folgenden Codeausschnitts erstellt:

# Create the availability group listener
# example: az sql vm group ag-listener create -n AGListener -g SQLVM-RG `
#  --ag-name SQLAG --group-name Cluster --ip-address 10.0.0.27 `
#  --load-balancer sqlilb --probe-port 59999  `
#  --subnet /subscriptions/a1a1-1a11a/resourceGroups/SQLVM-RG/providers/Microsoft.Network/virtualNetworks/SQLVMvNet/subnets/default `
#  --sqlvms sqlvm1 sqlvm2

az sql vm group ag-listener create -n <listener name> -g <resource group name> `
  --ag-name <availability group name> --group-name <cluster name> --ip-address <ag listener IP address> `
  --load-balancer <lbname> --probe-port <Load Balancer probe port, default 59999>  `
  --subnet <subnet resource id> `
  --sqlvms <names of SQL VM's hosting AG replicas, ex: sqlvm1 sqlvm2>

Ändern der Anzahl von Replikaten

Beim Bereitstellen einer Verfügbarkeitsgruppe auf SQL Server-VMs, die in Azure gehostet sind, muss zusätzliche Komplexität berücksichtigt werden. Der Ressourcenanbieter und die Gruppe der virtuellen Computer verwalten nun die Ressourcen. Beim Hinzufügen oder Entfernen von Replikaten zur bzw. aus der Verfügbarkeitsgruppe ist daher das Aktualisieren der Metadaten des Listeners mit Informationen zu den SQL Server-VMs als zusätzlicher Schritt auszuführen. Beim Ändern der Anzahl von Replikaten in der Verfügbarkeitsgruppe muss außerdem der Befehl az sql vm group ag-listener update verwendet werden, um den Listener mit den Metadaten der SQL Server-VMs zu aktualisieren.

Hinzufügen eines Replikats

So fügen Sie der Verfügbarkeitsgruppe ein neues Replikat hinzu:

Azure CLI

  1. Hinzufügen des virtuellen SQL Server-Computers zur Clustergruppe:

    
    # Add the SQL Server VM to the cluster group
    # example: az sql vm add-to-group -n SQLVM3 -g SQLVM-RG --sqlvm-group Cluster `
    # -b Str0ngAzur3P@ssword! -p Str0ngAzur3P@ssword! -s Str0ngAzur3P@ssword!
    
    az sql vm add-to-group -n <VM3 Name> -g <Resource Group Name> --sqlvm-group <cluster name> `
    -b <bootstrap account password> -p <operator account password> -s <service account password>
    
  2. Verwenden Sie SQL Server Management Studio, um die SQL Server-Instanz innerhalb der Verfügbarkeitsgruppe als Replikat hinzuzufügen.

  3. Fügen Sie dem Listener die SQL Server-VM-Metadaten hinzu:

    # Update the listener metadata with the new VM
    # example: az sql vm group ag-listener update -n AGListener `
    # -g sqlvm-rg --group-name Cluster --sqlvms sqlvm1 sqlvm2 sqlvm3
    
    az sql vm group ag-listener update -n <Listener> `
    -g <RG name> --group-name <cluster name> --sqlvms <SQL VMs, along with new SQL VM>
    

Entfernung eines Replikats

So entfernen Sie ein Replikat aus der Verfügbarkeitsgruppe:

Azure CLI

  1. Entfernen Sie das Replikat mithilfe von SQL Server Management Studio aus der Verfügbarkeitsgruppe.
  2. Entfernen Sie die SQL Server-VM-Metadaten aus dem Listener:
    # Update the listener metadata by removing the VM from the SQLVMs list
    # example: az sql vm group ag-listener update -n AGListener `
    # -g sqlvm-rg --group-name Cluster --sqlvms sqlvm1 sqlvm2
    
    az sql vm group ag-listener update -n <Listener> `
    -g <RG name> --group-name <cluster name> --sqlvms <SQL VMs that remain>
    
  3. Entfernen Sie die SQL Server-VM aus dem Cluster:
    # Remove the SQL VM from the cluster
    # example: az sql vm remove-from-group --name SQLVM3 --resource-group SQLVM-RG
    
    az sql vm remove-from-group --name <SQL VM name> --resource-group <RG name> 
    

Entfernen des Listeners

Wenn Sie den mit der Azure-Befehlszeilenschnittstelle konfigurierten Verfügbarkeitsgruppenlistener später entfernen möchten, müssen Sie dies über die SQL-IaaS-Agent-Erweiterung tun. Da der Listener über die SQL-IaaS-Agent-Erweiterung registriert wurde, reicht das Löschen über SQL Server Management Studio nicht aus.

Die beste Methode besteht darin, ihn über die SQL-IaaS-Agent-Erweiterung zu löschen, indem Sie in der Azure-Befehlszeilenschnittstelle den folgenden Codeausschnitt verwenden. Dadurch werden die Metadaten des Verfügbarkeitsgruppenlisteners aus der SQL-IaaS-Agent-Erweiterung entfernt. Außerdem wird der Listener physisch aus der Verfügbarkeitsgruppe gelöscht.

# Remove the availability group listener
# example: az sql vm group ag-listener delete --group-name Cluster --name AGListener --resource-group SQLVM-RG

az sql vm group ag-listener delete --group-name <cluster name> --name <listener name > --resource-group <resource group name>

Entfernen des Clusters

Entfernen Sie alle Knoten aus dem Cluster, um ihn zu zerstören, und entfernen Sie dann die Clustermetadaten aus der SQL-IaaS-Agent-Erweiterung. Verwenden Sie hierzu die Azure-Befehlszeilenschnittstelle oder PowerShell.

Entfernen Sie zunächst alle virtuellen SQL Server-VMs aus dem Cluster:

# Remove the VM from the cluster metadata
# example: az sql vm remove-from-group --name SQLVM2 --resource-group SQLVM-RG

az sql vm remove-from-group --name <VM1 name>  --resource-group <resource group name>
az sql vm remove-from-group --name <VM2 name>  --resource-group <resource group name>

Wenn es sich hierbei um die einzigen VMs im Cluster handelt, wird der Cluster zerstört. Wenn neben den entfernten SQL Server-VMs noch andere VMs im Cluster vorhanden sind, werden die anderen VMs nicht entfernt und der Cluster wird nicht zerstört.

Entfernen Sie als Nächstes die Clustermetadaten aus der SQL-IaaS-Agent-Erweiterung:

# Remove the cluster from the SQL VM RP metadata
# example: az sql vm group delete --name Cluster --resource-group SQLVM-RG

az sql vm group delete --name <cluster name> Cluster --resource-group <resource group name>

Nächste Schritte

Nachdem die Verfügbarkeitsgruppe bereitgestellt wurde, sollten Sie die HADR-Einstellungen für SQL Server auf Azure-VMs optimieren.

Weitere Informationen finden Sie unter: