Utiliser PowerShell ou Azure CLI pour configurer un groupe de disponibilité à sous-réseau unique pour SQL Server sur une machine virtuelle Azure

S’applique à :SQL Server sur la machine virtuelle Azure

Conseil

Il existe de nombreuses méthodes pour déployer un groupe de disponibilité. Simplifiez votre déploiement pour éviter d’utiliser un équilibreur de charge Azure ou un nom de réseau distribué (DNN) pour votre groupe de disponibilité Always On, et créez vos machines virtuelles SQL Server dans plusieurs sous-réseaux au sein du même réseau virtuel Azure. Si vous avez déjà créé votre groupe de disponibilité dans un seul sous-réseau, vous pouvez le migrer vers un environnement multi-sous-réseau.

Cet article explique comment utiliser PowerShell ou Azure CLI pour déployer un cluster de basculement Windows, ajouter des machines virtuelles SQL Server au cluster et créer l’équilibreur de charge interne et l’écouteur pour un groupe de disponibilité Always On avec un seul sous-réseau.

Le déploiement du groupe de disponibilité Always On s’effectue encore manuellement via SQL Server Management Studio (SSMS) ou Transact-SQL (T-SQL).

Bien que cet article utilise PowerShell ou l’interface Azure CLI pour configurer l’environnement du groupe de disponibilité, vous pouvez également utiliser le portail Azure à l’aide des modèles de démarrage rapide Azure ou le faire manuellement.

Remarque

Il est désormais possible d’effectuer un lift-and-shift de votre solution de groupe de disponibilité vers SQL Server sur des machines virtuelles Azure à l’aide d’Azure Migrate. Pour plus d’informations, consultez Migrer un groupe de disponibilité.

Prérequis

Pour configurer un groupe de disponibilité Always On, vous devez disposer des éléments suivants :

Autorisations

Vous avez besoin des autorisations de compte suivantes pour configurer le groupe de disponibilité Always On à l’aide d’Azure CLI :

  • Un compte d’utilisateur de domaine existant qui dispose d’une autorisation de création d’objet ordinateur dans le domaine. Par exemple, un compte d’administrateur de domaine dispose généralement d’une autorisation suffisante (par exemple : account@domain.com). Ce compte doit également faire partie du groupe administrateur local sur chaque machine virtuelle pour créer le cluster.
  • Le compte d’utilisateur du domaine qui contrôle SQL Server.

Créez un compte de stockage.

Le cluster a besoin d’un compte de stockage configuré en tant que témoin de cloud. Vous pouvez utiliser un compte de stockage existant ou en créer un. Si vous voulez utiliser un compte de stockage existant, passez à la section suivante.

L’extrait de code suivant crée le compte de stockage :

# 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

Conseil

Vous pouvez rencontrer l’erreur az sql: 'vm' is not in the 'az sql' command group si vous utilisez une version obsolète d’Azure CLI. Téléchargez la dernière version d’Azure CLI pour ne plus avoir cette erreur.

Définir les métadonnées du cluster

Le groupe de commandes az sql vm group d’Azure CLI gère les métadonnées du service Cluster de basculement Windows Server (WSFC) qui héberge le groupe de disponibilité. Les métadonnées de cluster englobent le domaine Active Directory, les comptes de cluster, les comptes de stockage à utiliser en tant que témoin de cloud et la version de SQL Server. Utilisez az sql vm group create pour définir les métadonnées de WSFC de sorte qu’à la première machine virtuelle SQL Server ajoutée, le cluster soit créé comme défini.

L’extrait de code suivant définit les métadonnées du 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'

Ajouter des machines virtuelles au cluster

Ajouter la première machine virtuelle SQL Server au cluster permet de créer le cluster. La commande az sql vm add-to-group crée le cluster avec le nom précédemment attribué, installe le rôle de cluster sur les machines virtuelles SQL Server et les ajoute au cluster. Les utilisations suivantes de la commande az sql vm add-to-group ajoutent des machines virtuelles SQL Server supplémentaires au cluster nouvellement créé.

