Configurer des groupes de disponibilité AlwaysOn SQL Server avec commit synchrone


Les groupes de disponibilité AlwaysOn (AG) de Microsoft SQL Server vous permettent de répliquer des bases de données sur plusieurs instances SQL Server Enterprise.

À l'instar des instances de cluster de basculement SQL Server, les groupes de disponibilité AlwaysOn utilisent le clustering de basculement Windows Server (WSFC) pour mettre en œuvre la haute disponibilité. Mais ces deux fonctionnalités diffèrent de plusieurs manières, en particulier :

Groupes de disponibilité Always On Instances de cluster de basculement
Champ d'application du basculement Groupe de bases de données Instance
Stockage Non partagé Partagé

Pour une comparaison plus détaillée, consultez la section Comparaison des instances de cluster de basculement et des groupes de disponibilité.

Les groupes de disponibilité AlwaysOn acceptent plusieurs modes de disponibilité. Ce tutoriel explique comment déployer des groupes de disponibilité AlwaysOn en mode de commit synchrone afin de mettre en œuvre la haute disponibilité pour une ou plusieurs bases de données.

Dans la configuration, vous allez créer trois instances de VM. Deux instances de VM, node-1 et node-2, servent de nœuds WSFC et exécutent SQL Server. Une troisième instance de VM, witness, permet d'atteindre un quorum dans un scénario de basculement. Les trois instances de VM sont réparties dans trois zones et partagent un sous-réseau commun.

Un groupe de disponibilité Always On SQL Server est utilisé pour répliquer de manière synchrone un exemple de base de données, bookshelf, sur les deux instances SQL Server.

Dans un environnement sur site, vous pouvez autoriser WSFC à émettre des annonces ARP en cas de basculement afin d'avertir l'équipement réseau d'une modification d'adresse IP. Google Cloud ne tient toutefois pas compte des annonces de l'ARP. Vous devez donc mettre en œuvre l'une des deux options suivantes :

Architecture

Architecture

Dans cet article, nous partons du principe que vous avez déjà déployé Active Directory sur Google Cloud et que vous possédez des connaissances de base sur SQL Server, Active Directory et Compute Engine.

Objectifs

Coûts

Ce tutoriel utilise des composants facturables de Google Cloud, dont :

Utilisez le Simulateur de coût pour générer une estimation des coûts en fonction de votre utilisation prévue.

Avant de commencer

Pour suivre ce guide, vous aurez besoin des éléments suivants :

  • Un domaine Active Directory existant comportant au moins un contrôleur de domaine. Vous pouvez créer un domaine Active Directory à l'aide du service Microsoft AD géré. Vous pouvez également déployer un environnement Active Directory personnalisé sur Compute Engine et configurer une zone de transfert DNS privée qui transmet les requêtes DNS aux contrôleurs de domaine.
  • Un utilisateur Active Directory autorisé à rattacher des ordinateurs au domaine et à se connecter à l'aide du protocole RDP. Si vous utilisez le service Microsoft AD géré, vous pouvez vous servir de l'utilisateur setupadmin.
  • Un projet Google Cloud et un VPC avec une connectivité aux contrôleurs de domaine Active Directory.
  • Un sous-réseau à utiliser avec les instances de machine virtuelle Exchange.

Pour suivre ce guide, vous avez également besoin d'un projet Google Cloud :

  1. Connectez-vous à votre compte Google Cloud. Si vous débutez sur Google Cloud, créez un compte pour évaluer les performances de nos produits en conditions réelles. Les nouveaux clients bénéficient également de 300 $ de crédits gratuits pour exécuter, tester et déployer des charges de travail.
  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.

Une fois que vous avez terminé ce tutoriel, évitez de continuer à payer des frais en supprimant les ressources que vous avez créées. Consultez la section Effectuer un nettoyage pour en savoir plus.

Préparer le projet et le réseau

Pour préparer votre projet Google Cloud et votre VPC pour le déploiement de groupes de disponibilité AlwaysOn SQL Server, procédez comme suit :

  1. Dans la console Google Cloud, ouvrez Cloud Shell en cliquant sur le bouton Activer Cloud Shell Activez Cloud Shell..

    Accédez à la console Google Cloud.

  2. Initialisez les variables suivantes :

    VPC_NAME=VPC_NAME
    SUBNET_NAME=SUBNET_NAME
    

    Où :

    • VPC_NAME : nom de votre VPC
    • SUBNET_NAME : nom de votre sous-réseau
  3. Définissez votre ID de projet par défaut :

    gcloud config set project PROJECT_ID
    

    Remplacez PROJECT_ID par l'ID de votre projet Google Cloud.

  4. Définissez votre région par défaut :

    gcloud config set compute/region REGION
    

    Remplacez REGION par l'ID de la région dans laquelle vous souhaitez effectuer le déploiement.

