OVH Guide

Infrastructure Blue-Green

Cas pratique

Introduction

Avec ce guide nous vous proposons d'explorer un cas d'usage particulier de votre service OVH Load Balancer : configurer son service pour gérer facilement une infrastructure production / développement également appelée Blue-Green.

Deploiement Blue-Green

Un déploiement Blue-Green permet de s'affranchir du temps d'indisponibilité de votre infrastructure. L'intérêt principal est que ce type de déploiement vous offre la possibilité de préparer vos mises à jour et / ou maintenances dans un environnement isolé de votre environnement de production. Vous pouvez ainsi tester vos modifications avant leur mise en production mais aussi revenir rapidement en arrière en cas de détection d'un dysfonctionnement, tout ceci avec des délais d'indisponibilité quasiment nuls.

Prérequis

Pour mettre en oeuvre un déploiement de type Blue-Green vous devez disposer des éléments suivants :

  • un service OVH Load Balancer ;
  • un premier serveur qui porte votre infrastructure de production ;
  • un second serveur qui porte une infrastructure similaire dédiée au développement ;

Scenario

Le scénario que nous vous proposons ici est le suivant : vous disposez d'une infrastructure qui vous permet de mettre en ligne votre site internet.

Cette infrastructure héberge le code de votre site mais aussi les applications (serveurs web, serveurs de base de données, etc.) nécessaires à la mise en ligne du site. Régulièrement vous êtes confronté à la nécessité de mettre à jour vos applications et / ou votre code. Vous souhaitez être en mesure de tester vos mises à jours sans impacter ni la disponibilité ni le bon fonctionnement du site exposé à vos clients.

Une solution possible pour atteindre ces objectifs est de mettre en œuvre un déploiement Blue-Green.

Le principe d'un déploiement Blue-Green consiste à vous permettre de basculer facilement d'une infrastructure de développement vers une infrastructure de production, et vice-versa. Cette bascule doit pouvoir se faire de manière transparente pour vos différents utilisateurs. Pour ce faire nous allons assigner le port HTTP standard 80 pour les accès à l'infrastructure de production et le port arbitraire 8888 pour les accès à l'infrastructure de développement.

Deployer les infrastructures

Dans le cadre du scénario proposé, votre service IP Load Balancing joue un rôle central. Il est l'élément qui vous permet d'exposer simultanément vos 2 infrastructures (production et développement) à vos différents utilisateurs.

L'infrastructure de production est accessible à vos clients sur le service HTTP standard (port 80). L'infrastructure de développement quant à elle est accessible à vos développeurs / administrateurs sur le port non-standard 8888.

Durant la phase initiale d'installation, nous allons assigner arbitrairement un rôle à chacune des parties de notre infrastructure. L'infrastructure A sera assignée à la production tandis que l'infrastructure B sera assignée au développement. Nous considérerons qu'à ce stade elles sont similaires.

Le déploiement Blue-Green consiste à basculer de l'infrastructure A vers l'infrastructure B lorsque cette dernière est prête à exposer votre site après que vos changements aient été appliqués et testés. C'est l'IPBL qui se chargera de gérer cette bascule.

Le schéma suivant détail l'architecture générale :

Schéma général de l'architecture blue-green

Infrastructure A

Cette infrastructure est composée d'une ferme de serveurs qui sera ultérieurement associée à un frontend de votre IPLB. Cette ferme expose au frontend un service de type HTTP, TCP ou UDP. Elle se charge également de la répartition de charge en transmettant aux serveurs le trafic reçu par le frontend. Pour plus de précision sur le rôle des différents éléments du service OVH Load Balancer, vous pouvez vous réferer à cette documentation : .

Dans le cadre de notre scénario, nous déclarons une ferme de serveurs pour le service HTTP. A noter que vous pouvez créer autant de fermes que de services TCP et / ou UDP nécessaires au bon fonctionnement du service final exposé à vos clients.

Depuis le manager Sunrise :

Ajout d'une nouvelle ferme HTTP dédié à l'infrastructure A

Renseigner la configuration de la ferme

Via l'Api :

Paramètre Signification
serviceName L'identifiant de votre service Load Balancer

Les appels complémentaires suivants vous permettront respectivement de lister, modifier ou supprimer vos fermes.

