Je vous propose aujourd’hui de découvrir et de mettre en place un Load Balancer dans Azure. Et pour que les explications soient plus concrètes, nous allons mettre en place le scénario que j’ai schématisé ci-dessous :
Le principe est simple, nous disposons de 2 serveurs web fonctionnant sous Ubuntu (nous aurions pu faire la même chose avec Windows Server & IIS). Sur ces 2 serveurs, nous installerons bien entendu Apache 2 comme outil pour afficher des pages web.
Etape 0 – Présentation du scénario
Si vous regardez le schéma de plus prés, vous noterez que nous allons besoin des composants suivants:
- 1 Resource Group – AZRSG01, qui contiendra l’ensemble des ressources Azure que nous allons créé pour notre scénario,
- 1 IP publique – AZPIP01, pour nous permettre d’accéder à nos serveurs web depuis l’extérieur,
- 1 Load Balancer – AZELB01 pour répartir la charge sur nos 2 serveurs web (j’y reviendrai plus bas dans l’article),
- 1 Availability Set, AZAVS01,
- Nos 2 machines virtuelles: AZWEB01 et AZWEB02.
- Sans oublier bien entendu les composantes réseaux à savoir un VNet AZVNT01 et son default subnet AZSNT01 associé (tout deux en 10.0.0.0/24),
- Ainsi qu’un Network Security Group AZNSG01 avec pour règles autorisées: TCP/80 et TCP/22 en Inbound.
Etape 1 – Création des briques Azure de base
Nous commençons donc pas créer notre resource group. Dans mon cas, notez que je vais tout créer sur la localisation West Europe mais libre à vous de choisir autre chose ou de nommer différemment les composants.
Pour la souscription, je vous laisse choisir ce qui vous correspond le mieux et n’oubliez pas que si vous n’avez pas encore créé votre compte de tests Azure vous pouvez bénéficier d’un crédit de test de 170 euros ! 🙂
Une fois notre Resource Group créé, nous allons maintenant créé notre IP publique – AZPIP01.
Ensuite, nous créons notre Load Balancer. Choisissez un nom, un type de Load Balancer AZELB01 pour External Load Balancer. Dans le choix de la Public IP address, choisissez l’adresse IP que nous avons précédemment créée AZPIP01.
Comme pour les autres composants, ajoutez ce composant dans votre resource group AZRSG01. Je reviendrai sur la configuration détaillée du Load Balancer dans l’étape 2 de l’article.
Etape 2 – Création de notre première machine virtuelle et du réseau
Il ne nous manque plus qu’a créé notre première machine virtuelle Ubuntu. Pour ma part, j’ai choisi une version LTS de Ubuntu 16.04 mais là encore, adaptez en fonction de ce que vous souhaitez.
Choisissez le nom et la taille de votre machine virtuelle ainsi qu’un login et un mot de passe. Notez que j’ai choisi SSD mais vous pouvez rester sur du HDD (pour limiter les coûts du test).
Concernant la configuration, j’ai opté pour un DS1_v2 ce qui est largement suffisant pour notre test.
Il nous reste maintenant à choisir la configuration de votre machine virtuelle.
J’ai choisi les options suivantes :
- Storage:
- Usage Managed Disks: Yes (comme cela nous n’avons pas à gérer les storage accounts)
- Virtual Network:
- Création d’un nouveau réseau privé avec la configuration suivante :
- Name : AZVNT01
- Address space : 10.0.0.0/24
- Subnet Name : AZSNT01
- Subnet address range : 10.0.0.0/24
- Pas d’adresse IP publiquée associée (nous utiliserons celle associée à notre Load Balancer).
- Création d’un nouveau réseau privé avec la configuration suivante :
Pensez également à configurer un NSG (Network Security Group) c’est ce qui va nous permettre d’autoriser les flux vers nos machines virtuelles. Et nous pourrons utiliser le même NSG pour nos 2 VM: AZNSG01 avec comme règles inbound TCP/80 et TCP/22 pour autoriser le web et le SSH.
Et enfin on termine avec la création d’un Availability Set AZAVS01.
Cette dernière étape n’est pas forcément nécessaire mais c’est pour faire les choses bien dans les cas de répartition charge ou de haute disponibilité. C’est ce qui permet à Azure de ne pas créer nos 2 machines virtuelles sur le même serveur physiques ou dans la même baie etc. En effet, en cas d’incident, vous ne voudriez pas que vos 2 VM soient connectées sur la même prise de courant et sur le même serveur physique… Nous positionnerons donc également notre second machine virtuelle avec cet Availability Set.
Et enfin, vous pouvez laisser dernières options désactivées.
- Monitoring :
- Boot diagnostics : Disabled
- Guest OS diagnostics : Disabled.
Faîtes OK 2 fois de suite et finalement votre première machine virtuelle va se générer.
Etape 3 – Création de notre seconde machine virtuelle
Il nous reste maintenant à créer une second machine virtuelle sur la même base.
Je choisi donc:
- Name : AZWEB02,
- Même login, password,
- Même taille DS1_v2,
- Je rattache la VM au même réseau (AZVNT01), le même subnet (AZSNT01), pas d’IP publique associée,
- Je choisi le même NSG (AZNSG01) ainsi que l’Availability Set que nous avons créé précédemment (AZAVS01).
Etape 4 – Configuration de notre Load Balancer
Si vous avez globalement suivi l’article, vous devriez avoir l’IP interne 10.0.0.4 pour votre première machine virtuelle AZWEB01 et 10.0.0.5 pour la seconde AZWEB02 – ainsi que tous les composants visibles sur la capture ci-dessous.
Nous allons passer à la configuration de notre Load Balancer. Notez que pour l’instant, je n’ai pas installé Apache 2 sur nos 2 serveurs Ubuntu et que je n’ai pas non plus créer une page web par défaut. Nous le ferons dans l’étape suivante.
Une fois dans votre Load Balancer Azure, vous disposez de plusieurs options que nous allons pouvoir passer en revue :
- Frontend IP pool : il s’agit de l’adresse IP publique que vous associez à votre load balancer. Dans notre cas, c’est donc l’adresse IP que les utilisateurs utiliseront pour accéder à l’un de nos 2 serveurs web. Nous avons déjà procédé à la configuration, vous devriez donc voir que l’adresse IP AZPIP01 est déjà associée. Rien de plus à faire. Notez au passage que depuis peu, vous pouvez associer plusieurs IP publiques à un même Load Balancer (avant il fallait ajouter les autres en PowerShell).
- Backend pools : cette section correspond aux différentes machines virtuelles vers lesquelles notre Load Balancer va renvoyer les utilisateurs. Cette partie n’est pas encore configurée, nous allons donc faire Add. Vous aurez alors le choix d’y associer soit des machines virtuelles soit plus simplement un Availability Set que vous avez déjà préparé (ce qui est notre cas). Je choisi donc notre Availability Set AZAVS01 et nous pourrons alors choisir dans les menus déroulants nos 2 machines virtuelles ainsi que leur adresse IP.
- Health probes : c’est cette option qui va nous permettre d’indiquer au Load Balancer quel port ou quel processus il doit surveiller pour déterminer si oui ou non l’une de nos machine virtuelle est disponible (ou ne l’est pas). Pour info, il n’est pas obligatoire d’utiliser spécifiquement le même protocole ou port pour lequel vous allez utiliser le Load Balancer. A vous d’adapter les réglages en fonction de la tolérance de panne que le Load Balancer devra avoir vis-à-vis de vos machines.
- Load balancing rules : il nous reste alors plus qu’à définir notre règle de Load Balancing. Dans notre cas, nous souhaitons pouvoir répartir la charge de 2 serveurs web Apache qui affiche une simple page HTML. Nous définissons donc une règle qui utilise notre Frontend IP, le port 80 (nous pourrions à ce moment également mettre en place du NATing) et nous y associons nos 2 machines virtuelles (backend pool) ainsi que notre indicateur de contrôle (health probe).
- Inbound NAT rules : pour finir, il ne nous reste plus qu’à nous donner accès aux 2 machines virtuelles afin de pouvoir nous y connecter en SSH et créer notre serveur Apache ainsi que notre page web de test. Notez que nous devons créer 2 règles différentes pour pouvoir accéder à nos 2 machines virtuelles. J’ai choisi donc d’accéder en SSH à la VM AZWEB01 sur le port 2222 et à AZWEB02 sur le port 2223 (chaque port est redirigé sur le port 22 de la VM concernée).
La configuration est terminée. Il ne nous reste plus qu’à tester. 🙂
Etape 5 – Test
Nous vérifions donc sur notre objet Public IP (AZPIP01) quelle est l’adresse IP associée puis nous tentons de nous connecter en SSH à la première machine virtuelle (AZWEB01) en précisant bien le port 222.
Cela fonctionne parfaitement ! 🙂 – Même test en modifiant bien le port 2223 pour accéder à AZWEB02. C’est bon également.
Il ne nous reste plus qu’à installer Apache sur les 2 VM concernée avec la commande suivante :
sudo apt-get install apache2
Puis à modifier le index.html à la racine dans le répertoire /var/www/html afin de bien pouvoir voir le changement lorsque la charge sera répartie.
Pour AZWEB01, j’affiche le message Bienvenue sur AZWEB01 et pour AZWEB02, j’affiche le message Bienvenue sur AZWEB02. Il ne reste plus qu’à tester avec notre navigateur préféré…
On accède bien à la page… et pour vérifier le load balancing, il vous suffit de stopper le service apache ou d’éteindre une des machines ou encore de vous acharner sur la touche F5 jusqu’à ce que vous génériez suffisamment de charge pour être dirigé sur le 2nd serveur… 😉
Bref, comme vous le voyez c’est assez simple à mettre en œuvre et ça peut vraiment vous permettre de faire pas mal de chose dès lors que vous avez besoin de haute dispo, de répartition de charge ou autre.
Si vous avez des questions, n’hésitez pas 🙂 !