Créer des règles de pare-feu

Autorisez la communication entre les nœuds WSFC pour permettre aux clients de se connecter à SQL Server, et créez plusieurs règles de pare-feu pour permettre à l'équilibreur de charge d'effectuer des vérifications d'état. Pour simplifier la création de ces règles de pare-feu, utilisez des tags réseau :

  • Les deux nœuds WSFC sont annotés avec le tag wsfc-node.
  • Tous les serveurs (y compris le témoin) sont annotés avec le tag wsfc.

Créez des règles de pare-feu qui utilisent ces tags réseau :

  1. Revenez à la session Cloud Shell que vous avez précédemment ouverte.
  2. Créez des règles de pare-feu pour les nœuds WSFC :

    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. Créez une règle de pare-feu qui autorise les vérifications d'état à partir des plages d'adresses IP des vérificateurs Google Cloud.

<pre class="devsite-click-to-copy">
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
</pre>

Créer des instances de VM

Vous allez maintenant déployer deux instances de VM pour le cluster de basculement. À tout moment, l'une de ces VM héberge l'instance dupliquée principale de la base de données SQL Server, tandis que l'autre nœud héberge l'instance dupliquée secondaire. Les deux instances de VM doivent :

  • se trouver dans la même région afin qu'elles soient accessibles par un équilibreur de charge réseau interne à stratégie directe (non applicable pour DNN) ;
  • WSFC et SQL Server sont installés.
  • avoir activé la compatibilité WSFC de Compute Engine.

Vous utilisez une image payante SQL Server sur laquelle SQL Server 2022 est préinstallé.

Pour obtenir un nombre de votes majoritaire et atteindre un quorum pour le scénario de basculement, vous déployez une troisième VM faisant office de témoin de partage de fichiers.

  1. Revenez à la session Cloud Shell que vous avez précédemment ouverte.
  2. Créez un script de spécialisation pour les nœuds WSFC. Le script installe la fonctionnalité Windows nécessaire et crée des règles de pare-feu pour WSFC et 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. Créez les instances de VM. Sur les deux VM qui servent de nœuds WSFC, associez un disque de données supplémentaire et activez le clustering de basculement Windows Server en définissant la clé de métadonnées enable-wsfc sur 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. Pour rattacher les trois instances de VM à Active Directory, procédez comme suit pour chacune d'entre elles :

    1. Surveillez le processus d'initialisation de la VM en consultant la sortie de son port série :

      gcloud compute instances tail-serial-port-output NAME
      

      Remplacez NAME par le nom de l'instance de VM.

      Attendez environ trois minutes avant que la sortie Instance setup finished s'affiche, puis appuyez sur Ctrl+C. À ce stade, l'instance de VM est prête à être utilisée.

    2. Créez un nom d'utilisateur et un mot de passe pour l'instance de VM.

    3. Connectez-vous à la VM à l'aide du Bureau à distance en vous servant du nom d'utilisateur et du mot de passe créés à l'étape précédente.

    4. Effectuez un clic droit sur le bouton Start (Démarrer) (ou appuyez sur Win+X) et cliquez sur Windows PowerShell (Admin).

    5. Confirmez l'invite d'élévation en cliquant sur Yes (Oui).

    6. Rattachez l'ordinateur au domaine Active Directory, puis redémarrez-le :

      Add-Computer -Domain DOMAIN -Restart
      

      Remplacez DOMAIN par le nom DNS du domaine Active Directory.

      Attendez environ une minute la fin du redémarrage.

Réserver des adresses IP de cluster

Vous réservez maintenant deux adresses IP statiques dans votre VPC. Une adresse IP est utilisée comme adresse IP du cluster WSFC, l'autre est utilisée par l'équilibreur de charge interne.

  1. Réservez une adresse IP statique que vous utilisez comme adresse IP de cluster :

    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"
    

    Notez l'adresse IP, car vous en aurez besoin plus tard.

  2. Réservez une autre adresse IP statique pour l'équilibreur de charge interne et enregistrez l'adresse dans une nouvelle variable d'environnement nommée 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"
    

    Notez l'adresse IP, car vous en aurez besoin plus tard.

