introduction
Les équilibreurs de charge DigitalOcean constituent un moyen simple de répartir le trafic HTTP, HTTPS et TCP entre plusieurs serveurs principaux. Dans ce didacticiel, nous utiliseronsdoctl
- le client de ligne de commande officiel de l'API de DigitalOcean - pour créer et configurer un équilibreur de charge pour plusieurs serveurs Web principaux.
Conditions préalables
Avant de commencer ce didacticiel, vous devez vous familiariser avecdoctl
et les équilibreurs de charge DigitalOcean. Les articles suivants seront utiles:
Vous devez vous assurer que la version 1.6.0 ou supérieure dedoctl
est installée et authentifiée avant de continuer. Vérifiez la version de votredoctl
en exécutantdoctl version
. Vous devrez également ajouter une clé SSH à votre compte DigitalOcean.
[[step-1 -—- setting-up-the-backend-web-servers]] == Étape 1 - Configuration des serveurs Web principaux
Tout d'abord, nous utiliseronsdoctl
pour créer les deux serveurs Web vers lesquels notre Load Balancer dirigera le trafic. Nous allons commencer par deux serveurs sur lesquels la pile LAMP (Linux, Apache, MySQL, PHP) est préinstallée et les mettre à jour pour chaque page Web unique. Cela nous aidera à vérifier que l’équilibreur de charge distribue bien les connexions entre plusieurs serveurs.
Afin de créer les deux serveurs, nous devons d’abord connaître la région dans laquelle nous voulons qu’ils se trouvent, ainsi que l’empreinte de la clé SSH que nous souhaitons utiliser. Nous utiliserons la régionnyc1 pour ce tutoriel. Vous pouvez lister toutes les régions et leurs slugs raccourcis avecdoctl
:
doctl compute region list
OutputSlug Name Available
nyc1 New York 1 true
sfo1 San Francisco 1 true
nyc2 New York 2 true
ams2 Amsterdam 2 true
sgp1 Singapore 1 true
lon1 London 1 true
nyc3 New York 3 true
ams3 Amsterdam 3 true
fra1 Frankfurt 1 true
tor1 Toronto 1 true
sfo2 San Francisco 2 true
blr1 Bangalore 1 true
Choisissez la limace pour la région de votre choix.
[.note] #Note: Votre équilibreur de charge et ses gouttelettes cibles doivent tous se trouver dans la même région.
#
Pour trouver votre empreinte digitale de clé SSH, utilisez à nouveaudoctl
:
doctl compute ssh-key list
OutputID Name FingerPrint
7738555 sammy@host your_ssh_key_fingerprint
Dans la sortie, notez l’empreinte de la clé SSH que vous utiliserez. Nous en aurons besoin pour la prochaine commande.
Nous allons utiliser une image de pile LAMP en un clic sous Ubuntu 16.04, et nous placerons cette information sur un droplet de 512 Mo. Les différentes options disponibles pour les images et les tailles de gouttelettes peuvent également être répertoriées avecdoctl
, à l'aide de la commandelist
. Vous pouvez en savoir plus à ce sujet dans lesCreating, Deleting, and Inspecting Droplets section de l'article prérequis.
Maintenant que nous avons toutes nos informations, nous pouvons créer les deux serveurs en une seule commande:
doctl compute droplet create web-1 web-2 \
--region nyc1 \
--image lamp-16-04 \
--ssh-keys your_ssh_key_fingerprint \
--enable-private-networking \
--size 512mb
web-1
etweb-2
seront les noms des serveurs. Nous avons également sélectionné--enable-private-networking
. Cela garantira que le trafic de l'équilibreur de charge vers les droplets cibles restera sur le réseau privé non mesuré de DigitalOcean.
La commandecreate
affichera des informations sur les nouvelles gouttelettes:
OutputID Name Public IPv4 Private IPv4 Public IPv6 Memory VCPUs Disk Region Image Status Tags
48463543 web-1 512 1 20 nyc1 Ubuntu LAMP on 16.04 new
48463544 web-2 512 1 20 nyc1 Ubuntu LAMP on 16.04 new
Nos deux serveurs sont maintenant approvisionnés. Attendez quelques minutes que le processus se termine, puis répertoriez vos gouttelettes Web:
doctl compute droplet list web-*
La commandelist
accepte le caractère générique*
. Dans ce cas, nous afficherons uniquement les gouttelettes avec au moinsweb-
dans leur nom:
OutputID Name Public IPv4 Private IPv4 Public IPv6 Memory VCPUs Disk Region Image Status Tags
48603683 web-1 111.111.111.111 111.111.111.333 512 1 20 nyc1 Ubuntu LAMP on 16.04 active
48603684 web-2 111.111.111.222 111.111.111.444 512 1 20 nyc1 Ubuntu LAMP on 16.04 active
Notez que les gouttelettes ont maintenant des adresses IPv4 attribuées et sont répertoriées commeactive
. Si vous naviguez jusqu’à l’une des adresses publiques des gouttelettes dans votre navigateur Web, une page d’emplacement réservé Apache par défaut sera chargée. Ajoutons une nouvelle page unique à chacun, afin que nous puissions distinguerweb-1 deweb-2.
Nous pouvons SSH sur notre serveur viadoctl
:
doctl compute ssh web-1
Cela vous connectera et vous connectera en tant queroot en utilisant la clé SSH que vous avez spécifiée lors de la création. Ouvrez un nouveau fichier HTML sur le serveur. Nous utiliserons l'éditeur de texte denano
:
nano /var/www/html/test.html
Collez le fragment HTML suivant:
/var/www/html/test.html
Hello from web-1!
Enregistrez le fichier et quittez l'éditeur de texte. Ce n’est pas un fichier HTML complet, mais les navigateurs pardonnent et c’est suffisant pour nos besoins.
Accédez à l'adresse suivante pour vous assurer que la nouvelle page est correctement servie. Assurez-vous de substituer l'adresse IP correcte à la partie mise en évidence:
http://web-1_public_ip_address/test.html
Sur la page, vous devriez voir le titreHello from web-1! que nous venons de créer.
Quittez la session SSH:
exit
Maintenant, lancez SSH sur le second serveur et répétez le processus en utilisant un message différent dans la page HTML:
doctl compute ssh web-2
Ouvrez le nouveau fichier HTML:
nano /var/www/html/test.html
Coller dans le contenu:
/var/www/html/test.html
Hello from web-2!
Enregistrez et quittez l'éditeur de texte, puis quittez la session SSH:
exit
Utilisez votre navigateur pour vérifier queweb-2 sert également correctement la nouvelle page Web. Si tel est le cas, nous sommes prêts à créer un équilibreur de charge pour répartir la charge entre nos deux serveurs.
[[step-2 -—- creating-a-load-balancer]] == Étape 2 - Création d'un Load Balancer
Nous allons créer notre nouvel équilibreur de charge dans la régionnyc1. Notez à nouveau que l'équilibreur de charge et ses gouttelettes cibles doivent se trouver dans la même région. Veillez donc à utiliser la région dans laquelle se trouvent vos gouttelettes:
doctl compute load-balancer create \
--name load-balancer-1 \
--region nyc1 \
--forwarding-rules entry_protocol:http,entry_port:80,target_protocol:http,target_port:80
Cette commande crée un équilibreur de charge avec le nomload-balancer-1
dans la régionnyc1
. Chaque Load Balancer a besoin d'au moins une règle sous l'indicateur--forwarding-rules
. Ces règles décrivent comment l’équilibreur de charge acceptera le trafic et comment il le transmettra aux cibles. La règle de transfert ci-dessus indique que nous transférons le trafic HTTP sur le port 80 directement aux serveurs cibles.
Les autres options de protocole--forwarding-rules
sonthttps
ettcp
, et vous pouvez choisir n'importe quel port valide pour l'entrée et la cible. Si vous devez spécifier plusieurs règles de transfert, entourez la liste complète des règles entre guillemets et utilisez un espace entre chaque règle. Voici un exemple permettant d’activer le transfert HTTP et HTTPS:
--forwarding-rules "entry_protocol:http,entry_port:80,target_protocol:http,target_port:80 entry_protocol:https,entry_port:443,target_protocol:https,target_port:443"
La commandecreate
que nous venons d'exécuter affichera des informations sur notre nouvel équilibreur de charge:
OutputID IP Name Status Created At Algorithm Region Tag Droplet IDs SSL Sticky Sessions Health Check Forwarding Rules
ae3fa042-bfd2-5e94-b564-c352fc6874ef load-balancer-1 new 2017-05-10T19:28:30Z round_robin nyc1 false type:none,cookie_name:,cookie_ttl_seconds:0 protocol:http,port:80,path:/,check_interval_seconds:10,response_timeout_seconds:5,healthy_threshold:5,unhealthy_threshold:3 entry_protocol:http,entry_port:80,target_protocol:http,target_port:80,certificate_id:,tls_passthrough:false
Prenez note de l’ID de l’équilibreur de charge, mis en évidence ci-dessus, que nous utiliserons à l’étape suivante pour ajouter nos gouttelettes cibles. Vous trouverez également des informations sur certaines configurations par défaut que nous n’avons pas définies, telles que les règles de vérification de l’état d’intégrité et les sessions persistantes. Vous pouvez trouver plus d'informations sur ces options dans lesprerequisite load balancer article. Pour savoir comment définir ces options à l'aide dedoctl
, vous pouvez toujours exécuter la commandecreate
avec un indicateur--help
. Pour la création de Load Balancer, cela ressemblerait à ceci:
doctl compute load-balancer create --help
Cela produira une liste de tous les drapeaux et options de ligne de commande disponibles. Vous pouvez utiliser cet indicateur--help
sur n'importe quelle commandedoctl
.
Maintenant que notre équilibreur de charge est créé, nous devons y ajouter les gouttelettes cibles. Nous ferons cela dans la section suivante.
[[step-3 -–- ajoutant-droplets-to-the-load-balancer]] == Étape 3 - Ajout de droplets à Load Balancer
Répertorions à nouveau les informations concernant nos deux gouttelettes afin d’obtenir leurs identifiants:
doctl compute droplet list web-*
OutputID Name Public IPv4 Private IPv4 Public IPv6 Memory VCPUs Disk Region Image Status Tags
48603683 web-1 111.111.111.111 111.111.111.333 512 1 20 nyc1 Ubuntu LAMP on 16.04 active
48603684 web-2 111.111.111.222 111.111.111.444 512 1 20 nyc1 Ubuntu LAMP on 16.04 active
Les ID sont mis en évidence dans l'exemple de sortie ci-dessus. Be sure to use your actual IDs, not the examples.
Nous utilisons maintenant la commandeadd-droplets
pour ajouter les Droplets cibles à notre Load Balancer. Spécifiez l'ID de l'équilibreur de charge créé à l'étape précédente:
doctl compute load-balancer add-droplets
ae3fa042-bfd1-4e94-b564-c352fc6874ef \
--droplet-ids 48463543,48463544
Nous pouvons maintenant utiliser la commandeget
pour récupérer les informations mises à jour pour notre équilibreur de charge:
doctl compute load-balancer get ae3fa042-bfd1-4e94-b564-c352fc6874ef
OutputID IP Name Status Created At Algorithm Region Tag Droplet IDs SSL Sticky Sessions Health Check Forwarding Rules
ae3fa042-bfd1-4e94-b564-c352fc6874ef 111.111.111.555 load-balancer-1 active 2017-05-10T19:28:30Z round_robin nyc1 48603683,48603684 false type:none,cookie_name:,cookie_ttl_seconds:0 protocol:http,port:80,path:/,check_interval_seconds:10,response_timeout_seconds:5,healthy_threshold:5,unhealthy_threshold:3 entry_protocol:http,entry_port:80,target_protocol:http,target_port:80,certificate_id:,tls_passthrough:false
Notez que le statut est maintenantactive
, nous avons une adresse IP attribuée et nos gouttelettes cibles sont répertoriées. Accédez à cette nouvelle adresse IP à charge équilibrée dans votre navigateur, en chargeant à nouveau la pagetest.html
. L'URL ressemblera à:
http://load-balancer-1_ip_address/test.html
Votre navigateur chargera le message depuisweb-1 ouweb-2. Actualisez la page et vous devriez voir le message de l’autre serveur. Notre Load Balancer est en moderound robin, ce qui signifie qu'il envoie des connexions au prochain Droplet de la liste pour chaque requête. L'alternative est le modeleast connections, où l'équilibreur de charge envoie un nouveau trafic vers la cible qui a le moins de connexions actives.
Maintenant que nous savons que notre Load Balancer fonctionne, désactivons un serveur et voyons comment il gère l’interruption.
[[step-4 -–- testing-fail-over]] == Étape 4 - Test du basculement
Un des grands avantages des équilibreurs de charge est leur tolérance accrue aux problèmes de serveurs Web principaux individuels. L'équilibreur de charge exécute une vérification de l'intégrité à des intervalles prédéterminés (toutes les 10 secondes par défaut). La vérification de l'intégrité par défaut consiste à récupérer une page Web sur le serveur cible. Si cette vérification échoue plusieurs fois de suite, la cible est retirée de la rotation et aucun trafic ne lui est envoyé jusqu'à ce qu'elle récupère.
Testons la fonctionnalité de basculement en échouant le test de santé. SSH de nouveau dansweb-2:
doctl compute ssh web-2
Maintenant, fermez le serveur Web Apache:
systemctl stop apache2
Retournez dans le navigateur et actualisez la page à charge équilibrée à quelques reprises. Au début, vous pourriez avoir quelques erreurs503 Service Unavailable. Par défaut, Load Balancer attend l'échec de trois vérifications de l'intégrité avant de supprimer un serveur du pool. Cela prendra environ trente secondes. Après cela, vous ne verrez que les réponses deweb-1.
Démarrez la sauvegarde Apache surweb-2:
systemctl start apache2
Encore une fois, après un court laps de temps, l'équilibreur de charge détectera queweb-2 est actif et il sera de nouveau ajouté au pool. Vous commencerez à voir les réponses deweb-2 lors de l'actualisation de la page.
Votre équilibreur de charge est maintenant de nouveau en pleine santé.
Lisez la suite pour connaître les prochaines étapes à suivre pour rendre votre système Load Balancer prêt pour la production.
Conclusion
Dans ce didacticiel, nous avons utilisédoctl
pour créer un équilibreur de charge DigitalOcean et certains serveurs Web principaux, configuré l'équilibreur de charge pour envoyer le trafic HTTP aux serveurs principaux et testé la fonctionnalité de vérification de l'état de l'équilibreur de charge. Il existe encore quelques étapes à suivre pour préparer votre Load Balancer en vue de sa production:
-
Vous souhaiterez pointer un nom de domaine vers votre équilibreur de charge afin que vos utilisateurs ne tapent pas une adresse IP indésirable. Vous pouvez apprendre comment faire cela avec notre tutorielHow To Set Up a Host Name with DigitalOcean.
-
DigitalOcean vous permet de marquer vos gouttelettes afin de les garder organisées et d’adresser des ensembles entiers de gouttelettes en groupe. Vous pouvez configurer votre équilibreur de charge pour qu'il envoie le trafic à tous les droplets d'une balise donnée, au lieu d'ajouter des gouttelettes individuellement. Cela vous permettra d'ajouter de manière plus dynamique de nouveaux serveurs principaux au pool. Vous pouvez en savoir plus sur les balises DigitalOcean dansHow To Tag DigitalOcean Droplets.
-
Si vous avez besoin d'ajouter la sécurité HTTPS à votre site Web à charge équilibrée, nous avons des tutoriels sur les deux façons différentes d'y parvenir:SSL passthrough etSSL termination.