Configurer des groupes de disponibilité AlwaysOn SQL Server avec commit synchrone à l'aide d'un équilibreur de charge interne


Les groupes de disponibilité Always On 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é Always On utilisent le clustering de basculement Windows Server (WSFC) pour mettre en œuvre la haute disponibilité. Cependant, les deux fonctionnalités diffèrent comme suit:

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é Always On acceptent plusieurs modes de disponibilité. Ce tutoriel explique comment déployer des groupes de disponibilité Always On 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 de cluster 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 de cluster Windows sur site, les annonces du protocole ARP (Address Resolution Protocol) déclenchent le basculement d'adresse IP. Google Cloud, en revanche, ignore les annonces ARP. Vous devez donc mettre en œuvre l'une des deux options suivantes: utiliser un équilibreur de charge interne et un nom de réseau distribué (DNN).

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. Pour en savoir plus sur Active Directory sur Google Cloud, consultez la section Avant de commencer.

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. Un équilibreur de charge interne garantit que le trafic est dirigé vers le nœud actif.

Pour en savoir plus sur le clustering de basculement Windows Server avec un équilibreur de charge interne, consultez la section Clustering de basculement.

Architecture

Ce schéma comprend les éléments suivants :

  • Deux instances de VM dans la même région et dans des zones différentes pour le cluster de bascule appelé node-1 et node-2. L'un 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.
  • Une troisième VM appelée witness sert de témoin de partage de fichiers pour fournir un vote décisif et atteindre un quorum pour le basculement.
  • Un équilibreur de charge interne devant le cluster fournit un point de terminaison unique aux clients SQL Server et utilise une vérification de l'état'état pour s'assurer que le trafic est dirigé vers le nœud actif.

Objectifs

Ce tutoriel vise à atteindre les objectifs suivants:

Coûts

Ce tutoriel utilise des composants facturables de Google Cloud, y compris:

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 effectuer les tâches de ce tutoriel, vérifiez les points suivants:

  1. Sign in to your Google Cloud account. If you're new to Google Cloud, create an account to evaluate how our products perform in real-world scenarios. New customers also get $300 in free credits to run, test, and deploy workloads.
  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.

  6. Vous disposez d'un domaine Active Directory 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 à vos contrôleurs de domaine.
  7. Vous disposez d'un utilisateur Active Directory autorisé à joindre des ordinateurs au domaine et à se connecter à l'aide du protocole RDP. Si vous utilisez le service Microsoft AD géré, vous pouvez utiliser l'utilisateur setupadmin. Pour en savoir plus sur le provisionnement des comptes utilisateur Active Directory, consultez la section Provisionnement des comptes utilisateur Active Directory.
  8. Un projet Google Cloud et un cloud privé virtuel (VPC) avec une connectivité à vos contrôleurs de domaine Active Directory.
  9. Un sous-réseau à utiliser avec les instances de machine virtuelle de cluster de basculement Windows Server.
Une fois que vous avez terminé ce tutoriel, vous pouvez éviter 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 votre projet et votre réseau

Pour déployer vos groupes de disponibilité AlwaysOn SQL Server, vous devez préparer votre projet et votre VPCGoogle Cloud . Les sections suivantes vous expliquent comment procéder.

Configurer votre projet et votre région

Pour préparer votre projet Google Cloud au déploiement de groupes de disponibilité Always On 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
    

    Remplacez les éléments suivants :

    • 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

Pour autoriser les clients à se connecter à SQL Server et à communiquer entre les nœuds du cluster, vous devez créer plusieurs règles de pare-feu. Vous pouvez utiliser des tags réseau pour simplifier la création de ces règles de pare-feu, comme suit:

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

Pour créer des règles de pare-feu qui utilisent ces tags réseau, procédez comme suit:

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

    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
    

Créer des instances de VM

Créez et déployez 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 passthrough interne ;
  • avoir installé un clustering de basculement Windows Server et SQL Server ;
  • 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, déployez une troisième VM faisant office de témoin de partage de fichiers en procédant comme suit:

  1. Revenez à la session Cloud Shell que vous avez précédemment ouverte.
  2. Créez un script spécialisé pour les nœuds WSFC. Ce script installe les fonctionnalités Windows nécessaires 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 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. Créez les instances de VM. Sur les deux VM qui servent de nœuds de cluster, 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)
    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"
    

    Remplacez ZONE1, ZONE2 et ZONE3 en fonction des zones que vous utilisez.

  4. Pour joindre 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 quelques minutes jusqu'à ce 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 à votre domaine Active Directory, puis redémarrez-le.

      Add-Computer -Domain DOMAIN -Restart
      

      Remplacez DOMAIN par le nom DNS du domaine Active Directory.

    7. Saisissez les identifiants d'un compte disposant des autorisations nécessaires pour associer une VM au domaine.

      Attendez que la VM redémarre. Vous avez maintenant associé l'instance de VM à Active Directory.