Votre projet et votre VPC sont maintenant prêts pour le déploiement de WSFC et de SQL Server.

Déployer le cluster de basculement

Vous allez maintenant utiliser les instances de VM pour déployer WSFC et SQL Server.

Préparer SQL Server

Créez un compte utilisateur dans Active Directory pour SQL Server :

  1. Connectez-vous à node-1 à l'aide du Bureau à distance. Connectez-vous avec le compte utilisateur de votre domaine.
  2. Effectuez un clic droit sur le bouton Start (Démarrer) (ou appuyez sur Win+X) et cliquez sur Windows PowerShell (Admin).
  3. Confirmez l'invite d'élévation en cliquant sur Yes (Oui).
  4. Créez un compte utilisateur de domaine pour SQL Server et l'agent SQL, puis attribuez un mot de passe :

    $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
    

Pour configurer SQL Server, procédez comme suit sur node-1 et node-2 :

  1. Effectuez un clic droit sur le bouton Start (Démarrer) (ou appuyez sur Win+X) et cliquez sur Windows PowerShell (Admin).

    Renommez l'instance SQL Server afin que son nom corresponde au nom d'hôte :

    $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. Accédez à l'outil Gestionnaire de configuration SQL Server.

  3. Dans le volet de navigation, sélectionnez Services SQL Server.

  4. Dans la liste des services, faites un clic droit sur SQL Server (MSSQLSERVER), puis sélectionnez Propriétés.

  5. Sous Se connecter en tant que, modifiez le compte :

    • Nom du compte : DOMAIN\sql_server, où DOMAIN est le nom NetBIOS de votre domaine Active Directory.
    • Mot de passe : saisissez le mot de passe que vous avez choisi précédemment.
  6. Cliquez sur OK.

  7. Lorsque vous êtes invité à redémarrer SQL Server, sélectionnez Oui.

SQL Server s'exécute désormais sous un compte utilisateur de domaine.

Créer des partages de fichiers

Créez deux partages de fichiers sur witness afin que l'instance de VM puisse stocker les sauvegardes SQL Server et agir en tant que témoin de partage de fichiers :

  1. Connectez-vous à witness à l'aide du Bureau à distance. Connectez-vous avec le compte utilisateur de votre domaine.
  2. Effectuez un clic droit sur le bouton Start (Démarrer) (ou appuyez sur Win+X) et cliquez sur Windows PowerShell (Admin).
  3. Confirmez l'invite d'élévation en cliquant sur Yes (Oui).
  4. Créez un partage de fichiers témoin, puis accordez-vous, ainsi qu'aux deux nœuds WSFC, l'accès au partage de fichiers :

    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. Créez un autre partage de fichiers pour stocker les sauvegardes et accordez un accès complet à SQL Server :

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

Déployer WSFC

Vous êtes maintenant prêt à créer le cluster de basculement.

  1. Revenez à la session de bureau à distance sur node-1.
  2. Effectuez un clic droit sur le bouton Start (Démarrer) (ou appuyez sur Win+X) et cliquez sur Windows PowerShell (Admin).
  3. Confirmez l'invite d'élévation en cliquant sur Yes (Oui).
  4. Créez un cluster :

    • Pour la configuration de l'équilibreur de charge
    New-Cluster `
      -Name sql-cluster `
      -Node node-1,node-2 `
      -NoStorage `
      -StaticAddress CLUSTER_ADDRESS
    

    Remplacez CLUSTER_ADDRESS par l'adresse IP du cluster que vous avez créée précédemment.

    • Pour la configuration de DNN
    New-Cluster `
      -Name sql-cluster `
      -Node node-1,node-2 `
      -NoStorage `
      -ManagementPointNetworkType Distributed
    
  5. Revenez à la session PowerShell sur witness et accordez à l'objet ordinateur virtuel du cluster l'autorisation d'accéder au partage de fichiers :

    icacls C:\QWitness\ /grant 'sql-cluster$:(OI)(CI)(M)'
    Grant-SmbShareAccess `
      -Name QWitness `
      -AccountName 'sql-cluster$' `
      -AccessRight Full `
      -Force
    
  6. Revenez à la session PowerShell sur node-1 et configurez le cluster pour utiliser le partage de fichiers sur witness en tant que quorum de cluster :

    Set-ClusterQuorum -FileShareWitness \\witness\QWitness
    
  7. Vérifiez que le cluster a bien été créé :

    Test-Cluster
    

    Vous pouvez voir des avertissements pouvant être ignorés en toute sécurité :

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

    Vous pouvez également lancer le composant logiciel enfichable MMC du gestionnaire de cluster de basculement pour vérifier l'état du cluster en exécutant cluadmin.msc.

  8. Si vous utilisez le service AD géré, ajoutez le compte d'ordinateur utilisé par WSFC au groupe Cloud Service Domain Join Accounts pour pouvoir joindre des ordinateurs au domaine :

    Add-ADGroupMember `
      -Identity "Cloud Service Domain Join Accounts" `
      -Members sql-cluster$
    
  9. Activez les groupes de disponibilité AlwaysOn sur les deux nœuds :

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

