Usare PowerShell o Az CLI per configurare un gruppo di disponibilità a subnet singola per SQL Server in una VM di Azure

Si applica a: SQL Server su VM di Azure

Suggerimento

Esistono molti metodi per distribuire un gruppo di disponibilità. Semplificare la distribuzione ed eliminare la necessità di un servizio di Azure Load Balancer o di un nome di rete distribuito (DNN) per il gruppo di disponibilità AlwaysOn creando le macchine virtuali (VM) di SQL Server in più subnet all'interno della stessa rete virtuale di Azure. Se il gruppo di disponibilità è già stato creato in una singola subnet, è possibile eseguirne la migrazione a un ambiente con più subnet.

Questo articolo descrive come usare PowerShell o Azure CLI per distribuire un cluster di failover Windows, aggiungere VM di SQL Server al cluster e creare il Load Balancer interno e il listener per un gruppo di disponibilità Always On in una subnet singola.

La distribuzione del gruppo di disponibilità viene ancora eseguita manualmente con SQL Server Management Studio (SSMS) o Transact-SQL (T-SQL).

Sebbene questo articolo usi PowerShell e Az CLI per configurare l'ambiente del gruppo di disponibilità, è anche possibile farlo dal portale di Azure, usando i modelli di avvio rapido Azure oppure anche manualmente.

Nota

È ora possibile trasferire in modalità lift-and-shift la soluzione dell'istanza del gruppo di disponibilità a SQL Server in VM di Azure usando Azure Migrate. Per altre informazioni, vedere Eseguire la migrazione di un gruppo di disponibilità.

Prerequisiti

Per configurare un gruppo di disponibilità Always On, è necessario disporre dei seguenti prerequisiti:

Autorizzazioni

Per configurare il gruppo di disponibilità AlwaysOn usando l'interfaccia della riga di comando di Azure, sono necessarie le autorizzazioni seguenti per l'account:

  • Un account utente di dominio esistente con l'autorizzazione Crea oggetti computer nel dominio. Un account amministratore di dominio ha in genere autorizzazioni sufficienti, ad esempio: account@domain.com. Questo account deve anche fare parte del gruppo degli amministratori locali in ogni macchina virtuale per creare il cluster.
  • L'account utente di dominio che controlla SQL Server.

Creare un account di archiviazione

Per il cluster è necessario una account di archiviazione che funga da cloud di controllo. È possibile usare un account di archiviazione esistente o crearne uno nuovo. Per usare un account di archiviazione esistente, passare direttamente alla sezione successiva.

Il frammento di codice seguente crea un account di archiviazione:

# 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

Suggerimento

È possibile che venga visualizzato l'errore az sql: 'vm' is not in the 'az sql' command group se si usa una versione obsoleta dell'interfaccia della riga di comando di Azure. Scaricare la versione più recente dell'interfaccia della riga di comando di Azure per risolvere il problema.

Definire i metadati del cluster

Il gruppo di comandi dell'interfaccia della riga di comando di Azure az sql vm group gestisce i metadati del servizio WSFC (Windows Server Failover Cluster, Cluster di failover di Windows Server) che ospita il gruppo di disponibilità. I metadati del cluster includono il dominio Active Directory, gli account del cluster, gli account di archiviazione da usare come cloud di controllo e la versione di SQL Server. Usare az sql vm group create per definire i metadati per WSFC in modo che, quando viene aggiunta la prima VM di SQL Server, il cluster venga creato come definito.

Il frammento di codice seguente definisce i metadati per il cluster:

# 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'

Aggiungere VM al cluster

L'aggiunta della prima VM di SQL Server al cluster crea il cluster. Il comando az sql vm add-to-group crea il cluster con il nome specificato in precedenza, installa il ruolo del cluster nelle VM di SQL Server e lo aggiunge al cluster. Gli utilizzi successivi del comando az sql vm add-to-group aggiungono altre VM di SQL Server al cluster appena creato.

Il frammento di codice seguente crea il cluster e vi aggiunge la prima VM di SQL Server:

# 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>

Usare questo comando per aggiungere altre VM di SQL Server al cluster. Modificare solo il parametro -n per il nome della VM di SQL Server.

Configurare il quorum

Anche se il server di controllo del disco è l'opzione quorum più resiliente, richiede un disco condiviso di Azure che impone alcune limitazioni al gruppo di disponibilità. Di conseguenza, il cloud di controllo è la soluzione quorum consigliata per i cluster che ospitano gruppi di disponibilità per SQL Server in VM di Azure.

Se si dispone di un numero pari di votazioni nel cluster, configurare la soluzione quorum più adatta alle proprie esigenze aziendali. Per altre informazioni, vedere Quorum con VM di SQL Server.

Convalidare cluster

Affinché il cluster sia supportato da Microsoft, deve superare la convalida del cluster. Connettersi alla macchina virtuale usando il metodo preferito, ad esempio Remote Desktop Protocol (RDP) e verificare che il cluster superi la convalida prima di continuare. In caso contrario, il cluster rimane in uno stato non supportato.

È possibile convalidare il cluster usando Gestione cluster di failover (FCM) o il seguente comando di PowerShell:

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

Creare un gruppo di disponibilità

Creare manualmente il gruppo di disponibilità come di consueto, usando SQL Server Management Studio, PowerShell o Transact-SQL.

Importante

Non creare un listener in questo momento perché questa operazione viene eseguita tramite l'interfaccia della riga di comando di Azure nelle sezioni seguenti.

Creare un servizio di bilanciamento del carico interno

Nota