Depuis le manager Sunrise :

Ajout d'un nouveau serveur à la ferme HTTP A

Renseigner la configuration du serveur HTTP A

Via l'Api :

Paramètre Requis Signification Exemple
serviceName Requis L'identifiant de votre service Load Balancer ip-abcdef0123456789
farmId Requis L'identifiant de votre ferme de serveurs 51099
address Requis L'addresse IPv4 de votre serveur 11.12.13.14
displayName Le nom du serveur associé à votre ferme Serveur HTTP A
port Le port du serveur associé à votre ferme 8080

Les appels complémentaires suivants vous permettront respectivement de lister, modifier ou supprimer vos serveurs.

Infrastructure B

Cette seconde infrastructure est fonctionnellement jumelle de la précédente, elle est également composée d'une ferme de serveurs qui sera ultérieurement associée à un second frontend de votre IPLB. Cette ferme expose au frontend le même service que la ferme précédemment créé. Ce service est fournis sur les serveurs par le port 8080.

Déployer la ferme de serveurs pour le service HTTP (et / ou tout autre service TCP ou UDP nécessaire au fonctionnement du service final exposé à vos clients).

Depuis le manager Sunrise :

Ajout d'une nouvelle ferme HTTP dédié à l'infrastructure B

Création d'une seconde ferme dédiée à l'infrastructure B

Via l'Api :

Paramètre Signification
serviceName L'identifiant de votre service Load Balancer

Associer un serveur à votre ferme, il s'agit ici du (ou des) serveur(s) physique(s) portant votre infrastructure de développement.

Depuis le manager Sunrise :

Ajout d'une nouveau serveur à la ferme HTTP B

Renseigner la configuration du serveur HTTP B

Via l'Api :

Paramètre Requis Signification Exemple
serviceName Requis L'identifiant de votre service Load Balancer ip-abcdef0123456789
farmId Requis L'identifiant de votre ferme de serveurs 51111
address Requis L'addresse IPv4 de votre serveur 15.16.17.18
displayName Le nom du serveur associé à votre ferme Serveur HTTP B
port Le port du serveur associé à votre ferme 80

Les frontends

Toute la magie du déploiement Blue-Green se situe au niveau de la configuration de vos frontends. A ce stade nous avons configuré 2 infrastructures fonctionnellement jumelles en déclarant, pour chaque infrastructure, une (ou plusieurs) ferme(s) de serveurs, avec pour chaque ferme son (ses) serveur(s) associé(s).

Pour permettre de basculer simplement d'une infrastructure à une autre nous allons nous servir des frontends.

Pour cela nous devons déclarer 2 frontends. Le premier permettra d'accéder à l'infrastructure de production tandis que le second se chargera des accès à l'infrastructure de développement. Les accès à l'une ou l'autre des infrastructures seront controlés grâce aux ports exposés à vos clients.

Si le service final exposé à vos clients nécessite plusieurs fermes de serveurs (par exemple : les ports 80 et 443), vous devrez déclarer un frontend pour chacune de vos fermes.

Frontend Blue

Ce frontend est dédié aux accès à l'infrastructure de production, les ports exposés à vos clients sont les ports standards d'accès au service. Dans le cas présent nous exposons un service HTTP, nous allons donc utiliser le port 80 (443 si vous souhaitez une terminaison SSL).

Depuis le manager Sunrise :

Ajout du frontend dédié à la production, Blue Frontend

Renseigner la configuration du frontend Blue

Via l'Api :

Paramètre Requis Signification Exemple
serviceName Requis L'identifiant de votre Load Balancer ip-abcdef0123456789
defaultFarmId L'identifiant de la ferme de production 51099
displayName Le nom donné au frontend Blue Frontend
port Requis Le port exposé par votre frontend à vos clients 80
zone Requis La zone dans laquelle vous souhaitez déployer votre frontend ALL

Frontend Green

Ce frontend est dédié aux accès à l'infrastructure de développement, les ports exposés à vos clients seront des ports non-standards que vous pouvez choisir arbitrairement. Dans le cas présent nous allons exposer le service HTTP de développement sur le port 8888.

Depuis le manager Sunrise :