L’extrait de code suivant crée le cluster et lui ajoute la première machine virtuelle 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>

Utilisez cette commande pour ajouter d’autres machines virtuelles SQL Server au cluster. Modifiez uniquement le paramètre -n pour le nom de machine virtuelle SQL Server.

Configurer un quorum

Même si le témoin de disque est l’option de quorum la plus résiliente, cela nécessite un disque partagé Azure qui impose certaines limitations au groupe de disponibilité. Par conséquent, le témoin cloud est la solution de quorum recommandée pour les clusters qui hébergent des groupes de disponibilité pour SQL Server sur des machines virtuelles Azure.

Si vous avez un nombre pair de votes dans le cluster, configurez la Solution de quorum qui correspond le mieux aux besoins de votre entreprise. Pour plus d’informations, consultez Quorum avec les machines virtuelles SQL Server.

Valider le cluster

Pour qu’un cluster de basculement soit pris en charge par Microsoft, il doit réussir la validation de cluster. Connectez-vous à la machine virtuelle via la méthode de votre choix, telle que le protocole RDP (Remote Desktop Protocol) et confirmez que votre cluster a réussi la validation avant de continuer. Dans le cas contraire, votre cluster se trouve dans un état non pris en charge.

Vous pouvez valider le cluster à l’aide du Gestionnaire du cluster de basculement ou de la commande PowerShell suivante :

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

Créer un groupe de disponibilité

Créez manuellement le groupe de disponibilité comme vous le feriez normalement, en utilisant SQL Server Management Studio, PowerShell ou Transact-SQL.

Important

Ne créez pas d’écouteur pour l’instant, car cette opération sera effectuée via Azure CLI dans les sections suivantes.

Créer un équilibrage de charge interne

Notes

Les déploiements de groupes de disponibilité sur plusieurs sous-réseaux ne nécessitent pas d’équilibreur de charge. Dans un environnement à sous-réseau unique, les clients utilisant SQL Server 2019 CU8 et ultérieur sur Windows 2016 et ultérieur peuvent remplacer l’écouteur de nom réseau virtuel (VNN) traditionnel et Azure Load Balancer par un écouteur de nom réseau distribué (DNN). Si vous souhaitez utiliser un DNN, ignorez les étapes du tutoriel qui configurent Azure Load Balancer pour votre groupe de disponibilité.

L’écouteur de groupe de disponibilité Always On a besoin d’une instance interne d’Azure Load Balancer. L’équilibreur de charge interne fournit une adresse IP « flottante » pour l’écouteur de groupe de disponibilité afin d’accélérer les opérations de basculement et de reconnexion. Si les machines virtuelles SQL Server d’un groupe de disponibilité font partie du même groupe à haute disponibilité, vous pouvez utiliser un équilibreur de charge de base. Dans le cas contraire, vous devez utiliser un équilibreur de charge standard.

Notes

L’équilibreur de charge interne doit se trouver dans le même réseau virtuel que les instances de machine virtuelle SQL Server.

L’extrait de code suivant crée l’équilibreur de charge interne :

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

Important

La ressource d’adresse IP publique de chaque machine virtuelle SQL Server doit avoir une référence SKU standard compatible avec l’équilibreur de charge standard. Pour déterminer la référence SKU de la ressource d’adresse IP publique de votre machine virtuelle, accédez à Groupe de ressources, sélectionnez votre ressources Adresse IP publique pour la machine virtuelle SQL Server souhaitée, puis recherchez la valeur sous Référence SKU dans le volet Vue d’ensemble.

Créer un écouteur

Après avoir créé manuellement le groupe de disponibilité, vous pouvez créer l’écouteur à l’aide de la commande az sql vm ag-listener.

