Déployer des serveurs Web IIS à équilibrage de charge


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 :

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 :

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 :

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.

  1. Ouvrez Cloud Shell.

    Ouvrir Cloud Shell

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

  1. 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
    
  2. 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

  1. Accédez à Google Cloud Marketplace.

    Accéder à Google Cloud Marketplace

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

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

  4. Cliquez sur Déployer et attendez que la console Google Cloud indique que le déploiement est terminé.

Se connecter à l'instance de serveur

  1. 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
    
  2. 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

  1. Dans l'instance webserver1, ouvrez le terminal PowerShell en tant qu'administrateur.

  2. 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"
    
  3. 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.

  4. Activez le compte et ajoutez-le au groupe local "Administrateurs" :

    net user webapp.service /active:yes
    net localgroup administrators webapp.service /add
    
  5. Configurez les serveurs DNS :

    netsh interface ip set dns Ethernet static $DNS1
    netsh interface ip add dns Ethernet $DNS2 index=2
    
  6. 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.
    
  7. 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.

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

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

  3. Connectez-vous à l'instance à l'aide du protocole RDP. Utilisez les identifiants que vous avez créés à l'étape précédente.

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

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

  1. Assurez-vous d'être connecté au poste de travail Windows sur lequel Visual Studio et Git sont installés.

  2. 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
    
  3. Accédez au dossier suivant :

    C:\getting-started-dotnet\aspnet\2-structured-data
    
  4. Pour ouvrir l'exemple de solution d'application dans Visual Studio, double-cliquez sur le fichier 2-structured-data.sln.

  5. Dans le volet Explorateur de solutions, double-cliquez sur le fichier Web.config pour l'ouvrir.

  6. 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" />
    
  7. Définissez la valeur GoogleCloudSamples:BookStore sur sqlserver :

    <add key="GoogleCloudSamples:BookStore" value="sqlserver" />
    
  8. Vers la fin du fichier, sous <connectionStrings>, recherchez le sous-élément XML connectionStrings contenant l'attribut name="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 par bookshelf.
    • Définissez Integrated Security sur True.
    • 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.
  9. Enregistrez et fermez le fichier Web.config.

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

  1. 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
    
  2. Dans Visual Studio, cliquez sur Tools > Google Cloud Tools > Google Cloud Explorer (Outils > Outils Google Cloud > Google Cloud Explorer).

  3. Sélectionnez le projet sur lequel vous travaillez, puis développez Google Compute Engine.

  4. Effectuez un clic droit sur l'instance webserver1.

  5. Sélectionnez Manage Windows credentials (Gérer les identifiants Windows).

  6. Cliquez sur Add credentials (Ajouter des identifiants).

  7. Saisissez le nom d'utilisateur webapp.service.

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

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

  10. Pour fermer la fenêtre des identifiants Windows, cliquez sur Close (Fermer).

  11. Fermez Google Cloud Explorer.

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

  13. Dans la boîte de dialogue Publish (Publier), sélectionnez Compute Engine.

  14. Sélectionnez la VM webserver1, puis définissez Credentials (Identifiants) sur webapp.service.

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

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

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

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

  3. 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
    
  4. 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.

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

  1. Attendez au moins une minute après avoir configuré l'équilibrage de charge pour permettre le chargement complet de la configuration.
  2. 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
    
  3. Copiez la valeur ipAddress, qui correspond à l'adresse IP de l'équilibreur de charge.

  4. 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 :

    Page Web par défaut de l'application Bookshelf

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.

  1. Dans la console Google Cloud, accédez à la page "Instances de VM" :

    Accéder à la page "Instances de VM"

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

    Liste des images créées pour cette architecture

  3. Cliquez sur Arrêter.

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

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

  • Dans la console Google Cloud, accédez à la page Gérer les ressources.

    Accéder à la page Gérer les ressources

  • Dans la liste des projets, sélectionnez le projet que vous souhaitez supprimer, puis cliquez sur Supprimer.
  • Dans la boîte de dialogue, saisissez l'ID du projet, puis cliquez sur Arrêter pour 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.

    1. 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
      
    2. 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
      
    3. 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
      
    4. Supprimez le réseau VPC :

      gcloud compute networks delete $vpc_name \
          --project $project_id \
          --quiet
      
    5. 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
      
    6. 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