Ajout du frontend dédié au développement, Green Frontend

Renseigner la configuration du frontend Green

Via l'Api :

Paramètre Requis Signification Exemple
serviceName Requis L'identifiant de votre Load Balancer ip-abcdef0123456789
defaultFarmId L'identifiant de la ferme de production 51111
displayName Le nom donné au frontend Green Frontend
port Requis Le port exposé par votre frontend à vos clients 8888
zone Requis La zone dans laquelle vous souhaitez déployer votre frontend ALL

Gerer les deploiements

Deploiement initial

Après avoir finalisé la configuration des différents composants de votre service OVH Load Balancer, il ne vous reste plus qu'à appliquer vos changements.

Depuis le manager Sunrise :

Appliquer vos changements sur la zone

Via l'Api :

Paramètre Signification
serviceName L'identifiant de votre service Load Balancer

Bascule production / preproduction

À ce stade notre environnement initial est déployé et prêt à être utilisé. Comment l'utiliser ?

De manière assez simple finalement, il suffira désormais de basculer vos frontends d'une ferme de serveur à une autre !

Reprenons notre scénario :

  • l'infrastructure de production (A) est déployée sur la Ferme HTTP A (id 51099) qui est elle même attachée au Serveur HTTP A. L'accès à cette infrastructure se fait par l'intermédiaire du Frontend Blue.
  • l'infrastructure de développement (B) est déployée sur la Ferme HTTP B (id 51111) qui est elle même attachée au Serveur HTTP B. L'accès à cette infrastructure se fait par l'intermédiaire du Frontend Green.

Après avoir réalisé vos modifications / mises à jours sur l'infrastructure B et validé le bon fonctionnement du service, vous décidez de l'assigner à la production.

Pour faire la bascule entre les 2 fermes, il suffira simplement de mettre à jour vos différents frontends en modifiant l'identifiant de la ferme à laquelle ils sont rattachés et d'appliquer la modification.

Le Frontend Blue (id 46907) va donc être associé à la Ferme B (infrastructure B, nouvelle production, id 51111).

Le Frontend Green (id 46908) quant à lui sera désormais associé à la Ferme A (infrastructure A, nouvelle développement, id 51099).

Résultat sur le manager Sunrise après mise à jour des frontends et application de la nouvelle configuration :

Résultat après la mise à jour des frontends

Via l'Api : mise à jour des frontends et application des modifications

Paramètre Signification Exemple
ServiceName L'identifiant de votre service Load Balancer ip-abcdef0123456789
frontendId L'identifiant de votre frontend de production 46907
defaultFarmId L'identifiant de votre ferme de serveurs de développement 51111
Paramètre Signification Exemple
ServiceName L'identifiant de votre service Load Balancer ip-abcdef0123456789
frontendId L'identifiant de votre frontend de production 46908
defaultFarmId L'identifiant de votre ferme de serveurs de développement 51099

Pour appliquer vos changements et réaliser effectivement la bascule production / développement.

Paramètre Signification
serviceName L'identifiant de votre service Load Balancer

Conclusion

Vous disposez désormais d'une infrastructure vous permettant de gérer simplement et efficacement vos déploiements Blue-Green.

Les développeurs disposent d'un accès à l'infrastructure de développement sur le port 8888 (ou tout autre port que vous auriez préférer définir) tandis que vos clients continuent d'accéder au service en production via le port HTTP standard (80 dans le cas de notre exemple).

L'infrastructure présentée ici se limite à l'exposition d'un seul et unique port, elle peut bien entendue être développée en ajoutant d'autres ports. Vous pouvez par exemple vouloir également exposer votre site sur le port HTTPS standard (443). Ceci peut se faire en définissant de nouvelles fermes dédiées à chaque nouveau port que vous souhaitez exposer et en les associant à leurs frontends correspondant (un pour le port standard exposé en production, le second pour le port arbitraire dédié aux développements).

Une autre possibilité pour consolider encore un peu plus votre infrastructure est de multiplier les serveurs attachés à votre (vos) ferme(s). Ceci vous permettra d'ajouter à la simplicité de réalisation de vos déploiements une redondance de vos services (garantissant ainsi leur disponibilité) ainsi qu'une capacité de répartition de charge.