Ce tutoriel constitue la troisième partie d'une série destinée à vous aider à déployer une architecture Windows à disponibilité élevée avec Microsoft Active Directory, SQL Server et Internet Information Services (IIS). Dans ce tutoriel, vous allez configurer deux serveurs Web IIS s'exécutant dans différentes zones de la même région. Vous allez ensuite connecter les serveurs Web à votre groupe de disponibilité SQL Server et à vos contrôleurs de domaine. En configurant les serveurs Web derrière un équilibreur de charge, vous limitez les risques de surcharge en répartissant les tâches entre les deux machines. Vous pouvez également continuer à exécuter l'application si l'un des serveurs se déconnecte.
La série comprend les tutoriels suivants :
- Déployer un environnement Microsoft Active Directory tolérant aux pannes
- Déployer plusieurs sous-réseaux SQL Server.
- Déployer des serveurs Web IIS à équilibrage de charge (ce document)
Vous allez configurer un contrôleur de domaine et une instance SQL Server sur un projet Google Cloud. Chaque composant de ce déploiement est également conçu pour s'intégrer de manière sécurisée à l'authentification Windows fournie par les contrôleurs de domaine.
L'architecture décrite dans ce tutoriel est conçue pour s'exécuter sur Google Cloud. Cependant, certains composants, tels qu'Active Directory et SQL Server, peuvent être exécutés sur site. Ce tutoriel ne traite que du scénario d'exécution de tous les composants sur Google Cloud.
Objectifs
- Créer deux sous-réseaux de réseau couvrant deux zones.
- Déployer une machine virtuelle (VM) Microsoft SQL Server dans chaque zone.
- Configurer chaque instance SQL Server pour qu'elle rejoigne votre domaine Active Directory.
- Créer un cluster de basculement Windows Server.
- Créer et configurer un exemple de base de données "bookshelf" SQL Server.
- Configurer le groupe de disponibilité Always On Microsoft SQL Server.
Coûts
Dans ce tutoriel, vous continuez à utiliser les ressources Google Cloud que vous avez configurées dans les tutoriels précédents. Vous allez utiliser les composants facturables suivants :
Le simulateur de coût estime le coût de cet environnement à environ 4 $ par jour.
Avant de commencer
La configuration que vous utilisez dans ce tutoriel nécessite l'accès à un contrôleur de domaine Windows et à un domaine Active Directory opérationnel. Si vous ne disposez pas encore de cet environnement, suivez la procédure décrite dans les tutoriels suivants :
- Déployer un environnement Microsoft Active Directory tolérant aux pannes
- Déployer plusieurs sous-réseaux SQL Server.
Pour certaines parties de ce tutoriel, vous allez effectuer des tâches sur un poste de travail Windows. Il peut s'agir de votre ordinateur local. Il ne doit pas nécessairement se trouver dans le réseau VPC que vous utilisez pour les serveurs Web IIS. Assurez-vous que le poste de travail dispose des éléments suivants :
- Visual Studio 2013 ou version ultérieure.
- Git
- Tools for Visual Studio. Vous pouvez télécharger ces outils à partir de la page liée.
Initialiser des variables communes
Dans la première partie de cette série, vous avez défini des variables qui contrôlent l'emplacement des éléments de l'infrastructure dans Google Cloud. Vérifiez que les variables sont toujours définies correctement et qu'elles correspondent aux valeurs que vous avez définies précédemment.
Ouvrez Cloud Shell.
Dans Cloud Shell, créez les variables d'environnement suivantes pour définir les valeurs dont vous aurez besoin ultérieurement dans le tutoriel.
Les commandes définissent la région sur
us-east1
. Si vous avez utilisé une région différente dans les tutoriels précédents, modifiez ce script pour que la région corresponde à celle que vous avez utilisée auparavant.region=us-east1 zone_1=${region}-b zone_2=${region}-c vpc_name=webappnet project_id=your-project-id
Remplacez your-project-id par l'ID du projet Google Cloud que vous utilisez.
Créer l'infrastructure réseau
Dans cette section, vous allez ajouter des sous-réseaux au réseau cloud privé virtuel (VPC) existant. (Vous avez créé le réseau VPC dans un tutoriel précédent.) Ces sous-réseaux vous permettent de disposer de plages d'adresses IP uniques qui sont allouées aux instances de serveur Web et qui peuvent par la suite servir à définir des stratégies de pare-feu basées sur les sous-réseaux.
Dans Cloud Shell, ajoutez un sous-réseau au réseau VPC existant :
gcloud compute networks subnets create public-webapp-zone \ --network $vpc_name \ --region $region \ --range 10.5.0.0/24 \ --project $project_id
Créez une règle de pare-feu interne pour autoriser le trafic entre les adresses IP internes :
gcloud compute firewall-rules create allow-internal-ports-public-webapp \ --network $vpc_name \ --allow tcp:1-65535,udp:1-65535,icmp \ --source-ranges 10.5.0.0/24 \ --project $project_id
Lancer les serveurs Web
Vous devez utiliser une image de Google Cloud Marketplace pour provisionner vos serveurs Web. Après avoir provisionné les serveurs Web, vous pouvez les utiliser comme cibles pour déployer des applications Web.
Créer le premier serveur
Accédez à Google Cloud Marketplace.
Dans la console Google Cloud, sélectionnez le projet Google Cloud sur lequel vous souhaitez exécuter le serveur Web. Comme ce tutoriel s'appuie sur l'ensemble précédent, utilisez le même projet que dans les tutoriels précédents.
Définissez les valeurs suivantes sur la page :
- Deployment Name (Nom du déploiement) :
webserver1
- Zone : zone_1
- Windows Server OS Version (Version de l'OS Windows Server) : 2016
- Boot type (Type de démarrage) : SSD persistent disk (Disque persistant SSD)
- Disk size (Taille du disque) : 200 Go
- Nom du réseau : vpc_name
- Subnetwork name (Nom du sous-réseau) :
public-webapp-zone
- Firewall (Pare-feu) : Allow WebDeploy traffic (Autoriser le trafic WebDeploy), Allow HTTP traffic (Autoriser le trafic HTTP)
Remplacez zone_1 et vpc_name par les valeurs que vous avez utilisées lors de l'initialisation des variables.
- Deployment Name (Nom du déploiement) :
Cliquez sur Déployer et attendez que la console Google Cloud indique que le déploiement est terminé.
Se connecter à l'instance de serveur
Dans Cloud Shell, créez un mot de passe pour l'instance
webserver1
:gcloud compute reset-windows-password webserver1 \ --zone $zone_1 \ --project $project_id \ --quiet
Connectez-vous à la nouvelle instance Windows à l'aide du protocole RDP (Remote Desktop Protocol). Utilisez les identifiants que vous avez créés à l'étape précédente.
Configurer l'instance de serveur
Dans l'instance
webserver1
, ouvrez le terminal PowerShell en tant qu'administrateur.Définissez des variables pour les adresses IP des DNS et pour le nom de domaine :
$DNS1 = "10.1.0.100" $DNS2 = "10.2.0.100" $DomainName = "example-gcp.com"
Créez un compte de service local appelé
webapp.service
. Vous l'utiliserez ultérieurement pour publier l'application Web :net user webapp.service * /add
Lorsque vous y êtes invité, saisissez un mot de passe. Utilisez un mot de passe sécurisé et stockez-le dans un endroit sûr pour une utilisation ultérieure.
Activez le compte et ajoutez-le au groupe local "Administrateurs" :
net user webapp.service /active:yes net localgroup administrators webapp.service /add
Configurez les serveurs DNS :
netsh interface ip set dns Ethernet static $DNS1 netsh interface ip add dns Ethernet $DNS2 index=2
Associez le serveur Web au domaine
example-gcp.com
:Add-Computer -DomainName $DomainName -Credential (Get-Credential "example\Administrator")
Lorsque vous y êtes invité, saisissez un mot de passe pour le compte administrateur. Il s'agit du compte de domaine que vous avez utilisé lors de la création d'une forêt Active Directory dans le premier tutoriel de cette série. Utilisez un mot de passe sécurisé et stockez-le dans un endroit sûr pour une utilisation ultérieure.
Vous pouvez ignorer le message d'erreur suivant :
WARNING: The changes will take effect after you restart the computer webserver1.
Redémarrez la VM :
Restart-Computer
Cette action ferme la session RDP que vous avez ouverte.
Créer la deuxième instance de serveur et la configurer
Vous devez maintenant répéter les procédures précédentes pour créer une deuxième instance de serveur.
Répétez la procédure de création du serveur en utilisant les valeurs suivantes :
- Deployment name (Nom du déploiement) :
webserver2
- Zone : zone_2
- Machine type (Type de machine) : 2 vCPU (2 processeurs virtuels)
- Windows Server OS Version (Version de l'OS Windows Server) : 2016
- Boot type (Type de démarrage) : SSD persistent disk (Disque persistant SSD)
- Disk size (Taille du disque) : 200 Go
- Nom du réseau : vpc_name
- Subnetwork name (Nom du sous-réseau) :
public-webapp-zone
- Firewall (Pare-feu) : Allow WebDeploy traffic (Autoriser le trafic WebDeploy), Allow HTTP traffic (Autoriser le trafic HTTP)
Remplacez zone_2 et vpc_name par les valeurs que vous avez utilisées lors de l'initialisation des variables.
- Deployment name (Nom du déploiement) :
Créez un mot de passe pour l'instance Windows
webserver2
:gcloud compute reset-windows-password webserver2 \ --zone $zone_2\ --project $project_id \ --quiet
Cette étape définit le mot de passe de votre compte utilisateur pour la connexion avec le protocole RDP. Le nom d'utilisateur est le nom de votre compte Google (c'est-à-dire le nom d'utilisateur renvoyé par la commande
gcloud config get-value core/account
). Notez le nom d'utilisateur et le mot de passe afin de les utiliser ultérieurement dans ce tutoriel.Connectez-vous à l'instance à l'aide du protocole RDP. Utilisez les identifiants que vous avez créés à l'étape précédente.
Connectez-vous à l'instance
webserver2
. Suivez la procédure que vous avez utilisée pour la première instance, mais utilisez le mot de passe que vous avez créé pour la deuxième instance de serveur.Configurez l'instance
webserver2
. Suivez la procédure que vous avez utilisée pour configurer la première instance. Créez le même compte de service avec le même mot de passe.
Cloner l'application Web
La tâche suivante consiste à configurer chaque serveur IIS et à y déployer un exemple d'application ASP.NET. L'application Web dispose d'identifiants pour se connecter automatiquement à l'instance SQL Server que vous avez configurée dans le tutoriel précédent.
Assurez-vous d'être connecté au poste de travail Windows sur lequel Visual Studio et Git sont installés.
Dans une fenêtre de commande du poste de travail Windows, clonez l'exemple de dépôt de code source sur le poste de travail :
cd c:\ git clone https://github.com/GoogleCloudPlatform/getting-started-dotnet.git cd getting-started-dotnet git checkout ad49d787eec88fb30a4b45b4146f5cb63c0519e
Accédez au dossier suivant :
C:\getting-started-dotnet\aspnet\2-structured-data
Pour ouvrir l'exemple de solution d'application dans Visual Studio, double-cliquez sur le fichier
2-structured-data.sln
.Dans le volet Explorateur de solutions, double-cliquez sur le fichier
Web.config
pour l'ouvrir.Définissez la clé
GoogleCloudSamples:ProjectId
sur l'ID du projet.Pour l'ID de projet
webapp-sql-ad
, la ligne est semblable à celle-ci :<add key="GoogleCloudSamples:ProjectId" value="webapp-sql-ad" />
Définissez la valeur
GoogleCloudSamples:BookStore
sursqlserver
:<add key="GoogleCloudSamples:BookStore" value="sqlserver" />
Vers la fin du fichier, sous
<connectionStrings>
, recherchez le sous-élément XMLconnectionStrings
contenant l'attributname="LocalSqlServer"
. Ensuite, procédez comme suit :- Modifiez la valeur
connectionString
en ajoutant le nom de l'écouteur du groupe de disponibilité SQL Server (sql-listener
). (Vous configurez cet écouteur dans la partie Déployer plusieurs sous-réseaux SQL Server de cette série de tutoriels.) - Remplacez
Initial Catalog
parbookshelf
. - Définissez
Integrated Security
surTrue
. - Utilisez le nom d'utilisateur et le mot de passe de connexion que vous avez créés pour le compte de service de base de données lors de la configuration de la base de données.
- Modifiez la valeur
Enregistrez et fermez le fichier
Web.config
.Pour générer la solution, dans le menu de Visual Studio, cliquez sur Build > Build Solution (Générer > Générer la solution).
Déployer l'application ASP.NET
Dans cette section, vous allez déployer l'application Web sur les deux serveurs Web.
Sur le poste de travail, rouvrez le fichier
2-structured-data.sln
si vous l'avez fermé. Recherchez le fichier dans le dossier suivant, puis double-cliquez dessus :C:\getting-started-dotnet\aspnet\2-structured-data
Dans Visual Studio, cliquez sur Tools > Google Cloud Tools > Google Cloud Explorer (Outils > Outils Google Cloud > Google Cloud Explorer).
Sélectionnez le projet sur lequel vous travaillez, puis développez Google Compute Engine.
Effectuez un clic droit sur l'instance
webserver1
.Sélectionnez Manage Windows credentials (Gérer les identifiants Windows).
Cliquez sur Add credentials (Ajouter des identifiants).
Saisissez le nom d'utilisateur
webapp.service
.Sélectionnez I have password for this user (J'ai le mot de passe de cet utilisateur), puis saisissez le mot de passe que vous avez créé lors du lancement des serveurs Web.
Vérifiez que l'option Create a password for me (Créer un mot de passe pour moi) n'est pas sélectionnée, puis cliquez sur Save (Enregistrer).
Pour fermer la fenêtre des identifiants Windows, cliquez sur Close (Fermer).
Fermez Google Cloud Explorer.
Dans Visual Studio, cliquez sur Tools > Google Cloud Tools > Publish 2-structured-data to Google Cloud (Outils > Outils Google Cloud > Publier 2-structured-data sur Google Cloud).
Dans la boîte de dialogue Publish (Publier), sélectionnez Compute Engine.
Sélectionnez la VM
webserver1
, puis définissez Credentials (Identifiants) surwebapp.service
.Pour créer et déployer l'exemple d'application, cliquez sur Publish (Publier).
Une fois l'exemple d'application publié, Visual Studio ouvre l'application dans votre navigateur Web par défaut.
Répétez cette procédure pour
webserver2
.
Configurer l'équilibrage de charge
Vous pouvez maintenant configurer l'équilibrage de charge réseau pour les serveurs Web. Dans le cadre de cette procédure, vous allez ajouter la vérification de l'état à l'équilibreur de charge. L'équilibreur de charge global répartit automatiquement les requêtes entre les serveurs IIS. En outre, si l'un des serveurs IIS échoue aux vérifications d'état et est hors connexion, l'équilibreur de charge dirige automatiquement le trafic vers l'autre serveur.
Dans Cloud Shell, créez une adresse IP externe statique pour l'équilibreur de charge :
gcloud compute addresses create webapp-lb-ip \ --region $region \ --project $project_id
Les instances de VM reçoivent des paquets destinés à cette adresse IP.
Ajoutez un objet de vérification d'état HTTP :
gcloud compute http-health-checks create bookshelf-check \ --project $project_id \ --request-path /Books
Cet exemple utilise les paramètres par défaut du mécanisme de vérification d'état. Vous pouvez personnaliser ces paramètres. Vous devez spécifier le chemin de requête
/Books
, car il s'agit du chemin utilisé par l'exemple d'application Web.Ajoutez un pool cible situé dans la même région que vos instances de VM. Les pools cibles nécessitent un service de vérification d'état pour fonctionner. Utilisez l'objet de vérification d'état que vous avez créé à l'étape 2 pour ce pool cible.
gcloud compute target-pools create books-lb \ --region $region \ --http-health-check bookshelf-check \ --project $project_id
Ajoutez les instances de serveur IIS au pool cible :
gcloud compute target-pools add-instances books-lb \ --instances webserver1 \ --instances-zone $zone_1 \ --project $project_id gcloud compute target-pools add-instances books-lb \ --instances webserver2 \ --instances-zone $zone_2 \ --project $project_id
Les instances d'un pool cible doivent se trouver dans la même région. Cependant, les instances peuvent se trouver dans différentes zones de la même région.
Ajoutez une règle de transfert au nom d'une adresse IP externe et d'une plage de ports qui pointe vers votre pool cible :
gcloud compute forwarding-rules create www-rule \ --region $region \ --ports 80 \ --address webapp-lb-ip \ --target-pool books-lb \ --project $project_id
Envoyer du trafic aux instances
Une fois le service d'équilibrage de charge configuré, vous pouvez commencer à envoyer du trafic à l'équilibreur de charge.
- Attendez au moins une minute après avoir configuré l'équilibrage de charge pour permettre le chargement complet de la configuration.
Dans Cloud Shell, vérifiez l'état des instances dans l'équilibreur de charge :
gcloud compute target-pools get-health books-lb \ --region $region \ --project $project_id
Le résultat ressemble à ce qui suit :
--- healthStatus: - healthState: HEALTHY instance: https://www.googleapis.com/compute/v1/projects/sales-enablement-support/zones/us-east1-c/instances/webserver1 ipAddress: 35.190.170.76 kind: compute#targetPoolInstanceHealth --- healthStatus: - healthState: HEALTHY instance: https://www.googleapis.com/compute/v1/projects/sales-enablement-support/zones/us-east1-b/instances/webserver2 ipAddress: 35.190.170.76
Copiez la valeur
ipAddress
, qui correspond à l'adresse IP de l'équilibreur de charge.Dans une fenêtre de navigateur, saisissez l'adresse IP de l'équilibreur de charge.
Si tout fonctionne, la page par défaut de l'application Web ASP.NET que vous avez déployée s'affiche :
Tester l'équilibrage de charge et la redondance
Vous pouvez maintenant vérifier le comportement du cluster lorsque les composants sont déconnectés. Vous pouvez tester l'équilibrage de charge et la redondance à plusieurs niveaux en arrêtant de manière sélective une instance d'Active Directory, SQL Server et les serveurs IIS.
Dans la console Google Cloud, accédez à la page "Instances de VM" :
Sélectionnez une instance pour Active Directory, SQL Server ou IIS. Vous pouvez choisir n'importe laquelle de ces instances pour simuler la mise hors connexion d'un composant.
Cliquez sur Arrêter.
Dans une fenêtre de navigateur, saisissez à nouveau l'adresse IP de l'équilibreur de charge.
La page par défaut de l'application Bookshelf s'affiche. Cela indique que l'application est toujours en cours d'exécution, même si les composants de l'infrastructure ne sont plus disponibles.
Si vous le souhaitez, répétez les étapes 2 et 3 pour d'autres composants. Par exemple, si vous avez précédemment arrêté l'instance SQL Server, arrêtez cette fois une instance IIS.
Tant qu'une instance de chaque composant est en cours d'exécution, l'application continue de fonctionner.
Nettoyer
Une fois le tutoriel terminé, vous pouvez nettoyer les ressources Google Cloud que vous avez créées pour vous assurer qu'elles ne vous seront plus facturées à l'avenir. Vous pouvez supprimer l'ensemble du projet ou supprimer les ressources. Dans les sections suivantes, nous allons voir comment supprimer ces ressources.
Supprimer le projet
Supprimer les ressources du projet
Au début du tutoriel, vous avez défini des variables qui contrôlent l'emplacement des éléments de l'infrastructure. Dans cette section, vous allez utiliser ces variables pour le nettoyage. Assurez-vous que les variables suivantes sont définies :
region=us-east1 zone_1=${region}-b zone_2=${region}-c vpc_name=webappnet project_id=your-project-id
Remplacez your-project-id par l'ID du projet Google Cloud que vous utilisez.
Supprimez les VM que vous avez créées dans ce tutoriel :
gcloud compute instances delete ad-dc1 \ --zone $zone_1 \ --project $project_id \ --quiet gcloud compute instances delete ad-dc2 \ --zone $zone_2 \ --project $project_id \ --quiet gcloud compute instances delete cluster-sql1 \ --zone $zone_1 \ --project $project_id \ --quiet gcloud compute instances delete cluster-sql2 \ --zone $zone_2 \ --project $project_id \ --quiet gcloud compute instances delete webserver1 \ --zone $zone_1 \ --project $project_id \ --quiet gcloud compute instances delete webserver2 \ --zone $zone_2 \ --project $project_id \ --quiet
Supprimez les routes et les règles de pare-feu que vous avez créées dans ce tutoriel :
gcloud compute firewall-rules delete \ allow-internal-ports-private-ad \ allow-internal-ports-private-sql \ allow-internal-ports-public-webapp \ allow-rdp \ --project $project_id \ --quiet gcloud compute firewall-rules delete \ webserver1-tcp-80 \ webserver1-tcp-8172 \ webserver2-tcp-80 \ webserver2-tcp-8172 \ --project $project_id \ --quiet gcloud compute routes delete \ cluster-sql1-route \ cluster-sql1-route-listener \ cluster-sql2-route \ cluster-sql2-route-listener \ --project $project_id \ --quiet
Supprimez les sous-réseaux du réseau VPC :
gcloud compute networks subnets delete \ --region $region \ private-ad-zone-a \ private-ad-zone-b \ private-sql-zone-a \ private-sql-zone-b \ public-webapp-zone \ --project $project_id \ --quiet
Supprimez le réseau VPC :
gcloud compute networks delete $vpc_name \ --project $project_id \ --quiet
Supprimez l'adresse IP statique de l'équilibreur de charge que vous avez créée :
gcloud compute addresses delete webapp-lb-ip \ --region $region \ --project $project_id \ --quiet
Supprimez l'infrastructure de l'équilibreur de charge :
gcloud compute forwarding-rules delete www-rule \ --region $region \ --project $project_id \ --quiet gcloud compute target-pools delete books-lb \ --region $region \ --project $project_id \ --quiet gcloud compute http-health-checks delete bookshelf-check \ --project $project_id \ --quiet
Étapes suivantes
- Consultez les bonnes pratiques relatives à la conception de charges de travail évolutives et à disponibilité élevée.
- Découvrez des architectures de référence, des schémas et des bonnes pratiques concernant Google Cloud. Consultez notre Centre d'architecture cloud.