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 :
- "Équilibreur de charge interne. Pour en savoir plus, consultez la section Exécuter un clustering de basculement Windows Server.
- Nom du réseau distribué (DNN, Distributed Network Name). Pour en savoir plus, consultez la section Configurer un écouteur DNN pour un groupe de disponibilité.
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
- Déployer un serveur WSFC comprenant deux instances de VM SQL Server et une troisième instance de VM faisant office de témoin de partage de fichiers.
- Créer un groupe de disponibilité avec commit synchrone.
- Configurer un équilibreur de charge ou un nom de réseau distribué (DNN) pour acheminer le trafic vers votre groupe de disponibilité avec SQL Server.
- Vérifier que l'installation fonctionne en simulant un basculement.
Coûts
Ce tutoriel utilise des composants facturables de Google Cloud, dont :
- Compute Engine
- Cloud Load Balancing (non nécessaire avec une configuration DNN)
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 :
- 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.
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
-
Vérifiez que la facturation est activée pour votre projet Google Cloud.
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
-
Vérifiez que la facturation est activée pour votre projet Google Cloud.
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 :
Dans la console Google Cloud, ouvrez Cloud Shell en cliquant sur le bouton Activer Cloud Shell
.
Initialisez les variables suivantes :
VPC_NAME=
VPC_NAME
SUBNET_NAME=SUBNET_NAME
Où :
VPC_NAME
: nom de votre VPCSUBNET_NAME
: nom de votre sous-réseau
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.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 :
- Revenez à la session Cloud Shell que vous avez précédemment ouverte.
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
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.
- Revenez à la session Cloud Shell que vous avez précédemment ouverte.
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
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
surtrue
: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"
Pour rattacher les trois instances de VM à Active Directory, procédez comme suit pour chacune d'entre elles :
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.Créez un nom d'utilisateur et un mot de passe pour l'instance de VM.
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.
Effectuez un clic droit sur le bouton Start (Démarrer) (ou appuyez sur Win+X) et cliquez sur Windows PowerShell (Admin).
Confirmez l'invite d'élévation en cliquant sur Yes (Oui).
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.
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.
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 :
- Connectez-vous à
node-1
à l'aide du Bureau à distance. Connectez-vous avec le compte utilisateur de votre domaine. - Effectuez un clic droit sur le bouton Start (Démarrer) (ou appuyez sur Win+X) et cliquez sur Windows PowerShell (Admin).
- Confirmez l'invite d'élévation en cliquant sur Yes (Oui).
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
:
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
Accédez à l'outil Gestionnaire de configuration SQL Server.
Dans le volet de navigation, sélectionnez Services SQL Server.
Dans la liste des services, faites un clic droit sur SQL Server (MSSQLSERVER), puis sélectionnez Propriétés.
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.
- Nom du compte :
Cliquez sur OK.
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 :
- Connectez-vous à
witness
à l'aide du Bureau à distance. Connectez-vous avec le compte utilisateur de votre domaine. - Effectuez un clic droit sur le bouton Start (Démarrer) (ou appuyez sur Win+X) et cliquez sur Windows PowerShell (Admin).
- Confirmez l'invite d'élévation en cliquant sur Yes (Oui).
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$
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.
- Revenez à la session de bureau à distance sur
node-1
. - Effectuez un clic droit sur le bouton Start (Démarrer) (ou appuyez sur Win+X) et cliquez sur Windows PowerShell (Admin).
- Confirmez l'invite d'élévation en cliquant sur Yes (Oui).
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
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
Revenez à la session PowerShell sur
node-1
et configurez le cluster pour utiliser le partage de fichiers surwitness
en tant que quorum de cluster :Set-ClusterQuorum -FileShareWitness \\witness\QWitness
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
.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$
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.
- Revenez à la session de bureau à distance sur
node-1
. - Ouvrez SQL Server Management Studio.
- 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. - Dans le menu, sélectionnez Fichier > Nouveau > Requête avec la connexion actuelle.
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
.Sélectionnez Exécuter pour exécuter le script SQL.
Configurer la haute disponibilité
- 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é.
- Sur la page Spécifier les options, définissez le nom du groupe de disponibilité sur
bookshelf-ag
, puis sélectionnez Suivant. - Sur la page Sélectionner des bases de données, sélectionnez la base de données
bookshelf
, puis cliquez sur Suivant. Sur la page Spécifier les instances dupliquées, sélectionnez l'onglet Instances dupliquées :
- Sélectionnez Ajouter une instance dupliquée.
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
etnode-2
.Définissez le Mode de disponibilité sur Commit synchrone pour les deux instances.
Définissez le Basculement automatique sur Activé pour les deux instances.
Sélectionnez l'onglet Écouteur. **
- Sélectionnez Créer un écouteur de groupe de disponibilité.
Saisissez les paramètres suivants :
- Nom DNS de l'écouteur :
bookshelf
. - Port :
1433
- Mode réseau : IP Statique
- Nom DNS de l'écouteur :
Sélectionnez Ajouter, puis saisissez l'adresse IP de l'équilibreur de charge que vous avez créé précédemment. Sélectionnez ensuite OK.
Cliquez sur Suivant.
Sur la page Sélectionner la synchronisation des données, choisissez Amorçage automatique.
Sur la page Validation, vérifiez que toutes les vérifications ont réussi.
Sur la page Résumé, sélectionnez Terminer.
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 :
- Revenez à la session PowerShell sur
node-1
. Initialisez une variable avec l'adresse IP de l'équilibreur de charge.
$LoadBalancerIP = '
IP_ADDRESS
'Remplacez
IP_ADDRESS
par l'adresse IP de l'adressewsfc
que vous avez réservée précédemment.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; }
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.
- Revenez à la session Cloud Shell que vous avez précédemment ouverte.
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
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 queProbePort
pour l'écouteur du groupe de disponibilité.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
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 :
Une adresse IP interne réservée (une pour chaque groupe de disponibilité) à utiliser pour l'écouteur et l'équilibreur de charge interne.
Un équilibreur de charge distinct (un pour chaque groupe de disponibilité) avec sa propre adresse IP réservée à l'étape précédente.
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.
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.
- Revenez à la session PowerShell sur
node-1
. 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 $AgRemplacez
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.Créez des règles de pare-feu pour le port d'écoute DNN sur
node-1
etnode-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 :
- Revenez à la session PowerShell sur
witness
. 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.
Revenez à la session de bureau à distance sur
node-1
pour déclencher un basculement :- 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.
- Sélectionnez Basculement.
- 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 indiqueNo data loss
. Sélectionnez ensuite Suivant. - Sur la page Se connecter à une instance dupliquée, sélectionnez Se connecter.
- 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. - Sélectionnez Suivant, puis Terminer.
- Sur la page Résultats, vérifiez que le basculement a réussi.
Revenez à la session PowerShell sur
witness
.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.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 :
- In the Google Cloud console, go to the Manage resources page.
- In the project list, select the project that you want to delete, and then click Delete.
- In the dialog, type the project ID, and then click Shut down to delete the project.