Créer un groupe de disponibilité

Vous allez maintenant créer un exemple de base de données bookshelf, l'inclure dans un nouveau groupe de disponibilité nommé bookshelf-ag et configurer la haute disponibilité.

Créer une base de données

Créez une base de données. Pour les besoins de ce tutoriel, cette base de données n'a pas besoin de contenir de données.

  1. Revenez à la session de bureau à distance sur node-1.
  2. Ouvrez SQL Server Management Studio.
  3. Dans la boîte de dialogue Se connecter au serveur, vérifiez que le nom du serveur est défini sur NODE-1 et sélectionnez Se connecter.
  4. Dans le menu, sélectionnez Fichier > Nouveau > Requête avec la connexion actuelle.
  5. Collez le script SQL suivant dans l'éditeur :

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

    Le script crée une base de données comportant une seule table et effectue une sauvegarde initiale sur witness.

  6. Sélectionnez Exécuter pour exécuter le script SQL.

Configurer la haute disponibilité

  1. Dans la fenêtre Explorateur d'objets, faites un clic droit sur Haute disponibilité Always On, puis sélectionnez Assistant du nouveau groupe de disponibilité.
  2. Sur la page Spécifier les options, définissez le nom du groupe de disponibilité sur bookshelf-ag, puis sélectionnez Suivant.
  3. Sur la page Sélectionner des bases de données, sélectionnez la base de données bookshelf, puis cliquez sur Suivant.
  4. Sur la page Spécifier les instances dupliquées, sélectionnez l'onglet Instances dupliquées :

    1. Sélectionnez Ajouter une instance dupliquée.
    2. Dans la boîte de dialogue Se connecter au serveur, saisissez le nom du serveur node-2, puis sélectionnez Se connecter.

      La liste des instances dupliquées de disponibilité contient désormais les instances SQL Server, node-1 et node-2.

    3. Définissez le Mode de disponibilité sur Commit synchrone pour les deux instances.

    4. Définissez le Basculement automatique sur Activé pour les deux instances.

    5. Sélectionnez l'onglet Écouteur. **

      1. Sélectionnez Créer un écouteur de groupe de disponibilité.
      2. Saisissez les paramètres suivants :

        • Nom DNS de l'écouteur : bookshelf.
        • Port : 1433
        • Mode réseau : IP Statique
      3. Sélectionnez Ajouter, puis saisissez l'adresse IP de l'équilibreur de charge que vous avez créé précédemment. Sélectionnez ensuite OK.

    6. Cliquez sur Suivant.

  5. Sur la page Sélectionner la synchronisation des données, choisissez Amorçage automatique.

  6. Sur la page Validation, vérifiez que toutes les vérifications ont réussi.

  7. Sur la page Résumé, sélectionnez Terminer.

  8. Sur la page Résultats, sélectionnez Fermer.

Configurer les vérifications d'état

Enfin, configurez le cluster pour exposer un point de terminaison de vérification d'état pouvant être utilisé par un équilibreur de charge interne :

  1. Revenez à la session PowerShell sur node-1.
  2. Initialisez une variable avec l'adresse IP de l'équilibreur de charge.

    $LoadBalancerIP = 'IP_ADDRESS'
    

    Remplacez IP_ADDRESS par l'adresse IP de l'adresse wsfc que vous avez réservée précédemment.

  3. Configurez le cluster de basculement pour qu'il réponde au service de vérification d'état :

    $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. Redémarrez la ressource de cluster :

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

Créer un équilibreur de charge interne