Réserver des adresses IP statiques

Vous réservez maintenant deux adresses IP statiques dans votre VPC. Une adresse IP est utilisée comme adresse IP par défaut du cluster WSFC, l'autre sert d'adresse IP statique pour l'écouteur du groupe de disponibilité de SQL Server.

Dans un cluster WSFC, l'adresse IP du cluster sert principalement à des fins administratives et à accéder aux ressources du cluster. Cette adresse IP virtuelle est attribuée au cluster lui-même, ce qui permet aux administrateurs de le gérer et d'effectuer des tâches telles que la configuration des paramètres du cluster, la surveillance de l'état des nœuds et la gestion des processus de basculement.

Dans le contexte d'un groupe de disponibilité SQL Server, un écouteur est un nom de réseau virtuel (VNN) et une adresse IP qui permettent aux clients de se connecter au groupe de disponibilité sans avoir à savoir quel serveur spécifique est le nœud principal.

Un équilibreur de charge interne a besoin d'une adresse IP interne pour acheminer efficacement le trafic interne, et pour prendre en charge la haute disponibilité et l'équilibrage de charge dans le contexte d'un cluster WSFC. L'équilibreur de charge interne garantit que les requêtes sont toujours dirigées vers le réplica principal actuel du cluster. Lors des événements de basculement, l'équilibreur de charge détecte les modifications apportées au réplica principal et redirige les connexions client vers le nouveau réplica principal sans intervention manuelle, ce qui réduit les temps d'arrêt et garantit la disponibilité continue des services de base de données.

Dans le contexte d'un WSFC avec des groupes de disponibilité Always On SQL Server, les adresses IP statiques internes réservées pour l'adresse IP du cluster WSFC par défaut et l'écouteur du groupe de disponibilité sont également utilisées par les équilibreurs de charge internes associés.

  1. Pour réserver deux adresses IP statiques dans votre VPC, procédez comme suit.

    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. Remplacez l'adresse IP du cluster dans la variable CLUSTER_IP. Vous en aurez besoin plus tard pour la spécifier comme adresse IP du cluster:

    CLUSTER_IP=CLUSTER_IP
    
  3. Réservez une autre adresse IP statique pour l'écouteur de groupe de disponibilité et enregistrez l'adresse dans une nouvelle variable d'environnement nommée 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. Remplacez l'adresse IP réservée de l'équilibreur de charge par la variable LISTENER_IP. Vous en aurez besoin plus tard pour configurer votre groupe de disponibilité.

    LISTENER_IP=LISTENER_IP
    

Votre projet et votre VPC sont maintenant prêts pour le déploiement du cluster de basculement Windows Server et de SQL Server.

Déployer le cluster de basculement

Vous pouvez désormais utiliser les instances de VM pour déployer un cluster de basculement Windows Server et SQL Server. Les sections suivantes vous expliquent comment procéder.

Préparer SQL Server

Créez un compte utilisateur dans Active Directory pour SQL Server en procédant comme suit.

  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. Accédez à l'outil Gestionnaire de configuration SQL Server.
  2. Dans le volet de navigation, sélectionnez Services SQL Server.
  3. Dans la liste des services, faites un clic droit sur SQL Server (MSSQLSERVER), puis sélectionnez Propriétés.
  4. Sous Se connecter en tant que, modifiez le compte comme suit:

    • 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.
  5. Cliquez sur OK.

  6. 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 l'instance de VM witness afin qu'elle 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 de cluster, 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
    

Créer le cluster de basculement

Pour créer le cluster de basculement, procédez comme suit:

  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 nouveau cluster.

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

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

  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 ignorer les avertissements suivants.

    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 le cluster Windows 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é Always On 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é

Vous pouvez maintenant configurer la haute disponibilité pour le groupe de disponibilité à l'aide de T-SQL ou de SQL Server Management Studio.

Utiliser T-SQL

Pour configurer la haute disponibilité pour le groupe de disponibilité à l'aide de T-SQL, procédez comme suit:

  1. Connectez-vous à node-1, puis exécutez le script suivant pour créer le groupe de disponibilité "bookshelf-ag".

    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. Connectez-vous à node-2 et exécutez le script suivant.

    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. Sur node-1, puis exécutez le script suivant pour créer le groupe de disponibilité bookshelf-ag.

    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. Dans le script suivant, remplacez LISTENER_IP par l'adresse IP que vous avez réservée précédemment pour l'équilibreur de charge interne, puis exécutez-le.

    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. Connectez-vous à node-2, puis exécutez le script suivant pour joindre le réplica secondaire au groupe de disponibilité et activer le forçage de semis automatique.

    USE master;
    GO
    
    ALTER AVAILABILITY GROUP [bookshelf-ag] JOIN;
    ALTER AVAILABILITY GROUP [bookshelf-ag] GRANT CREATE ANY DATABASE;
    
    
  6. Vérifiez l'état du groupe de disponibilité.

    SELECT * FROM sys.dm_hadr_availability_group_states;
    GO
    

    synchronization_health_desc devrait s'afficher sous la forme HEALTHY.