L’ID de ressource de sous-réseau est la valeur de /subnets/<subnetname> ajoutée à l’ID de ressource de la ressource de réseau virtuel. Pour identifier l’ID de ressource de sous-réseau :

  1. Accédez au groupe de ressources sur le portail Azure.
  2. Sélectionnez la ressource de réseau virtuel.
  3. Sélectionnez Propriétés dans le volet Paramètres.
  4. Identifiez l’ID de ressource du réseau virtuel et ajoutez /subnets/<subnetname> à la fin de celui-ci pour créer l’ID de ressource de sous-réseau. Par exemple :
    • Votre ID de ressource de réseau virtuel est : /subscriptions/a1a1-1a11a/resourceGroups/SQLVM-RG/providers/Microsoft.Network/virtualNetworks/SQLVMvNet
    • Le nom de votre sous-réseau est : default
    • Votre ID de ressource de sous-réseau est donc : /subscriptions/a1a1-1a11a/resourceGroups/SQLVM-RG/providers/Microsoft.Network/virtualNetworks/SQLVMvNet/subnets/default

L’extrait de code suivant crée l’écouteur de groupe de 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>

Modifier le nombre de réplicas

Le déploiement d’un groupe de disponibilité sur des machines virtuelles SQL Server hébergées dans Azure ajoute une couche de complexité supplémentaire. Le fournisseur de ressources et le groupe de machines virtuelles gèrent désormais les ressources. De ce fait, quand vous ajoutez ou supprimez des réplicas dans le groupe de disponibilité, il est nécessaire d’effectuer une étape supplémentaire de mise à jour des métadonnées de l’écouteur avec des informations sur les machines virtuelles SQL Server. Quand vous modifiez le nombre de réplicas dans le groupe de disponibilité, vous devez aussi utiliser la commande az sql vm group ag-listener update pour mettre à jour l’écouteur avec les métadonnées des machines virtuelles SQL Server.

Ajouter un réplica

Pour ajouter un nouveau réplica au groupe de disponibilité :

Azure CLI

  1. Ajoutez la machine virtuelle SQL Server au groupe de clusters :

    
    # 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. Utilisez SQL Server Management Studio pour ajouter l’instance SQL Server en tant que réplica dans le groupe de disponibilité.

  3. Ajoutez les métadonnées de la machine virtuelle SQL Server à l’écouteur :

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

Supprimer un réplica

Pour supprimer un réplica du groupe de disponibilité :

Azure CLI

  1. Supprimez le réplica du groupe de disponibilité à l’aide de SQL Server Management Studio.
  2. Supprimez les métadonnées de la machine virtuelle SQL Server de l’écouteur :
    # 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. Supprimez la machine virtuelle SQL Server du 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> 
    

Supprimer un écouteur

Si, par la suite, vous avez besoin de supprimer l’écouteur de groupe de disponibilité configuré avec Azure CLI, vous devez passer par l’extension SQL IaaS Agent. Comme l’écouteur est inscrit par l’intermédiaire de l’extension SQL IaaS Agent, le supprimer via SQL Server Management Studio ne suffit pas.

La meilleure méthode consiste à le supprimer par l’intermédiaire de l’extension SQL IaaS Agent en utilisant l’extrait de code suivant dans l’interface de ligne de commande Azure. Cela a pour effet de supprimer les métadonnées de l’écouteur de groupe de disponibilité au niveau de l’extension SQL IaaS Agent. De même, l’écouteur de groupe de disponibilité est supprimé physiquement du groupe de 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>

Supprimer un cluster

Supprimez tous les nœuds du cluster pour le détruire, puis supprimez les métadonnées relatives au cluster de l’extension SQL IaaS Agent. Pour ce faire, vous pouvez utiliser Azure CLI ou PowerShell.

Commencez par supprimer toutes les machines virtuelles SQL Server du 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>

S’il s’agit des seules machines virtuelles du cluster, le cluster est détruit. S’il existe dans le cluster d’autres machines que les machines virtuelles SQL Server supprimées, ces autres machines virtuelles ne sont pas supprimées et le cluster n’est pas détruit.

Ensuite, supprimez les métadonnées relatives au cluster de l’extension 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>

Étapes suivantes

Une fois le groupe de disponibilité déployé, envisagez d’optimiser les paramètres HADR pour SQL Server sur les machines virtuelles Azure.

Pour en savoir plus, consultez :