Afin de fournir un point de terminaison unique aux clients SQL Server, vous allez maintenant déployer un équilibreur de charge interne qui utilise une vérification d'état garantissant que le trafic est dirigé vers le nœud actif de WSFC.

  1. Revenez à la session Cloud Shell que vous avez précédemment ouverte.
  2. Créez deux groupes d'instances non gérés (un par zone), puis ajoutez les deux nœuds aux groupes :

    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. Créez une vérification d'état que l'équilibreur de charge peut utiliser pour déterminer quel est le nœud actif.

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

    La vérification d'état sonde le port 59997, qui est le port que vous avez précédemment configuré en tant que ProbePort pour l'écouteur du groupe de disponibilité.

  4. Créez un service de backend et ajoutez les deux groupes d'instances :

    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. Créez l'équilibreur de charge interne :

    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
    

Vous pouvez maintenant vous connecter à l'écouteur du groupe de disponibilité SQL Server à l'aide de l'équilibreur de charge interne et du nom DNS bookshelf.

Pour créer plusieurs groupes de disponibilité sur un seul cluster de basculement, vous devez utiliser un équilibreur de charge distinct avec sa propre vérification d'état par groupe de disponibilité. Cela signifie que pour chaque groupe de disponibilité, vous avez besoin des éléments suivants :

  1. Une adresse IP interne réservée (une pour chaque groupe de disponibilité) à utiliser pour l'écouteur et l'équilibreur de charge interne.

  2. Un équilibreur de charge distinct (un pour chaque groupe de disponibilité) avec sa propre adresse IP réservée à l'étape précédente.

  3. Un port de vérification distinct (59997, 59998, etc. pour chaque groupe de disponibilité) et une règle de pare-feu pour autoriser le trafic sur ces ports.

  4. Une règle de vérification d'état distincte pour chaque groupe de disponibilité à l'aide des ports de vérification respectifs.

Configurer un écouteur DNN pour un groupe de disponibilité

De façon semblable à la configuration de l'équilibrage de charge interne, l'écouteur DNN sert de point de terminaison unique pour les clients SQL Server.

  1. Revenez à la session PowerShell sur node-1.
  2. Exécutez le script suivant pour créer un écouteur DNN.

      $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
    

    Remplacez DNN_PORT par le port d'écoute du DNN. Le port d'écoute du DNN doit être configuré avec un port unique. Pour plus d'informations, consultez la section Remarques concernant les ports.

    Remplacez DNN_NAME par le nom de l'écouteur DNN.

  3. Créez des règles de pare-feu pour le port d'écoute DNN sur node-1 et node-2.

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

Test du basculement

Vous êtes maintenant prêt à tester si le basculement fonctionne comme prévu :

  1. Revenez à la session PowerShell sur witness.
  2. Exécutez le script suivant :

    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
    }
    

    Remplacez LISTENER par le nom DNS de l'écouteur ou l'écouteur DNN et le port du groupe de disponibilité.

    Toutes les 2 secondes, le script se connecte à SQL Server à l'aide de l'écouteur du groupe de disponibilité ou de l'écouteur DNN et interroge le nom du serveur.

    Laissez le script s'exécuter.

  3. Revenez à la session de bureau à distance sur node-1 pour déclencher un basculement :

    1. Dans SQL Server Management Studio, accédez à Haute disponibilité Always On > Groupes de disponibilité > bookshelf-ag (Principal), puis effectuez un clic droit sur le nœud.
    2. Sélectionnez Basculement.
    3. Sur la page Sélectionner une nouvelle instance dupliquée principale, vérifiez que node-2 est sélectionné en tant que nouvelle instance dupliquée principale, et que la colonne Aptitude au basculement indique No data loss. Sélectionnez ensuite Suivant.
    4. Sur la page Se connecter à une instance dupliquée, sélectionnez Se connecter.
    5. Dans la boîte de dialogue Se connecter au serveur, vérifiez que le nom du serveur est node-2, puis cliquez sur Se connecter.
    6. Sélectionnez Suivant, puis Terminer.
    7. Sur la page Résultats, vérifiez que le basculement a réussi.
  4. Revenez à la session PowerShell sur witness.

  5. Observez la sortie du script en cours d'exécution et notez que le nom du serveur passe de node-1 à node-2 suite au basculement.

  6. Arrêtez le script en appuyant sur Ctrl+C.

Nettoyer

Une fois le tutoriel terminé, vous pouvez procéder au nettoyage des ressources que vous avez créées afin qu'elles ne soient plus comptabilisées dans votre quota et qu'elles ne vous soient plus facturées. Dans les sections suivantes, nous allons voir comment supprimer ou désactiver ces ressources.

Supprimer le projet

Le moyen le plus simple d'empêcher la facturation est de supprimer le projet que vous avez créé pour ce tutoriel.

Pour supprimer le projet :

  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.

Étape suivante