À l'aide de SQL Server Management Studio

Pour configurer la haute disponibilité pour le groupe de disponibilité à l'aide de SQL Server Management Studio, procédez comme suit:

  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'écouteur (LISTENER_IP) que vous avez réservée précédemment pour l'équilibreur de charge interne. Sélectionnez ensuite OK.

    6. Sélectionnez 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.

Créer des équilibreurs de charge et des vérifications d'état internes

L'adresse IP du cluster représente un point de terminaison unique pour le cluster de basculement Windows. Vous l'utilisez à des fins administratives et pour gérer les ressources du cluster. L'adresse IP du cluster pointe toujours vers le nœud hôte (ou principal) du cluster. Vous déployez un équilibreur de charge interne qui utilise une vérification de l'état garantissant que le trafic est dirigé vers le nœud hôte du cluster. Étant donné que les outils WSFC nécessitent que plusieurs protocoles soient disponibles pour le transfert (ICMP, UDP et TCP), nous vous recommandons de déployer un équilibreur de charge interne avec plusieurs protocoles compatibles avec tous les ports.

Pour déployer un équilibreur de charge interne, procédez comme suit:

  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 $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. Créez vérification de l'état de l'état de l'adresse IP du cluster que l'équilibreur de charge peut utiliser pour déterminer le nœud actif du point de vue du cluster Windows. Le port par défaut auquel l'agent invité Compute Engine répond aux vérifications de l'état est 59998. La vérification de l'état fournit l'adresse IP du cluster dans la requête et attend 1 comme réponse renvoyée par le nœud actif.

    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. Créez un service de backend et ajoutez les deux groupes d'instances existants.

    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. Créez l'équilibreur de charge interne associé à l'adresse IP du cluster.

    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
    

Pour fournir un point de terminaison unique aux clients SQL Server qui souhaitent se connecter à n'importe quelle base de données de votre groupe de disponibilité bookshelf, déployez un nouvel équilibreur de charge interne dédié à ce groupe de disponibilité. Pour ce faire, procédez comme suit:

  1. Créez une vérification de l'état pour l'écouteur du groupe de disponibilité que l'équilibreur de charge peut utiliser pour déterminer quel est le nœud principal du groupe de disponibilité SQL Server bookshelf.

    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"
    

    La vérification de l'état utilise le même port d'agent invité Compute Engine, mais elle fournit dans sa requête l'adresse IP de l'écouteur du groupe de disponibilité bookshelf.

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

    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. Créez l'équilibreur de charge interne associé à l'écouteur du groupe de disponibilité bookshelf-ag de SQL Server.

    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
    

Vous pouvez désormais vous connecter à l'écouteur du groupe de disponibilité SQL Server à l'aide du nom DNS bookshelf et de son port défini dans l'écouteur du groupe de disponibilité de la bibliothèque. L'équilibreur de charge interne dirige le trafic vers le nœud principal du groupe de disponibilité bookshelf.

Pour créer plusieurs groupes de disponibilité sur un seul cluster de basculement, vous devez utiliser des services de backend et un équilibreur de charge distincts, chacun avec sa propre vérification d'état par groupe de disponibilité.

Chaque groupe de disponibilité peut avoir des nœuds différents désignés comme principaux, et ils peuvent être différents du nœud hôte du cluster Windows. Pour plusieurs groupes de disponibilité, vous avez besoin des éléments suivants:

  • Adresse IP statique réservée pour l'écouteur du groupe de disponibilité utilisé par l'équilibreur de charge interne. Réservez une adresse pour chaque groupe de disponibilité.

  • Une règle de vérification de l'état#39;état distincte pour chaque groupe de disponibilité. La requête de la vérification de l'état d'état fournit l'adresse IP statique de l'écouteur du groupe de disponibilité (qui est également l'adresse IP réservée à l'étape précédente). La vérification de l'état recherche la réponse 1 renvoyée par l'agent GCE. Toutes les vérifications d'état utilisent le port 59998.

  • Un service de backend distinct pour chaque groupe de disponibilité auquel vous ajoutez les deux groupes d'instances de calcul existants. Le service de backend utilise la vérification de l'état définie à l'étape précédente.

  • Un équilibreur de charge interne pour chaque groupe de disponibilité du service de backend créé à l'étape précédente. L'équilibreur de charge est associé à l'adresse IP statique de l'écouteur du groupe de disponibilité.

Tester le 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 ci-après.

    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
    }
    

    Dans ce guide, nous avons utilisé le nom DNS bookshelf et la valeur de port 1433 pour l'écouteur du groupe de disponibilité dans la définition du serveur tcp:bookshelf,1433.

    Toutes les 2 secondes, le script se connecte à SQL Server à l'aide de l'écouteur du groupe de disponibilité 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.

Effectuer un nettoyage

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