Le distribuzioni dei gruppi di disponibilità in più subnet non richiedono un bilanciamento del carico. In un ambiente con subnet singola, i clienti che usano SQL Server 2019 CU8 e versioni successive in Windows 2016 e versioni successive possono sostituire il tradizionale listener di VNN e Azure Load Balancer con un listener del nome di rete distribuito (DNN). Se si desidera usare un DNN, ignorare i passaggi dell'esercitazione per configurare Azure Load Balancer per il gruppo di disponibilità.

Il listener del gruppo di disponibilità Always On richiede un'istanza interna di Azure Load Balancer. Il bilanciamento del carico interno specifica un indirizzo IP "mobile" per il listener del gruppo di disponibilità che consente la riconnessione e il failover più rapidi. Se le VM di SQL Server in un gruppo di disponibilità fanno parte dello stesso set di disponibilità, è possibile usare Load Balancer Basic. In caso contrario, è necessario usare Load Balancer Standard.

Nota

Il servizio di bilanciamento del carico interno deve trovarsi nella stessa rete virtuale delle istanze di VM SQL Server.

Il frammento di codice seguente crea un bilanciamento del carico interno:

# 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>

Importante

La risorsa IP pubblico per ogni VM di SQL Server deve avere uno SKU Standard per essere compatibile con Load Balancer Standard. Per determinare lo SKU della risorsa IP pubblico della VM, andare a Gruppo di risorse, selezionare la risorsa Indirizzo IP pubblico per la VM di SQL Server e individuare il valore in SKU nel riquadro Panoramica.

Creare un listener

Dopo aver creato manualmente il gruppo di disponibilità, è possibile creare il listener usando az sql vm ag-listener.

L'ID di risorsa della subnet è il valore di /subnets/<subnetname> accodato all'ID risorsa della risorsa di rete virtuale. Per identificare l'ID risorsa della subnet:

  1. Passare al gruppo di risorse nel portale di Azure.
  2. Selezionare la risorsa di rete virtuale.
  3. Selezionare Proprietà nel riquadro Impostazioni.
  4. Identificare l'ID risorsa per la rete virtuale e accodarvi /subnets/<subnetname> per creare l'ID della risorsa della subnet. Ad esempio:
    • L'ID della risorsa di rete virtuale è: /subscriptions/a1a1-1a11a/resourceGroups/SQLVM-RG/providers/Microsoft.Network/virtualNetworks/SQLVMvNet
    • Il nome della subnet è: default
    • Pertanto l'ID della risorsa della subnet è: /subscriptions/a1a1-1a11a/resourceGroups/SQLVM-RG/providers/Microsoft.Network/virtualNetworks/SQLVMvNet/subnets/default

Il frammento di codice seguente crea il listener del gruppo di disponibilità:

# 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>

Modifica del numero di repliche

Quando si distribuisce un gruppo di disponibilità in VM di SQL Server ospitate in Azure, è presente un livello di complessità in più. Il provider di risorse e il gruppo di macchine virtuali ora gestiscono le risorse. Di conseguenza, quando si aggiungono o si rimuovono le repliche nel gruppo di disponibilità, vi è un altro passaggio che consiste nell'aggiornamento dei metadati del listener con le informazioni sulle VM di SQL Server. Quando si modifica il numero di repliche nel gruppo di disponibilità, è necessario usare anche il comando az sql vm group ag-listener update per aggiornare il listener con i metadati delle VM di SQL Server.

Aggiungere una replica

Per aggiungere una nuova replica al gruppo di disponibilità:

Interfaccia della riga di comando di Azure

  1. Aggiungere la VM di SQL Server al gruppo cluster:

    
    # 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. Usare SQL Server Management Studio per aggiungere l'istanza di SQL Server come replica all'interno del gruppo di disponibilità.

  3. Aggiungere i metadati della VM di SQL Server al listener:

    # 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>
    

Rimozione di una replica

Per rimuovere una replica dal gruppo di disponibilità:

Interfaccia della riga di comando di Azure

  1. Rimuovere la replica dal gruppo di disponibilità usando SQL Server Management Studio.
  2. Rimuovere i metadati della VM di SQL Server dal 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. Rimuovere la VM di SQL Server dal 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> 
    

Rimuovere un listener

Se in un secondo momento è necessario rimuovere il listener del gruppo di disponibilità configurato con l'interfaccia della riga di comando di Azure, è necessario utilizzare l'estensione SQL IaaS Agent. Poiché il listener è stato registrato tramite l'estensione SQL IaaS Agent, eliminarlo semplicemente tramite SQL Server Management Studio non è sufficiente.

Il metodo migliore consiste nell'eliminarlo tramite l'estensione IaaS Agent, usando il frammento di codice seguente nell'interfaccia della riga di comando di Azure. Questa operazione rimuove i metadati del listener del gruppo di disponibilità dall'estensione SQL Iaas Agent. ed elimina fisicamente il listener dal gruppo di disponibilità.

# 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>

Rimuovere il cluster

Rimuovere tutti i nodi dal cluster per eliminarli definitivamente, quindi rimuovere i metadati del cluster dall'estensione SQL IaaS Agent. È possibile eseguire questa operazione usando l'interfaccia della riga di comando di Azure o PowerShell.

Per prima cosa, rimuovere le VM di SQL Server dal 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>

Se si tratta delle uniche VM nel cluster, il cluster viene eliminato definitivamente. Se nel cluster sono presenti altre VM a parte le VM di SQL Server rimosse, le altre VM non vengono rimosse e il cluster non viene eliminato definitivamente.

Successivamente, rimuovere i metadati del cluster dall'estensione SQL IaaS Agent:

# 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>

Passaggi successivi

Dopo aver distribuito il gruppo di disponibilità, prendere in considerazione l'ottimizzazione delle impostazioni HADR per SQL Server nelle VM di Azure.

Per ulteriori informazioni, vedere: