WOW !! MUCH LOVE ! SO WORLD PEACE !
Fond bitcoin pour l'amélioration du site: 1memzGeKS7CB3ECNkzSn2qHwxU6NZoJ8o
  Dogecoin (tips/pourboires): DCLoo9Dd4qECqpMLurdgGnaoqbftj16Nvp


Home | Publier un mémoire | Une page au hasard

 > 

Etude, conception et implémentation d'un cluster low-cost haut disponibilité de Raspberry Pi 3

( Télécharger le fichier original )
par Rodrigue Tchuenche
Institut Africain d'Informatique (IAI) - Ingénieur 2016
  

Disponible en mode multipage

Bitcoin is a swarm of cyber hornets serving the goddess of wisdom, feeding on the fire of truth, exponentially growing ever smarter, faster, and stronger behind a wall of encrypted energy

Institut Africain d'Informatique

Myrabilys Technologies Sarl

Etablissement Inter - Etats d'Enseignement Supérieur
BP 2263 Libreville (Gabon)
Tél. (241) 07 70 55 00 / 07 70 56 00
Site web: www.iai-siege.com
E-mail: contact@iaisiege.com

Carrefour Ancienne Sobraga
BP 13.984 Libreville (Gabon)
Tél. (241) 01 73 00 24
Site web: www.myrabilys.com

MÉMOIRE DE FIN DE CYCLE

En vue de l'obtention du diplôme

D'INGENIEUR EN INFORMATIQUE

THÈME

ÉTUDE, CONCEPTION ET

IMPLÉMENTATION D'UN CLUSTER LOW-

COST HAUTE DISPONIBILITÉ DE

RASPBERRY PI 3

Réalisé par :

TCHUENCHÉ Rodrigue
Élève en fin de cycle ingénieur

Superviseur

Maître de stage

Dr. NOUSSI Roger
Enseignant Permanent à IAI

M. NJIOMO Luc Prosper
Ingénieur Informaticien & MBA

C.E.O de Myrabilys

Année Académique 2015 - 2016

ÉTUDE, CONCEPTION ET IMPLÉMENTATION

D'UN CLUSTER LOW-COST HAUTE

DISPONIBILITÉ DE RASPBERRY PI 3

Tchuenché Rodrigue

Septembre 2016

Table des matières

Liste des Acronymes vii

DÉDICACE xi

ÉPIGRAPHE xii

REMERCIEMENTS xiii

AVANT-PROPOS xiv

RÉSUMÉ xv

ABSTRACT xvi

INTRODUCTION GÉNÉRALE 1

I PARTIE 1 : Présentation générale de l'étude 2

INTRODUCTION 3

1 CHAPITRE 1 : Présentation de la structure d'accueil, du contexte et du su-

jet d'étude 4

1.1 Structure d'accueil 4

1.1.1 Historique 4

1.1.2 Missions et Activités 4

1.1.3 Organigramme 5

1.2 Contexte et Problématique 7

1.3 Sujet d'étude 7

ii

2 CHAPITRE 2 : Concepts généraux liés au sujet 9

iii

iii

2.1 Quelques Définitions 9

2.2 Etude de quelques concepts liés au sujet d'étude 10

2.2.1 Raspberry Pi 10

2.2.1.1 Modèle A 11

2.2.1.2 Modèle A+ 11

2.2.1.3 Modèle B 12

2.2.1.4 Modele B+ 12

2.2.1.5 Modèle 2B 13

2.2.1.6 Modèle 3B 14

2.2.1.7 Modèle Zéro 14

2.2.2 Cluster 16

2.2.2.1 Catégories de clusters 16

2.2.2.2 Architecture des Clusters 19

2.2.3 Les Dockers 21

2.2.3.1 C'est quoi un Docker? 22

2.2.3.2 Difference entre Docker et Machine Virtuelle (VM) 22

2.2.3.3 Environnement et notions de base Docker 22

2.2.4 ERP Odoo 23

2.2.4.1 Historique 23

2.2.4.2 Principaux Modules Applicatifs du logiciel Odoo 24

2.2.4.3 Architecture Logiciel d'Odoo 25

CONCLUSION 25

II PARTIE 2 : Conception, Implémentation et étude de la solution

à proposer 26

INTRODUCTION 27

3 CHAPITRE 3 : Analyse et conception 28

3.1 Solution logicielle de Cluster 28

iv

 

3.1.1

3.1.2

Microsoft Cluster / Cluster pour système Windows

3.1.1.1 Microsoft Cluster Server (MSCS)

3.1.1.2 Evidian Safekit

Cluster GNU/Linux

28

29

29

30

 
 

3.1.2.1 Linux Virtuel Server (LVS)

30

 
 

3.1.2.2 Beowulf

30

 
 

3.1.2.3 Linux HA-Project

31

 
 

3.1.2.4 Multicomputer Operating System for Unix (MOSIX)

31

 
 

3.1.2.5 Apache Mesos

31

 
 

3.1.2.6 Cluster Docker Swarm

31

3.2

Analyse Des Solutions

32

3.3

Concepts de répartition de charge réseau (Load Balancing)

32

 

3.3.1

Présentation

32

 

3.3.2

Logiciels de distribution de charge réseau et haute Disponibilité du cluster 33

 
 

3.3.2.1 HAProxy

33

 
 

3.3.2.2 Heartbeat

34

 

3.4

Conception du cluster

35

 
 

3.4.1 Nombre de Noeuds du Cluster

35

 
 

3.4.2 Adressage IP du Cluster

36

 
 

3.4.3 Constituant de chaque noeud

36

 
 

3.4.4 Architecture de notre cluster

37

 

CONCLUSION

37

4

CHAPITRE 4 : Mise en oeuvre du cluster

39

 

4.1

Matériel utilisés pour monter notre Cluster

39

 

4.2

Mise en OEuvre du cluster

42

 
 

4.2.1 Installation du système d'exploitation sur les 10 noeuds du cluster . . . .

42

 
 

4.2.1.1 Configuration adresse IP des noeuds Raspberry Pi

42

 
 
 

iv

v

v

4.2.1.2 Configuration nom d'hôte des noeuds Raspberry Pi 43

4.2.2 Installation du moteur Docker sur chaque noeud 43

4.2.3 Création d'un container Docker, le cas du container Odoo 43

4.2.3.1 Création d'un Docker Image à partir d'un Dockerfile 44

4.2.3.2 Création des Docker Containers 44

4.2.4 Mise en oeuvre du Cluster Docker Swarm 44

4.2.5 Mise en OEuvre du Cluster de Répartition de charges et Haute Disponi-

bilité 45

4.2.5.1 Mise en oeuvre de la répartition de charge 45

4.2.5.2 Mise en oeuvre Haute Disponibilité du cluster 46

CONCLUSION 47

5 CHAPITRE 5 :Évaluation du cluster et conduite du projet 48

5.1 Protocole d'évaluation 48

5.2 Évaluation du cluster 49

5.2.1 Évaluation de l'énergie 49

5.2.2 Évaluation coût du cluster 50

5.2.3 Évaluation Performance Cluster 50

5.3 Conduite du projet 50

5.3.1 Les intervenants dans le projet 51

5.3.2 Découpage du projet 51

5.3.3 Diagramme de GANTT 52

5.4 Bilan et perspectives 53

5.4.1 Bilan 53

5.4.2 Perspectives 54

CONCLUSION GÉNÉRALE 55

Les Annexes 56

.1 Annexe 1 56

vi

vi

.2 Annexe 2 58

.3 Annexe 3 59

.4 Annexe 4 60

.5 Annexe 5 61

.6 Annexe 6 68

.7 Annexe 7 68

.8 Annexe 8 70

.9 Annexe 9 75

.10 Annexe 10 80

Référence bibliographique 83

vii

vii

Liste des Acronymes

Abréviations

Significations

VM

Virtual Machine

ERP

Enterprise Resource Planning

Sarl

Societé à Responsabilité Limité

IAAS

Infrastructure As A Service

SAAS

Software as a service

CRM

Customer Relationship Management

ARM

Advanced RISC Machines

HDMI

Interface Multimédia Haute Définition

GPIO

General Purpose Input/Ouput

MOSIX

Multicomputer Operating System for Unix

FTP

File Transfert Protocol

DMA

Direct Memory Access

API

Application Program Interface

PVM

Parallele Virtual Machine

MPI

Message Passing Interface

RMA

Remote Memory Access

RAM

Random Access Memory

CPU

Central Processing Unit

LXC

Linux Container

OS

Operating System

GPL

General Public License

LGPL

Lesser General Public License

CMS

Content Management System

MVC

Modèle Vue Contrôleur

NLB

Network Load Balancing

MSCS

Microsoft Cluster Service

CLB

Component Load Balancing

LVS

Linux Virtual Server

TABLE 1 - Liste des abréviations

viii

Liste des tableaux

1

Liste des abréviations

vii

2.1

Tableau récapitulatif version Odoo

24

4.1

Carte MicroSD 8 & 32 Go

40

5.1

Comparaison consommation d'énergie

50

5.2

Table dépenses

50

5.3

Comparaison coût

50

5.4

Découpage des tâches

52

5

Liste outils nécessaires pour flasher la carte microSD

56

ix

Table des figures

2.1 Schéma Architecture D'un Cluster 10

2.2 Une carte nue du Raspberry Pi modèle A 12

2.3 Une carte nue du Raspberry Pi modèle A+ 12

2.4 Une carte nue du Raspberry Pi modèle B 13

2.5 Une carte nue du Raspberry Pi modèle B+ 13

2.6 Une carte nue du Raspberry Pi 2 modèle B 14

2.7 Une carte nue du Raspberry Pi 3 modèle B 14

2.8 Une carte nue du Raspberry Pi Zéro 15

2.9 Une carte annotée du Raspberry Pi 3 Modèle B 15

2.10 Cluster haute disponibilité 17

2.11 Cluster répartition de charges 18

2.12 Cluster calcul haute performance 18

2.13 Cluster de stockage 19

2.14 Machine Virtuelle Vs Docker 23

3.1 Architecture Haproxy 34

3.2 Architecture Haproxy/heartbeat 35

3.3 Architecture cluster à implémenter 38

3.4 Architecture cluster Docker Swarm à implémenter 38

4.1 Switch Gigabit Ethernet 40

x

4.2

Câble RJ45

40

4.3

Batterie d'alimentation

40

4.4

Convertisseur 12V - 5V

41

4.5

Notre Raspberry Pi 3 Assemblé

41

4.6

Notre Cluster Physique monté

42

4.7

ifconfig partie eth0 :0 qui indique que le noeud fonction sur l'adresse virtuelle

 
 

172.16.0.50

46

4.8

Interface Connexion Odoo sur le cluster à l'adresse 172.16.0.50 :8070

47

5.1

Diagramme de GANTT

53

5.2

Diagramme de GANTT next

53

3

Fenêtre WinDiskImager

57

4

Fenêtre Zenmap

57

5

Fenêtre Putty.exe

58

6

Fenêtre connexion Hypriot OS

58

7

Fenêtre acceuil Hypriot OS

59

8

Fenêtre docker build

65

9

Fenêtre docker images

69

10

Fenêtre résultat docker stats

75

11

Fenêtre résultat docker ps sur cluster

76

12

Fenêtre statistique Haproxy

78

13

Fenêtre status Haproxy

80

 
 

x

xi

DÉDICACE

Je dédie ce mémoire à ma feue grand-mère
Maman KUISSU Pauline

Paix à son âme, que la terre de nos ancêtres lui soit légère.

xi

xii

xii

ÉPIGRAPHE

« Nous ne pouvons pas prédire où nous conduira la Révolution
Informatique. Tout ce que nous savons avec certitude, c'est que,
quand on y sera enfin, on n'aura pas assez de RAM »

Dave Barry

xiii

xiii

REMERCIEMENTS

Je remercie l'État camerounais pour m'avoir donné l'opportunité de poursuivre mes études
d'ingénieur à IAI-GABON en les finançant. Je voudrais par la même occasion remercier
l'État Gabonais pour l'accueil, l'assistance et les facilités à nous accordés pour permettre le
bon déroulement de nos études sur son territoire.

Je tiens particulièrement à remercier ma feue grand-mère Maman KUISSU Pauline pour
l'amour, la patience, le courage, le soutien et les conseils qu'elle a toujours porté à mon
endroit. Paix à son âme.

Je remercie papa KOUAM Moïse et son épouse Maman Béatrice pour leur soutiens et

conseils.

Je remercie mes parents pour leurs amours, soutiens et conseils.

À Mr NJIOMO Luc Prosper , mon maître de stage, je dis un merci spécial pour ses
précieux conseils, sa disponibilité, son soutien, son hospitalité, sa rigueur durant ses trois
années de formation et pour son encadrement durant ses cinq mois de stage.

À Mr NOUSSI Roger enseignant permanent à l'IAI, mon superviseur, je dis merci pour
ses conseils et orientations durant ce stage.

Aux corps administratif et enseignants de l'Institut Africain d'Informatique(IAI) pour la formation et l'encadrement reçus, je dis merci.

À mes camarades de promotion plus particulièrement Apollinaire, Hervé, Mbonwouo, Etienne Willy, Franck César, Sergeo, Francine, je les remercie pour leurs soutiens, les échanges fructueux et l'ambiance qui a régné durant le stage et ses trois années de formation.

À mon grand ami TANON Hervé, je dis un grand merci pour son soutien et ses conseils.

J'exprime ma gratitude à mes frères, soeurs, amis et toute la famille pour leur soutiens

inconditionnels.

À la grande famille ASSECI (Association des étudiants Camerounais de l'IAI), je leur
témoigne mes sincères remerciements pour leurs soutiens et conseils.

À Mme NJIOMO Marcelle, pour son accueil aussi chaleureux à chaque visite, son
hospitalité, ses conseils, son soutien, je lui témoigne mes sincères remerciements.

Enfin, à tous ceux qui, de près ou de loin, ont participé à l'élaboration de ce mémoire, je vous dis sincèrement merci

xiv

xiv

AVANT-PROPOS

L'institut Africain d'Informatique (IAI) est un établissement Inter-états d'enseigne-ment supérieur créé en 1971. Il regroupe onze (11) Etats africains : le Burkina Faso, le Benin, le Cameroun, la République Centrafricaine, le Congo Brazzaville, la Côte d'Ivoire, le Gabon, le Niger, le Sénégal, le Tchad et le Togo. L'IAI intègre dans son cursus de formation plusieurs cycles parmi lesquels celui des Ingénieurs de conception en Informatique. Arrivés en fin de cycle, les élèves du cycle Ingénieur sont soumis à un stage pratique d'une durée de cinq (5) mois. Ce stage a pour finalité de placer l'étudiant en fin de cycle face aux réalités diverses et variées du monde professionnel sous l'encadrement d'un expert métier. Celui-ci a pour mission d'apprendre à l'étudiant stagiaire les fondamentaux requis pour construire des solutions informatiques adaptées aux problèmes soumis à son attention par l'entreprise (qu'elle soit privée, publique ou mixte) ou par une structure de recherche.

Le présent document représente l'aboutissement de trois (3) années de formation donc cinq (5) mois de stage pratique effectué à MYRABILYS TECHNOLOGIES Sarl qui est une entreprise informatique basée à Libreville au Gabon et tient lieu à cet effet de notre mémoire de fin de formation d'ingénieur en Informatique à l'Institut Africain d'Informatique de Libreville.

xv

xv

RÉSUMÉ

Le thème de notre étude porte sur la conception, l'implémentation et l'étude d'un cluster low cost haute disponibilité de raspberry pi 3. Ce travail permet de proposer une solution serveur à faible coût et à faible consommation d'énergie tout en garantissant les performances d'un serveur normal à MYRABILYS et à ses clients composés de petites et moyennes structures et des grandes entreprises. Parfaitement adapté aux zones reculées, non couvertes par le réseau électrique, cette solution vise aussi à faciliter l'utilisation et le déploiement des applications comme l'ERP Odoo par l'utilisation des Docker et du cluster Docker Swarm.

Après une étude approfondie en vue d'analyser les solutions déjà existantes et de choisir les outils (logiciels et matériels) nécessaires à la réalisation, nous avons procédé à une phase de conception pour créer l'architecture la mieux adaptée à nos besoins. Par la suite, nous l'avons implémentée et procédé à une évaluation de la solution en vue de vérifier si les objectifs en énergie, coût et performance ont été atteints.

Mots clés : Cluster, Haute disponibilité, Raspberry Pi, Docker, Docker Swarm

xvi

xvi

ABSTRACT

The focus of our study is on the design, implementation and study of a low-cost, high-availability cluster of raspberry pi 3. This work provides a low-cost, low-power server solution while Guaranteeing the performance of a normal server to MYRABILYS and its customers composed of small and medium structures and large companies. Perfectly adapted to remote areas, not covered by the electrical network, this solution also aims at facilitating the use and deployment of applications such as Odoo ERP through the use of the Docker and the Docker Swarm cluster.

After a thorough study to analyze the existing solutions and to choose the tools (software and hardware) necessary for the realization, we proceeded with a design phase to create the architecture best suited to our needs. We then implemented it and carried out an evaluation of the solution to verify whether the energy, cost and performance objectives were met.

Keywords : Cluster, High Availability, Raspberry Pi, Docker, Docker Swarm

1 IAI Gabon

c~Tchuenché Rodrigue Élève Ingénieur En Informatique 1

INTRODUCTION GÉNÉRALE

De nos jours, l'informatisation des Systèmes d'informations des entreprises est un phénomène qui prend de l'ampleur en Afrique. La plupart des structures veulent ou doivent se doter des infrastructures serveurs pouvant servir à héberger leurs services informatiques ou ceux de leurs clients. Dans la démarche d'obtention de ces serveurs, ces structures se heurtent au problème de prix et d'énergie.

Fort de ce constat, et confrontée elle aussi à ces problèmes, MYRABILYS Sarl s'est proposée d'apporter une solution à cette situation. C'est donc dans cette optique que le thème « étude, conception, et implémentation d'un cluster low-cost haute disponibilité de raspberry pi 3 » nous a été confié.

Le présent mémoire sera composé de deux parties. La première sera consacrée à la présentation générale. Elle présentera la structure d'accueil, décrira le contexte général de l'étude, l'objectif et la problématique, puis les concepts généraux liés au sujet. Dans la seconde partie, il s'agira l'analyse, conception et de la mise en oeuvre de la solution, nous évaluerons le système implémenté, et nous terminerons par la conduite du projet.

2

Première partie

PRÉSENTATION GÉNÉRALE DE

L'ÉTUDE

3 IAI Gabon

INTRODUCTION

c~Tchuenché Rodrigue Élève Ingénieur En Informatique 3

Cette partie est divisée en deux chapitres. Le chapitre 1 présente la structure d'accueil, le contexte d'étude, la problématique et le sujet d'étude. Dans le chapitre 2, nous posons la fondation de notre travail en définissant quelques concepts liés à notre étude. Ce même chapitre traite du domaine dans lequel se situe notre travail. Au terme de cette première partie, nous aurons une compréhension claire de la théorie des concepts utilisés dans la réalisation de notre système.

4

Chapitre1

PRÉSENTATION DE LA STRUCTURE D'ACCUEIL, DU CONTEXTE ET DU SUJET D'ÉTUDE

1.1 Structure d'accueil

Pour mieux présenter la structure qui nous a accueillis, nous allons commencer par présenter son historique, puis ses missions, ses activités et enfin son organigramme. Nous explorerons enfin le département dans lequel nous avons effectué le stage.

1.1.1 Historique

La société MYRABILYS Sarl a été créé en 2014 par Mr NJIOMO Luc Prosper le Chief Executive Officer Actuel. Elle est basée à Libreville (Ancienne SOBRAGA) et une succursale sera bientôt installée à Douala au Cameroun.

1.1.2 Missions et Activités

MYRABILYS TECHNOLOGIES Sarl est une entreprise informatique basée à Libreville au Gabon et dont le coeur de métier couvre trois activités complémentaires suivantes :

* Le Cloud Computing (que l'on traduit par nuage informatique) qui consiste à fournir des services ou des applications informatiques en ligne, accessibles partout, à tout moment, et de n'importe quel terminal (smartphone, PC de bureau, ordinateur portable et tablette). Le Cloud Computing permet chez MYRABILYS Technologies Sarl, de partager une infrastructure (Infrastructure As A Service - IAAS), une solution applicative (Software As A Service - SAAS) à toute entreprise utilisatrice qui en fait la demande via une simple connexion internet en libre-service. MYRABILYS Technologies Sarl se positionne donc comme un « opérateur de services informatiques managés » où elle propose à ses clients d'externaliser l'hébergement, la configuration, la maintenance de leur application sur ses serveurs de sorte que les clients qui ne possèdent pas toujours de services informatiques internes digne de ce nom, n'aient plus à se préoccuper des problématiques

5 IAI Gabon

techniques informatiques afin de se concentrer sur le coeur de leur métier.

c~Tchuenché Rodrigue Élève Ingénieur En Informatique 5

* L'intégration et outsourcing, concernant principalement l'ERP ODOO (ancien Open ERP). En effet, L'éditeur est un industriel du logiciel. Il conçoit et développe des produits logiciels pour le plus grand nombre. L'intégrateur accompagne un tiers utilisateur dans le déploiement et personnalise le produit logiciel conçu par l'éditeur.

* Le conseil et l'audit. Cette activité a pour objectif d'identifier et d'évaluer les risques (opérationnels, financiers, organisationnels) associés aux activités informatiques d'une entreprise ou d'une administration. Ceci permet d'identifier les endroits où agir pour améliorer le fonctionnement et la performance d'une organisation avec une éventuelle implication dans la mise en oeuvre de cette amélioration.

1.1.3 Organigramme

Dans le cadre de notre stage, bien que attaché au département SOFTWARE, notre travail « conception et implémentation d'une infrastructure serveur basé sur raspberry pi » s'intègre au département INFRASTRUCTURE.

Pool Conseillers et Consultants

Juridique, Stratégique, Management

DIRECTEUR GENERAL

MYRABILYS TECHNOLOGY

Plans, Table Plan Recru

 
 

INFRASTRUCTURE

SOFTWARE

MARKETING

AD

Matériel, Télécom, Réseaux

Installation et administration du Datacenter.

Animation de la cellule de veille et d'éveille.

Cellule de test de robustesse des solutions proposées aux clients

Installation des environnements matériels et OS chez les clients

Règle les dysfonctionnement technique en cas de réclamation incident client

Installe et maintient l'infrastructure interne de l'entreprise.

Base de données, ERP

Responsable des contenus du Datacenter.

Cellule de développement des applications à installer chez les clients ou dans le Datacenter.

Prépare et effectue les démonstrations chez les clients ou dans notre salle de formation.

Déploiement fonctionnelle de l'ERP chez les clients

Formation fonctionnelle sur les applications et les modules de l'ERP.

Rédaction des documentations techniques.

Comp

gest

Fac

Co

anal

Fisc

l'ad

Ges

Paie

Réd

céd

Stat

bor

Ges tière

riels

Con de r

6

Prospection, Vente, CRM

Rédaction propositions commerciales, et appels d'offre, ainsi que conditions générales de vente.

Définition des Produits, ser vices, Segments, Tarifications, Couple Produit/ Marché, 5 roues de Porter

Retour d'information des clients sur les améliorations attendues, des nouveaux besoins,

Définition des nouvelles offres, ajustement de tarifs

Régler les soucis commerciaux en cas de réclamation client.

Formation fonctionnelle et technique des clients utilisant nos solutions hébergées.

Rédaction des documentations fonctionnelles des modules de l'ERP et des applications hébergées.

7 IAI Gabon

c~Tchuenché Rodrigue Élève Ingénieur En Informatique 7

1.2 Contexte et Problématique

L'activité coeur de métier de MYRABILYS Technologies Sarl c'est celle du cloud computing. Elle nécessite d'acquérir, de posséder, de sécuriser et d'administrer au quotidien un Datacenter (centre de traitement des données en français). Le datacenter est un site physique sur lequel se trouvent regroupés des équipements constituants du système d'information de l'entreprise (ordinateurs centraux, serveurs, switch, routeurs, baies de stockage, équipements réseaux et de télécommunications, etc.) et dans lequel les entreprises clientes peuvent notamment louer un espace de stockage et ainsi éviter la présence de serveurs dans leurs locaux. Posséder un datacenter présente les difficultés suivantes :

* le coût d'acquisition de ces solutions serveur : En effet le coût d'achat de ces solutions de serveurs physique (HP, SuperMicro, Dell, etc.) est en général assez élevé (des dizaines de millions et plus).

* la consommation d'énergie : Les solutions traditionnelles de serveurs physiques sont assez énergivores. Dans un contexte africain où la couverture et la fourniture d'énergie électrique bon marché sont loin d'être un acquis, l'aspect énergie est également source de dépenses énormes pour les entreprises. Elle constitue aussi un frein sérieux dans la généralisation des outils des NTIC dans tous les secteurs de la vie économique.

* Le système de refroidissement * La sécurisation

Ainsi, garantir une maintenance technique, un accès sécurisé permanent, un fonctionnement 24h/24 de ses infrastructures et de celui de ses clients qui sont pour la plupart des PME, des mairies, des établissements scolaires souvent situés dans des zones très reculées sans couverture de réseau électrique est un grand challenge pour MYRABILYS Technologies.

Le Raspberry Pi est un nano-ordinateur monocarte à processeur ARM. Cet ordinateur, qui a la taille d'une carte de crédit, permet l'exécution de plusieurs variantes du système d'exploitation libre GNU/Linux et des logiciels compatibles. Il est fourni nu (carte mère seule, sans boîtier, alimentation, clavier, souris ni écran) dans l'objectif de diminuer les coûts et de permettre l'utilisation de matériel de récupération. Le raspberry Pi nécessite très peu d'énergie électrique pour son fonctionnement (5v et 800 mA). Il consomme 2W.

1.3 Sujet d'étude

Notre travail consiste donc à étudier, concevoir et implémenter une solution de clustering haute disponibilité à moindre coût et peu énergivore basée sur les nano-ordinateurs Raspberry Pi 3 pouvant compléter l'offre serveur de MYRABILYS Technologies. Malheureusement, les nano-ordinateurs de nos jours n'ont pas de puissance de calcul pouvant égaler celle des gros serveurs. Un raspberry pi pris individuellement est faible. Il faudra alors inventer un modèle de coopération entre ces machines dans une stratégie du type « l'union fait la force » ou encore « l'union des petits peut égaler un grand ».

8 IAI Gabon

c~Tchuenché Rodrigue Élève Ingénieur En Informatique 8

Par ailleurs, étant intégrateur de l'ERP Odoo, MYRABILYS doit soit en local dans son datacenter, soit chez le client déployer l'ERP Odoo et par la suite procéder à des formations à l'utilisation des nouveaux utilisateurs. Une des difficultés est le déploiement complexe d'Odoo quand il s'agit d'un système d'exploitation Linux.

Ainsi, après avoir monté notre solution cluster, nous devons par la suite trouver un moyen de faciliter le déploiement et la gestion de l'ERP Odoo et d'autres applications similaires dans notre solution cluster ou dans un système Linux pour serveur.

Chapitre2

CONCEPTS GÉNÉRAUX LIÉS AU SUJET

9

Introduction

Ce chapitre se consacre à une étude des concepts généraux et spécifiques en rapport avec notre sujet. Dans la première section de ce chapitre, nous présenterons quelques définitions des termes techniques liés au domaine étudié. Dans la deuxième section, nous présenterons les différents éléments (matériels et logiciels) de notre sujet d'étude.

2.1 Quelques Définitions

Raspberry Pi : Nano-ordinateur monocarte ayant la taille d'une carte de crédit, à processeur ARM conçu par le créateur de jeux vidéo David Braben, dans le cadre de sa fondation Raspberry Pi

Cluster : Se définit en informatique comme étant une grappe d'ordinateurs inter-connectés dans le but de mutualiser leurs ressources.(voir figure 2.1)

Cluster haute disponibilité : C'est un cluster dont le taux de disponibilité est proche de 99% 1.

Docker : Un Docker est une technologie permettant de créer des environnements virtuels appelés « containers » de manière à isoler les applications. Il permet d'automatiser le déploiement des applications en embarquant dans un container toutes les dépendances et outils nécessaires à l'exécution de l'application.

1. Taux proche des 99%, signifie que ce n'est qu'en cas de trouble majeur que le système sera indisponible

10 IAI Gabon

c~Tchuenché Rodrigue Élève Ingénieur En Informatique 10

FIGURE 2.1 - Schéma Architecture D'un Cluster

Docker Swarm : C'est un cluster sur les Docker.

Progiciel : Logiciel applicatif généraliste aux multiples fonctions, composé d'un ensemble de programmes paramétrables et destinés à être utilisés simultanément par plusieurs personnes.

ERP : ( Entreprise Ressource Planning) est un progiciel de gestion intégré servant à planifier les ressources en entreprise. 2

Odoo : C'est un progiciel de gestion intégré open-source comprenant de très nombreux modules permettant de simplifier la gestion d'entreprise dans son ensemble. 3

2.2 Etude de quelques concepts liés au sujet d'étude

2.2.1 Raspberry Pi

Comme nous l'avons défini plus haut, un Raspberry Pi est un nano-ordinateur de la taille d'une carte de crédit à processeur ARM 4. Son disque dur est une carte microSD d'au moins 8 Go et de la classe 6 au moins. Le Raspberry Pi a été crée au départ pour encourager la programmation en informatique. Il est vendu de nos jours à plus de 10 millions d'exemplaires.

2. Source : https://fr.wikipedia.org/wiki/Progiciel_de_gestion_intégré

3. Source : https://fr.wikipedia.org/wiki/Odoo

4. Les architectures ARM sont des architectures RISC 32 bits (ARMv1 à ARMv7) et 64 bits (ARMv8) développées par ARM Ltd depuis 1990 et introduites à partir de 1983 par Acorn Computers.

11 IAI Gabon

c~Tchuenché Rodrigue Élève Ingénieur En Informatique 11

Il est utilisé par des particuliers et des entreprises à des fins diverses au quotidien (Apprentissage, bureautiques, déploiement, etc...) . Il permet l'exécution de plusieurs variantes système d'exploitation GNU/Linux et Windows tel que:

· RASPBIAN OS

· UBUNTU MATE

· SNAPPY UBUNTU CORE

· PINET

· RISC OS

· WINDOWS 10 IOT CORE

· HYPRIOT OS

· ALPINE LINUX

· ARCH LINUX

· etc ...

La plupart de ces systèmes sont des systèmes dérivés des systèmes GNU/Linux comme Debian par exemple. Le Raspberry Pi est fourni nu, c'est-à-dire carte mère seule, sans boîtier, alimentation, clavier, souris ni écran, dans l'objectif de diminuer les coûts et de permettre l'utilisation de matériel de récupération. Son prix est estimé entre 5$ US (soit environ 5000 FCFA) à sa sortie en 2012 et 35$ US (soit 17.500 FCFA) de nos jours, selon les modèles. A l'heure actuelle il existe sept (07) modèles de Raspberry Pi à savoir les modèles A, A+, B, B+, 2B, 3B, Modèle Zéro. 5

2.2.1.1 Modèle A

Premier modèle du Raspberry pi, le modèle A a été mis sur le marché le 29 février 2012 avec un prix d'environ 25$ US (soit environ 12.500 FCFA). Il pèse 45g avec une taille de 85,6 mm de long, 53,98 mm de large et 17 mm d'épaisseur. Il a un processeur ARM11 (ARMv6) à 700 MHz; une mémoire RAM de 256 Mo; deux sorties vidéos, composite et HDMI; une sortie audio stéréo Jack 3,5 mm (sortie son 5.1 sur la prise HDMI); une unité de lecture - écriture de carte mémoire SD : SDHC / MMC / SDIO; un port USB 2.0; une prise d'alimentation Micro-USB avec une consommation de 400mA (1,5W); et des entrées/sorties directement accessibles sur la carte mère (voir figure 2.2).

2.2.1.2 Modèle A+

Ce modèle a presque les mêmes caractéristiques que le modèle A. Cependant, il a un prix qui est réduit jusqu'environ 20$ US (soit environ 10.000 FCFA) avec une taille de 65 mm de long et pèse 23g. Il a une sortie HDMI; une unité de lecture-écriture mémoire mircoSD au lieu de SD; GPIO 40 broches et une consommation en électricité de 200 mA (1W) (voir figure 2.3).

5. Source : https://fr.wikipedia.org/wiki/Raspberry_Pi

12 IAI Gabon

c~Tchuenché Rodrigue Élève Ingénieur En Informatique 12

FIGURE 2.2 - Une carte nue du Raspberry Pi modèle A

FIGURE 2.3 - Une carte nue du Raspberry Pi modèle A+

2.2.1.3 Modèle B

A la différence du modèle A, le modèle B contient deux ports USB 2.0, un port réseau Fast Ethernet (10/100Mbits/s) et une mémoire RAM de 512Mo. Il coûte environs 35$ US (soit environ 17.500 FCFA) avec un poids de 45g et une consommation de 700 mA (3,5W) (voir figure 2.4).

2.2.1.4 Modele B+

Ce modèle est apparu en juillet 2014 et a les mêmes caractéristiques que le modèle initial, c'est-à-dire le modèle B, à la différence qu'il contient quatre ports USB 2.0 et une réduction de la consommation de 3.5W à 3W (600mA); GPIO 40 broches. Il coûte environs 35$ US (soit

13 IAI Gabon

c~Tchuenché Rodrigue Élève Ingénieur En Informatique 13

FIGURE 2.4 - Une carte nue du Raspberry Pi modèle B

environ 17.500 FCFA) (voir figure 2.5).

FIGURE 2.5 - Une carte nue du Raspberry Pi modèle B+

2.2.1.5 Modèle 2B

Ce modèle sort le 2 février 2015, plus puissant, il est équipé d'un processeur Broadcom BCM2836, quatre coeurs ARMv7 à 900MHz, accompagné de 1 Go de RAM. Il possède les mêmes dimensions et connectiques que le modèle B.Il coûte environs 35$ US (soit environ 17.500 FCFA). (voir figure 2.6)

14 IAI Gabon

c~Tchuenché Rodrigue Élève Ingénieur En Informatique 14

FIGURE 2.6 - Une carte nue du Raspberry Pi 2 modèle B

2.2.1.6 Modèle 3B

Ce modèle apparait le 29 février 2016. Il coûte environs 35$ US (soit environ 17.500 FCFA). Il dispose d'un processeur Broadcom BCM2837 64 bit à quatre coeurs ARM Cortex-A53 à 1,2 GHz accompagné de 1 Go de RAM et d'une puce Wifi 802.11n et Bluetooth 4.1 intégrée. Il possède les mêmes dimensions et connectiques que les modèles 2B et B+. La vitesse d'horloge est 33% plus rapide que le Pi 2, ce qui permet d'avoir un gain d'environ 50-60% de performance en mode 32 bits. Il est recommandé d'utiliser un adaptateur de 2,5 A. Tous les travaux et tutoriels du Pi 2 sont parfaitement compatibles avec le Pi 3 (voir figure 2.7).

FIGURE 2.7 - Une carte nue du Raspberry Pi 3 modèle B

2.2.1.7 Modèle Zéro

Le 26 novembre 2015, la fondation Raspberry Pi annonce la sortie du Raspberry Pi Zero. Il reprend les spécifications du modèle A et B avec un processeur cadencé à 1 GHz au lieu de 700 MHz, il est par contre plus petit, disposant d'une connectique minimale. Son prix de 5$

15 IAI Gabon

c~Tchuenché Rodrigue Élève Ingénieur En Informatique 15

US (soit environ 2500 FCFA) est largement revu à la baisse par rapport aux autres Raspberry Pi (voir figure 2.8)

FIGURE 2.8 - Une carte nue du Raspberry Pi Zéro

Pour notre travail, nous avons utilisé le modèle 3B qui est actuellement le modèle le plus récent. Ce modèle nécessite une carte microSD d'au moins 8Go et d'une classe entre 6 et 10 d'une bonne marque pour préserver les performances en accès disque. Une image annoté de ce modèle est la suivante (voir figure 2.9) :

FIGURE 2.9 - Une carte annotée du Raspberry Pi 3 Modèle B

16 IAI Gabon

c~Tchuenché Rodrigue Élève Ingénieur En Informatique 16

2.2.2 Cluster

Le terme « cluster » (mot anglais signifiant groupe, grappe...), au sens employé ici est un ensemble de machines connectées d'une façon ou d'une autre pour distribuer une tâche très lourde entre ces différentes machines6.

En fonction de l'objectif à atteindre, un cluster peut être soit un ensemble d'ordinateurs mis en réseau dans le but de traiter une même tâche (par exemple le cumul de puissances des machines d'un cluster pour effectuer une tâche), soit un ensemble d'ordinateurs mis en réseau dans le but de repartir les tâches sur chaque noeud du cluster (par exemple un cluster de tâches systèmes allouera à chaque machine du cluster un ensemble de processus à traiter suivant sa charge et sa puissance de calcul).

Dans un cluster, les machines peuvent être de simples stations de travail ou des machines multiprocesseurs et sont appelées des noeuds. Lorsqu'il y'a besoin, la machine d'entrée sur le réseau sera appelée noeud serveur et se chargera de diviser la ou les tâches à travers tous les noeuds du cluster en prenant garde à ne pas surcharger la machine réceptrice.

Les clusters sont apparus au moment de la montée en puissance du prix des supercalculateurs alors que les microprocesseurs devenaient de plus en plus rapides et de moins en moins chers. À partir de la fin des années 1980, les ingénieurs ont commencé à développer ce qu'ils appelaient alors un « multi-ordinateur7 ». Toutefois, c'est le projet Beowulf mis au point par Goddard Space Flight Center de la NASA en 1994 dont le principe est de construire des clusters en parallèle sous GNU/LINUX avec du matériel commun (simples PCs), donc peu cher qui a véritablement lancé l'intérêt sur les clusters

La mise en cluster assure une disponibilité, c'est-à-dire lorsqu'un serveur tombe en panne alors qu'il est en train de traiter des requêtes, d'autres serveurs du cluster doivent pouvoir les traiter d'une manière aussi transparente que possible. Il assure aussi l'évolutivité c'est-à-dire la capacité d'une application à supporter un nombre important d'utilisateurs et la possibilité d'ajouter de nouveaux serveurs sans procéder à un arrêt du système.

Dans ce chapitre les différentes catégories de cluster et les architectures logicielles et matérielles des clusters seront présentées et aussi des solutions logicielles de clustering seront présentées

2.2.2.1 Catégories de clusters

Nous catégorisons les clusters en quatre groupes :

a) Cluster haute disponibilité

Ces types de clusters ont pour objectif de prévenir les situations où la défaillance d'un composant du cluster entraine l'indisponibilité du service. Dans le cas où un noeud a une défaillance quelconque, matérielle ou logicielle, les autres prennent en charge les groupes de ressource du noeud défaillant. Ainsi en une poignée de secondes les services de ce dernier sont pris en charge par les autres noeuds sans pour autant que l'utilisateur ne soit perturbé. Dans ce type de cluster le noeud chargé de l'exécution des requêtes, le noeud

6. Source : https://www.april.org/historique-et-fonctionnement-des-clusters-beowulf

7. relatif à un système en réseau basé sur plusieurs ordinateurs

17 IAI Gabon

c~Tchuenché Rodrigue Élève Ingénieur En Informatique 17

primaire, envoie périodiquement un signal qu'on appelle heartbeat8 aux noeuds chargés de la prise en charge des ressources du noeud défaillant, les noeuds secondaires, afin de les notifier sa présence. Dès que les noeuds secondaires ne reçoivent plus de heartbeat, ils déclarent le noeud primaire comme ne faisant plus partie du cluster et un des noeuds secondaires prend son identité complète.

En effet, le stockage des données étant redondant, le fonctionnement du cluster, l'assurance contre la perte de données et la disponibilité des ressources sont garantis à 99.9% pour ne pas dire 100% du temps. La figure ci-dessous représente un cluster haute disponibilité à 2 serveurs maitres et 3 serveurs esclaves. (voir figure 2.10)

FIGURE 2.10 - Cluster haute disponibilité

b) Clusters de répartition de charge

Ce type de cluster dispose d'un noeud spécial que l'on appelle noeud serveur qui a pour tâche de réceptionner les requêtes et de les répartir sur le noeud adéquat. Ce dernier est choisi en fonction de sa charge afin de traiter les requêtes de façon instantanée. Il peut aussi être choisi en fonction de sa spécialisation, c'est-à-dire que lui seul peut traiter la demande sur l'ensemble des noeuds du cluster. Toutefois, même si les noeuds du cluster n'utilisent pas les mêmes systèmes d'exploitation et les mêmes entrées sorties, il existe tout de même une relation commune entre eux, matérialisée sous la forme d'une communication directe entre les machines ou à travers un noeud serveur contrôlant la charge de chaque noeud. Pour pouvoir répondre à ce besoin de communication, ce type de cluster utilise des algorithmes spécifiques permettant de distribuer la charge. Ces types de clusters requièrent des applications qui ont pour but de déterminer lequel des noeuds du cluster pourra résoudre de nouvelles requêtes en examinant la charge courante de chaque noeud du cluster afin d'éviter la surcharge que peut subir les noeuds. Ce type de cluster est surtout utilisé dans le domaine du réseau et plus particulièrement sur les services comme les serveurs Web et FTP. (voir figure 2.11)

c) Clusters de calculs haute performance

C'est un système considéré de l'extérieur comme étant une machine multiprocesseur dont les noeuds cumulent leurs puissances de calcul pour arriver à des performances égales à celles qu'atteignent les supers calculateurs. Ce cluster utilise des applications spécialisées dans la parallélisation de calcul à travers une couche de communication commune. A la place, un administrateur pourra utiliser le Direct Memory Acces (DMA, similaire à celui utilisé par certains périphériques d'un PC) à travers ses noeuds, qui fonctionne comme une forme de mémoire partagée accessible par l'ensemble des processeurs du système. Il

8. Battement de coeur.

18 IAI Gabon

c~Tchuenché Rodrigue Élève Ingénieur En Informatique 18

FIGURE 2.11 - Cluster répartition de charges

pourra aussi utiliser un système de communication dit de low-overhead comme Message Passing Interface (MPI), qui est une API (Application Program Interface) pour dévelop-peurs d'applications de calculs parallèles . (voir figure 2.12)

FIGURE 2.12 - Cluster calcul haute performance

d) Clusters de stockage

Ce type de système est comparable au cluster scientifique, mais ici ce n'est pas la puissance de calcul qui est recherchée mais plutôt la puissance de stockage. Sa mise en place est partie d'un constat que les entreprises utilisaient de plus en plus d'applications performantes utilisant des flux de données conséquents et donc nécessitant une capacité de stockage supérieure à celle d'un seul disque dur. Ce problème a pu être contourné grâce à une vaste capacité de stockage qu'offre ce système. Les fichiers sont découpés en bloc de

9. http://www-igm.univ-mlv.fr/~dr/XPOSE2006/BACHIMONT_BRUNET_PIASZCZYNKSI/index.htm

19 IAI Gabon

c~Tchuenché Rodrigue Élève Ingénieur En Informatique 19

taille raisonnable et stockés par morceau sur plusieurs disques, ainsi on a l'impression que l'espace de stockage ne fait qu'un et que nos fichiers sont stockés en un seul morceau sur un "disque". Il s'agit pour ce type de cluster d'utiliser le potentiel des systèmes dits de "stockage combiné", c'est à dire qu'il distribue les données par l'entremise de plusieurs disques répartis sur les noeuds du cluster. Ainsi, tout utilisateur aura le loisir de travailler avec des fichiers de très grandes tailles, tout en minimisant les transferts. (voir figure 2.13)

FIGURE 2.13 - Cluster de stockage

NB : Pour notre travail, nous allons utiliser un cluster de haute disponibilité couplé à un cluster de répartition de charge.

2.2.2.2 Architecture des Clusters

a) Architecture Matériel

Il n'existe pas de modèle de référence pour l'architecture matérielle des clusters, mais la plupart des constructeurs comme IBM, SUN, Hewlet Packard, Compaq et bien d'autres possèdent leur propre solution issue de leurs recherches. Néanmoins pour répondre à la problématique que posent les clusters concernant l'architecture, c'est à-dire que la répartition des calculs entre les machines doit être la moins couteuse possible, deux architectures sont possibles.

* Maitre - Esclave : cette architecture est composée d'un noeud serveur appelé noeud maitre et des noeuds esclaves. Le noeud maitre peut être considéré comme l'organisateur du cluster. Il maintient le système de fichiers et garde une trace de toutes modifications de leurs propriétés, contrôle l'exécution des opérations d'entrées/sor-ties des noeuds clients, gère la configuration du cluster, enregistre les métadonnées de tous les fichiers enregistrés dans le cluster, comme par exemple l'emplacement, la taille, les permissions... Il reçoit également des messages des autres noeuds du cluster afin d'assurer qu'ils fonctionnent correctement, en cas de défaillance, il choisit un nouveau noeud client pour exécuter les requêtes du noeud défaillant. A chaque fois qu'un client externe doit lire ou écrire des données il communique avec le noeud

20 IAI Gabon

c~Tchuenché Rodrigue Élève Ingénieur En Informatique 20

serveur lequel répond à sa demande. Les noeuds clients exécutent les opérations demandées par le noeud serveur.

* Mono niveau (pair à pair) : ce type d'architecture permet de mettre en commun un groupe d'ordinateurs pour fournir un service même en cas défaillance d'un des composants système. Quand une machine tombe, les autres prennent la relève et les nouvelles tâches parviennent à la machine qui a pris la relève. Dans cette architecture seul un noeud, le maître, peut gérer les ressources à un instant t et les autres noeuds, esclaves, disposent d'un système de contrôle qu'on appelle «heartbeat» 10. Quand le maître n'envoie pas de «heartbeat» pendant une période de temps, les esclaves détectent cela et assument une défaillance et on procède à une réélection du maître. Un des esclaves devient maître, les services sont de nouveau alloués sur ce noeud. Cette procédure s'appelle le «failover» 11. Le «failover» est donc la capacité d'un équipement à basculer automatiquement vers un chemin réseau redondant ou en veille.

Le choix d'une architecture est fortement lié à l'application du cluster utilisé même si le modèle le plus répandu est le Maitre-Esclave. Le stockage de toutes les ressources publiables, fichiers de données, files d'impression, applications, ressources, et services se font sur les disques partagés. Il est nécessaire de partager les disques sur un bus, il y a deux méthodes d'implémentation pour le partage des disques sur un bus, la technologie SCSI et la technologie Fibre Channel sur un système SAN (Storage Area Network).

b) Architecture Logiciel

Tout comme l'architecture matérielle, il n'existe pas de modèle de référence pour l'architecture logicielle, mais toutefois, il nous faut disposer de deux choses essentielles : un système d'exploitation et une API (Application Program Interface) de parallélisations. Ensuite, les choix s'orienteront vers les préférences de la personne qui installe le système.

Il existe des systèmes d'exploitation dédiés au clustering. Ces systèmes gèrent eux mêmes les échanges réseaux et peuvent dans certains cas découper les applications afin de les répartir sur le cluster. Ils permettent de lancer des applications qui ne sont pas développées à la base pour du clustering, mais pour une utilisation optimale, l'utilisation de librairies dédiées au clustering est recommandée.

Ainsi il existe des systèmes ou des extensions systèmes pour tous les environnements comme Linux-Unix, BSD 12, Mac OS et Windows. Néanmoins, pour monter un cluster performant, il est tout de même préférable d'utiliser des systèmes d'exploitation ayant une couche TCP/IP bien développée et sans faille.

Parmi ces systèmes d'exploitation nous pouvons d'abord citer Beowulf11 qui est un système conçu par la NASA permettant à partir de librairie de créer et d'utiliser des applications de calculs répartis, Mosix qui est un système développé par l'université de Jérusalem permettant de découper une application pour la lancer sur un cluster et OpenMosix est une version open-source de Mosix. Ces systèmes sont pour l'environnement Linux-Unix. Ensuite pour l'environnement Mac OS nous pouvons citer Xgrid qui est une surcouche à MacOS développé par la Apple's Advanced Computation Group qui propose une API permettant à un groupe d'ordinateurs en réseau d'effectuer des calculs répartis. Xgrid est

10. Battement de coeur: envoi de signal entre les noeuds.

11. groupe de serveurs qui travaillent ensemble pour maintenir une haute disponibilité des applications et des services

12. Berkeley Software Distribution (BSD, parfois appelée Berkeley Unix) : une famille de systèmes d'exploitation dérivée d'Unix.

21 IAI Gabon

c~Tchuenché Rodrigue Élève Ingénieur En Informatique 21

livré par défaut depuis Tiger 13.

Enfin pour l'environnement Windows nous pouvons citer Windows 2003 cluster server R2 qui est une extension pour Windows 2003 server. Son gros défaut est que cette solution repose sur un OS peu adapté au clustering. En effet, la présence d'une interface graphique lourde ralentit considérablement les performances. Puis pour BSD, nous pouvons citer Mosix qui est le portage de Mosix sous BSD.

Pour ce qui est des API il existe de nombreuses librairies permettant de créer des applications réparties. Certaines sont dédiées aux communications réseaux comme MPI (Message Passing Interface) et d'autres permettent de transformer un ensemble de machines en une seule comme PVM (Parallele Virtual Machine). PVM possède un environnement de contrôle permettant de rendre le lancement d'une application de manière identique sur tous les noeuds du système. Il est plutôt orienté vers les réseaux hétérogènes, c'est à dire que les noeuds du cluster peuvent être de type différent (PC Linux, PC Windows...).

MPI emploie des fonctionnalités intéressantes (comme le RMA, Remote Memory Access, ou le système d'entrée sortie parallèle), mais nécessite un apprentissage de MPI identique à celui d'un nouveau langage de programmation. Même si PVM semble mieux répondre aux contraintes d'un cluster et de son matériel, il faut tout de même savoir que certains inconvénients viennent s'incruster dans les rouages de PVM. En effet, les applications l'utilisant doivent obligatoirement être compilées avec les bibliothèques PVM. Ceci implique donc une recompilation quasi obligatoire des logiciels déjà existants. De plus, MPI a été développé après PVM et s'en est inspiré. Ainsi, MPI répond mieux aux contraintes liées à la gestion des buffers, des structures de données... En fait cela sera à vous de choisir l'API répondant encore une fois au mieux à vos attentes et vos besoins.

En plus du système d'exploitation et de l'API on peut citer le BIOS (Basic Input/Output System) qui gère l'entrée et la sortie des données et les échanges avec les périphériques. A l'heure actuelle aucun cluster ne travaille à ce niveau pour la gestion des calculs. Néanmoins le BIOS est utilisé pour accélérer les échanges réseaux entre les noeuds.

2.2.3 Les Dockers

Docker, l'une des technologies les plus importantes du moment est un produit développé par la société du même nom Docker inc basé au USA. Initialement développé par un ingénieur français, Solomon Hykes 14, le produit a été dévoilé en mars 2013. Depuis cette date, Docker est devenu le soft à la mode. Son potentiel révolutionne notre façon de construire, de déployer et

13. Cinquième version majeure de Mac OS X, le système d'exploitation d'Apple pour les ordinateurs Macintosh

14. Solomon Hykes, né à New York en 1983, est un créateur d'entreprises franco-américain, vivant dans la Silicon Valley, et le créateur d'un concept à l'origine d'un ensemble de logiciels, Docker

22 IAI Gabon

c~Tchuenché Rodrigue Élève Ingénieur En Informatique 22

de distribuer les applications. Les environnements de développement sont souvent compliqués, difficile de garder la cohérence entre les différents membres de l'équipe. Une solution possible est de construire des machines virtuelles pré-configurées disponibles pour toute l'équipe. Docker peut sur ce point apporter des solutions en terme de rapidité et de légèreté par rapport aux VM.

2.2.3.1 C'est quoi un Docker?

Docker permet de créer des environnements virtuels appelés « containers » de manière à isoler les applications. Docker n'est pas une machine virtuelle (VM) à proprement parler, il repose sur le noyau Linux et sur une fonctionnalité : les containers, que nous connaissons sur le nom de LXC 15. En plus du LXC linux, un troisième composant est requis, cgroups16 qui va avoir pour objectif de gérer les ressources (utilisation de la RAM, CPU entre autres).

Bien que utilisant LXC et le cgroup qui sont natifs à linux, l'équipe de Docker inc a récemment mis en oeuvre une version Docker pour les systèmes Windows plus précisément à partir de Windows Server 2016. Docker est donc disponible pour la plus part des OS : Linux, Windows, Mac OS X pour les processeurs Intel et AMD x86, x64 et les processeurs ARM (comme le cas du Raspberry Pi que nous utilisons dans notre étude).

2.2.3.2 Difference entre Docker et Machine Virtuelle (VM)

Docker ne se comporte pas de la même manière qu'une machine virtuelle, Une Machine Virtuelle isole tout un système (son OS), et dispose de ses propres ressources. Dans le cas du Docker, le noyau va partager les ressources du système hôte et interagir avec le(s) container(s). Le Docker partage le noyau Linux de la machine hôte et «isole» les processus qui sont exécutés à l'intérieur du container. On n'a donc pas besoin de la couche Operating System complète comme dans une VM ce qui rend un Docker très léger, très maniable et facilement voyageable dans un environnement de cloud computing.(voir figure 2.14)

2.2.3.3 Environnement et notions de base Docker

Trois éléments essentiels forment les bases de la philosophie d'un Docker :

* Docker Image : c'est un template qui va servir directement ou indirectement à produire d'autres Docker Image ou des Docker containers.

* Docker Containers : c'est «l'exécutable» obtenu à partir d'une Docker Image. On peut le démarrer, l'arrêter ou le détruire.

* Docker Registry ou Docker Hub : c'est le repository des Docker Images. On peut y télécharger des Docker Images créé par d'autres mais également y stocker les siennes.

15. LXC, Linux containers est un système de virtualisation, utilisant l'isolation comme méthode de cloisonnement au niveau du système d'exploitation.

16. cgroups (control groups) est une fonctionnalité du noyau Linux pour limiter, compter et isoler l'utilisa-tion des ressources (processeur, mémoire, utilisation disque, etc.).

23 IAI Gabon

c~Tchuenché Rodrigue Élève Ingénieur En Informatique 23

FIGURE 2.14 - Machine Virtuelle Vs Docker

2.2.4 ERP Odoo

Fondé en 2005 en Belgique par Fabien Pinckaers 17, Odoo (OpenERP) est l'ERP open source le plus téléchargé au monde avec 2 millions d'utilisateurs. Depuis mai 2014, la suite d'applications de gestion d'entreprise est rebaptisée Odoo. Cette suite d'application permet aux entreprises de disposer d'une solution intégrée pour gérer les principales fonctions de l'entreprise. Son interface 100% Web et adaptative, ses fonctions adaptées à l'entreprise en réseau en font l'un des ERP les plus moderne et performant du marché18

Odoo existe en version Communautaire sous licence LGPLv3 et en version Enterprise sous licence propriétaire Odoo Enterprise Edition Licence v1.0 19.

2.2.4.1 Historique

Odoo depuis son lancement en 2005 est passé par plusieurs versions et a changé de nom plusieurs fois. Le 20 janvier 2011, OpenERP SA annonçait le lancement de la version 6.0 du logiciel, qui comprend une version à la demande (SaaS). Son approche modulaire permet aux utilisateurs de commencer avec une application, puis d'ajouter d'autres modules selon leurs besoins.

En décembre 2012, la version 7.0 d'OpenERP est lancée et peut être testée en ligne, télé-chargée ou vue en version de démonstration.

En Mai 2014 : OpenERP change de nom et devient Odoo.

Été 2014, Odoo lance la version 8. Cette version enrichit principalement le logiciel de nou-

17. Fabien Pinckaers, CEO Fondateur et chef visionnaire d'Odoo, Fabien est la force tranquille derrière Odoo. Il touche à tout : aux développements du logiciel, au marketing jusqu'aux stratégies liées à l'expérience client.

18. Source : http://www.audaxis.com/Odoo-OpenERP

19. Source : https://fr.wikipedia.org/wiki/Odoo

24 IAI Gabon

c~Tchuenché Rodrigue Élève Ingénieur En Informatique 24

velles applications qui font de Odoo un logiciel allant au delà d'un ERP. Ces applications sont: marketing (gestion d'événements, d'enquêtes de satisfactions, campagnes de mails auprès de la CRM,...), CMS (construction d'un site internet - front-end lié au back-end - grâce au déplacement rapide et simple de 'blocs" d'éditions), e-commerce (application pour vente en ligne). ci-dessous un tableau récapitulatif:

Nom du Logiciel

Version

Date Lancement

Changements significatifs

Tiny ERP

1.0

Février 2005

Première publication

2.0

Mars 2005

 

3.0

Septembre 2005

 

4.0

Décembre 2006

 

OpenERP

5.0

 
 

6.0

Octobre 2009

Première Publication sous AGPL

6.1

 
 

7.0

Décembre 2012

Fin de support prévu Octobre 2016

Odoo

8.0

Septembre 2014

Support pour le CMS : Construction de site internet,

e-commerce, point de vente, vente et business intelligence

9.0

Novembre 2015

Première publication des éditions Community sous licence LGPLV3 et Enterprise sous licence propriétaire.

10.0

 
 

TABLE 2.1 - Tableau récapitulatif version Odoo

2.2.4.2 Principaux Modules Applicatifs du logiciel Odoo

Depuis sa verson v8, Odoo permet les applications logiciels suivantes :

Principales applications logicielles front office

* Créateur de site web et système de gestion de son contenu, CMS

* Vente en ligne, e-commerce

* Interface de point de vente (PDV)

Principales applications logicielles back-office

* Gestion de relation clients (CRM et SRM (en))

* Gestion des ventes

* Gestion de production

* Gestion de projets

* Gestion des stocks

* Gestion des ressources humaines

* Gestion des achats

* Gestion logistique

* Gestion de manufactures

25 IAI Gabon

c~Tchuenché Rodrigue Élève Ingénieur En Informatique 25

* Gestion comptable

* Gestion des dépenses

* Gestion des documents

* Générateur de factures

* Gestion et outils marketing

Modules d'Odoo

L'aspect libre du logiciel a permis le développement de nombreux modules tiers créés par sa communauté de développeurs. Ces applications sont pour certaines officiellement validées par l'éditeur tandis que d'autres ne sont destinées qu'à des versions spécifiques. Le logiciel compte près de 260 modules officiels et environ 4000 modules communautaires.

2.2.4.3 Architecture Logiciel d'Odoo

Odoo est concu selon une architecture MVC (Modèle - Vue - Contrôleur), des flux de travail flexibles, une interface-utilisateur graphique dynamique, une interface de communication interne XML-RPC, et un système personnalisable de comptes-rendus.

D'un point de vue de l'architecture technique, Odoo est construit autour de trois composants principaux qui communiquent entre eux par les protocoles XML-RPC et NET-RPC:

1. le serveur odoo-server qui stocke ses données dans une base PostgreSQL.

2. le client odoo mobile (anciennement odoo-client abandonné depuis la v7) qui s'installe sur le terminal de l'utilisateur.

3. le serveur web odoo-web qui permet une utilisation depuis un navigateur.

CONCLUSION

Tout au long de cette première partie, nous avons essayé de mettre au point le cadre général de notre travail. Nous avons tout d'abord présenté l'organisme d'accueil qui s'avère être un élément fondamental dans l'environnement du projet et ensuite, une étude des concepts liés au projet a été abordée. Bien plus, nous avons examiné attentivement le domaine spécifique et technique autour duquel tourne notre projet. À ce stade, nous avons fourni tout le cadre théorique sur lequel, va s'appuyer la partie destinée à la conception et à l'implémentation de notre solution. La deuxième partie sera donc consacrée à l'aspect pratique de la réalisation du travail demandé.

26

Deuxième partie

CONCEPTION, IMPLÉMENTATION

ET ÉTUDE DE LA SOLUTION À

PROPOSER

27 IAI Gabon

c~Tchuenché Rodrigue Élève Ingénieur En Informatique 27

INTRODUCTION

Après avoir circonscrit le sujet dans son contexte ainsi que le champ d'étude du projet dans la première partie, La deuxième partie présente l'aspect technique de la solution proposée. À l'entame de cette partie, le chapitre 3 présente l'analyse et la conception de notre solution. Nous poursuivons dans le chapitre 4, avec l'implémentation de notre solution et dans le chapitre 5 avec l'étude de notre solution en vue de vérifier si les objectifs ont été atteint. À l'issue de cette partie, nous pourrons déjà faire tourner notre solution.

Chapitre3

ANALYSE ET CONCEPTION

28

Introduction

Notre travail d'Analyse et de Conception se fera en trois phases. Dans la première phase nous ferons un état de l'art des solutions logicielles de clustering existantes et ceux fonctionnant sur Raspberry pi vu que c'est avec ces nano-ordinateurs que nous implémenterons notre solution et nous finirons par une analyse. Dans la seconde phase nous étudierons des différentes techniques de clustering et la troisième phase sera consacrée à la conception de notre architecture de cluster.

3.1 Solution logicielle de Cluster

Il existe plusieurs solutions sur le marché pour mettre en place un cluster pour différents systèmes d'exploitation populaires. La plupart de ces solutions sont commerciales, elles ont un coût non négligeable dû aux prix des licences logiciels et au prix du support technique. Ces solutions sont proposées par des sociétés de prestations en informatique comme Microsoft, IBM, SUN, Google, Compaq... Il existe aussi des solutions gratuites, à base de logiciels "libres". Le choix se fera donc en fonction du support technique voulu et du budget disponible.

3.1.1 Microsoft Cluster / Cluster pour système Windows

Microsoft propose une solution pour mettre en place un cluster constitué de serveurs Microsoft. Pour cela deux types de clustering sont proposés, il s'agit de clustering de service ou cluster de Haute Disponibilité qui consiste à réaliser des clusters d'application et de rendu de

29 IAI Gabon

c~Tchuenché Rodrigue Élève Ingénieur En Informatique 29

service et le clustering à répartition de charge qui garantit une répartition de charge réseau sur des flux IP à travers un cluster constitué de 32 noeuds au maximum. A travers ses solutions, Microsoft a implémenté des technologies de clustering permettant d'améliorer et d'accélérer le travail quotidien des employés des entreprises désireuses d'améliorer leur production mais aussi permettant de réaliser du commerce avec un plus grand nombre de clients.

3.1.1.1 Microsoft Cluster Server (MSCS)

Microsoft Cluster Server est un programme informatique qui permet aux ordinateurs serveurs de travailler ensemble comme une grappe d'ordinateurs, afin de fournir le basculement et la disponibilité accrue des applications, ou une puissance de calcul parallèle en cas de grappes de calcul haute performance (HPC) (comme dans le calcul intensif). Microsoft a trois technologies pour le clustering :

1. Microsoft Cluster Service MSCS

Le service MSCS fournit une haute disponibilité pour les applications critiques, telles que

les bases de données, les serveurs de messagerie, serveur de fichier et d'impression.

2. Network Load Balancing (NLB)

NLB permet d'équilibrer le trafic IP entrant. Il joue un rôle de répartition des connexions IP et requêtes distantes, de répartition de la charge et bande passante sur les noeuds et de connexion au site web. Les connexions entrantes sont reparties entre les noeuds à travers différentes règles établies. Ces noeuds peuvent aller jusqu'au nombre de 32 pour la charge IP en mode NLB. Ce service augmente la disponibilité et la montée en charge des applications serveur basées sur l'accès Internet, tels que des serveurs WEB, des serveurs médias streaming, serveurs Windows Terminal Server ou autres.

3. Component Load Balancing (CLB)

Équilibrage de Composants, ce type de clustering permet d'équilibrer les Composants, le service CLB est intégré à l'Application Center 2000(ou versions antérieures), il permet aussi de répartir la charge sur plusieurs noeuds du cluster, pour les applications basées sur la technologie des objets COM et COM+, une mise à jour pour les objets WMI et la gestion du Framework.NET est désormais disponible. On parle de clustering d'application dit clustering de puissance.

3.1.1.2 Evidian Safekit

Evidian Safekit est un logiciel de haute disponibilité avec Réplication temps réel, partage de charge et reprise sur panne pour le clustering. Il est développé par la société Evidian 1. Le logiciel SafeKit permet de construire un cluster actif-passif avec failover applicatif et réplication de données temps réel et continue des données. Le cluster actif-passif de SafeKit apporte une solution simple à la haute disponibilité d'applications base de données critiques sur Windows, Linux ou AIX (même Windows 7 et 8). SafeKit implémente une réplication continue synchrone

1. Evidian IAM est le leader européen des logiciels de gestion des identités et des accès, avec une présence en pleine croissance en dehors du continent européen et notamment aux Etats-Unis et au Japon

30 IAI Gabon

c~Tchuenché Rodrigue Élève Ingénieur En Informatique 30

comme les SAN miroirs répliqués mais sans le coût et la complexité des clusters de failover matériel.

Le cluster actif-passif est une architecture de haute disponibilité de type miroir. L'application est exécutée sur un serveur primaire et redémarrée automatiquement sur un serveur secondaire si le serveur primaire est défaillant.

La réplication des données est configurée avec les répertoires de fichiers à répliquer. Les répertoires peuvent contenir des bases de données ou des fichiers plats. Avec sa fonction de réplication de données temps réel synchrone, cette architecture est particulièrement adaptée aux applications transactionnelles avec des données critiques à protéger contre les pannes. 2

3.1.2 Cluster GNU/Linux

Linux est l'alternative de tous ces clusters chers grâce à sa gratuité. Grace à lui, vous êtes capables de mettre en place un cluster répondant à toutes les attentes que vous pouvez vous formuler. Pour cela, il suffit de posséder quelques machines, une distribution linux et quelques logiciels permettant de réaliser la parallélisation des noeuds du cluster. Beaucoup de projets de clustering sont mis en oeuvre sous Linux à savoir ces quelques exemples que nous allons citer ci-après :

3.1.2.1 Linux Virtuel Server (LVS)

Ce projet consiste à mettre en place un cluster à répartition de charge. Son principe est de mettre en grappe des serveurs et à orchestrer les répartitions de charges par un noeud serveur qu'on appelle load-balanceur (répartiteur de charge). Il est implémenté sous forme de patchs applicables au noyau Linux, et permet alors à des applications réseaux comme les serveurs WEB de fonctionner sur des clusters acceptant plus de connections.

3.1.2.2 Beowulf

Il s'agit de l'un des projets les plus connus du monde Linux et le plus utilisé. Il met en place un clustering scientifique par le biais du système d'exploitation Linux. Le principe est de mettre en place un système où l'ensemble des noeuds cumulent leur puissance pour fonctionner comme une seule machine. Ainsi les requêtes envoyées par les clients externes seront traitées en fonction de la charge et de la disponibilité de chaque noeud. Beowulf n'est rien d'autre qu'un

2. Source : http://www.evidian.com/fr/

31 IAI Gabon

c~Tchuenché Rodrigue Élève Ingénieur En Informatique 31

package d'outils qui fonctionne sur le noyau linux.

3.1.2.3 Linux HA-Project

Il s'agit d'un projet de clustering qui permet de mettre en place un système à haute disponibilité. Ce système est constitué d'applications permettant de maintenir l'envoi de signaux qu'on appelle heartbeat entre les différents noeuds. Dans le cas où un noeud n'émet plus de signal, l'application donne les taches de ce dernier à un autre noeud. Le principal inconvénient vient du fait qu'il faut bien dimensionner son signal de heartbeat, ceci afin d'éviter de trop longs moments d'inactivité d'un service en cas de panne du serveur, ou bien d'éviter de polluer le réseau par des signaux intempestifs apparaissant trop souvent. 3

3.1.2.4 Multicomputer Operating System for Unix (MOSIX)

MOSIX est un système de gestion de clusters Linux et de grilles organisationnelles qui fournit une Single-system image (SSI), c'est-à-dire l'équivalent d'un système d'exploitation pour un cluster dans son ensemble. Il s'agit d'un cluster à répartition de charge développé pour le monde Unix et les ordinateurs spécialisés. Le but de ce projet est de fournir un système de clustering, à travers Linux, agissant comme une simple machine, vu de l'extérieur, c'est à dire vu des utilisateurs et des processus. Il existe une version "fork" de MOSIX, openMOSIX qui est une version free open source de MOSIX. il a été initié après l'arrêt du développement de MOSIX en source libre.4

3.1.2.5 Apache Mesos

Apache Mesos est un gestionnaire de cluster open-source qui a été développé à l'Université de Californie, Berkeley. Il fournit une isolation efficace des ressources et le partage entre les applications distribuées, ou des frameworks.Le logiciel permet le partage des ressources d'une manière fine et améliore l'utilisation du cluster. Apache Mesos tourne bien sur les systèmes Linux, Mac OS et Windows. il existe aussi une version pouvant tourner sur un nano-ordinateur Raspberry Pi.5

3.1.2.6 Cluster Docker Swarm

Swarm permet la gestion d'un cluster de serveurs Docker. Il exporte les API standards de Docker mises à l'échelle du cluster et permet de gérer l'ordonnancement des tâches et l'allocation de ressources par container au sein du pool de ressources machines. Là où cela devient très intéressant, c'est que Swarm permet de gérer le cluster comme une seule et unique machine Docker. Swarm existe en version Linux, Mac OS et Windows. il existe aussi une version pouvant

3. Source : http://www.linux-ha.org/wiki/Main_Page

4. Source : https://fr.wikipedia.org/wiki/MOSIX

5. Source : http://mesos.apache.org/documentation/latest/index.html

32 IAI Gabon

c~Tchuenché Rodrigue Élève Ingénieur En Informatique 32

tourner sur un nano-ordinateur Raspberry Pi à travers certains système d'exploitation conçu à cet effet.

3.2 Analyse Des Solutions

De toutes ces panoplies de solutions citées plus haut, nous devons combiner une solution en tenant compte des différentes contraintes liées au cluster que nous voulons implémenter et des applications à déployer sur ce cluster.

En effet, nous devons monter un cluster low-cost consommant moins d'énergie haute disponibilité basé sur Raspberry Pi 3 et ensuite trouver un moyen de faciliter le déploiement et la gestion des applications sur ce cluster. Le principal inconvénient d'un Raspberry Pi est son processeur qui est ARM. Ce qui le rend généralement moins puissant comparé au processeur Intel ou AMD des serveurs standards. Sur le Raspberry Pi, peut tourner les systèmes d'exploitation dérivés de Linux conçu pour processeur ARM.

Un Raspberry à lui seul n'est pas assez puissant pour supporter la charge des requêtes serveurs. Nous allons ainsi implémenter un cluster haute disponibilité couplé à cela un cluster de répartition de charge. Sur chaque noeud (Raspberry Pi) du cluster nous allons installer et configurer Docker pour faciliter le déploiement des applications et par la suite couplé au cluster deja existant un cluster pour la gestion des Docker "Cluster Docker Swarm".

Le processeur ARM des Raspberry ne nous permet pas d'utiliser les cluster Microsoft qui tournent sur processeur Intel ou AMD. Implémentant une solution low-cost, nous privilégions les solutions cluster gratuites et pouvant tourner sur un système Linux conçu pour processeur ARM.

3.3 Concepts de répartition de charge réseau (Load Balancing)

3.3.1 Présentation

Après avoir fait l'analyse et adopté les types de cluster à implémenter,avant de passer à la phase de conception il est important pour nous de maitriser le fonctionnement de certains concepts comme le Load Balancing entre les noeuds du cluster.

Une fois le cluster monté, une montée en charge équivalente au nombre grandissant d'utilisateur se fera ressentir. Pour assurer cette montée en charge plusieurs méthodes peuvent être envisageables :

* Augmenter la puissance de traitement des noeuds : cette méthode n'est pas faisable dans notre cas, car un raspberry pi tel qu'il est fourni après fabrication ne peut pas excéder sa puissance nominale. A part sa capacité de stockage que l'on peut augmenter à souhait.

* Équilibrer les charges à travers différents noeuds du cluster : cette méthode consiste à augmenter le nombre de noeuds exécutant les services en utilisant un processus

33 IAI Gabon

c~Tchuenché Rodrigue Élève Ingénieur En Informatique 33

permettant l'équilibrage de la charge de travail. c'est cette méthode que nous allons prévoir pour notre cluster.

Pour repartir les charges dans un cluster ou un réseau d'ordinateurs, plusieurs technologies existent :

· Le tourniquet DNS (Round robin) : Permet d'inscrire dans le DNS plusieurs adresses IP pour un même nom d'hôte. Une fois cette fonction activée, le serveur DNS va séquen-tiellement renvoyer aux clients faisant une demande de résolution de nom sur cet hôte une adresse réseau différente.

· La répartition de charge matérielle : Fonctionnant sur une base de NAT inversée, le principe est d'envoyer tous les flux réseaux vers une IP virtuelle qui va se charger via une translation d'adresse de rediriger les données vers un membre du cluster.

· Logiciel de distribution de charge réseau : Ce logiciel prend en charge la répartition du flux entrant vers les différentes machines du cluster.

· Répartition de charge réseau : La répartition de charge (NLB) est un système logiciel distribué et redondant permettant de répartir la charge sur une ferme de serveur 6. Il ne nécessite pas de répartiteur car l'ensemble des membres de la ferme du cluster reçoit les données.

Ci dessous une petite comparaison croisée des quatre technologies de répartition de charge :

 

Round Robin

Hardware

Dispatch

NLB

Facilité D'installation

oui

 
 

oui

Matériel Nécessaire

 

oui

 
 

Point De Cassure Unique

 

oui

oui

 

Montage En Charge Facilité

oui

limitée

limitée

oui

Haute Performance

oui

limitée

limitée

oui

Tolérance aux pannes

non

limitée

limitée

oui

 

3.3.2 Logiciels de distribution de charge réseau et haute Disponibilité du cluster

Pour gérer le Load Balancing de notre cluster, nous allons utiliser un logiciel de distribution de charge réseau. Nous nous servirons du logiciel Haproxy pour le Load Balancing et nous allons coupler à ce logiciel le logiciel Heartbeat pour garantir la haute disponibilité du cluster.

3.3.2.1 HAProxy

HAProxy est une application gratuite permettant de faire du load-balancing, de la haute disponibilité ainsi que du proxying TCP & HTTP.

HAProxy est réputé pour être stable, très fiable, avec de bonnes performances grâce à sa maturité (douze ans d'existence). L'intérêt d'utiliser HAProxy, plutôt qu'un des nombreux

6. Une ferme de serveur désigne l'ensemble des noeuds composant un cluster

34 IAI Gabon

c~Tchuenché Rodrigue Élève Ingénieur En Informatique 34

35 IAI Gabon

autres reverse proxy ( Nginx, Squid, LYS .. ) est qu'il apporte des fonctionnalités très avancées, comme le filtrage niveau 7 ( OSI ). HAProxy est disponible pour les systèmes Linux et Solaris. Il est à sa version 1.7 de nos jours.

Un serveur HAProxy a pour fonction première le Load-Balancing (répartition des charges) entre plusieurs serveurs web. Ainsi, en ne joignant qu'une seule IP (celle du serveur HAProxy) nous tomberont sur des serveurs web différents mais à contenu identique. Le but est donc de répartir les charges d'un seul serveur web sur deux ou plusieurs autres de façon transparente pour l'utilisateur. Ce serveur particulier, appelé " l'équilibreur de charge" (le load-balancer aussi appelé le "director") est placé entre les clients et les noeuds du cluster. Son rôle consiste à aiguiller les requêtes du client vers un noeud particulier.

FIGURE 3.1 - Architecture Haproxy

3.3.2.2 Heartbeat

Pour gérer la haute disponibilité du cluster, nous allons coupler à HAProxy le logiciel heartbeat. Heartbeat est un logiciel de surveillance de la disponibilité des programmes, pour les systèmes d'exploitation Linux, FreeBSD, OpenBSD, Solaris et MacOS X. Il est distribué sous licence GPL.

Heartbeat écoute les battements de coeur - des signaux émis par les services d'une grappe de serveurs lorsqu'ils sont opérationnels. Il exécute des scripts d'initialisations lorsqu'une machine tombe (plus d'entente du battement de coeur) ou est à nouveau disponible. Il permet aussi de changer d'adresse IP entre les deux machines à l'aide de mécanismes ARP avancés. Heartbeat fonctionne à partir de deux machines et peut être mis en place pour des architectures réseaux plus complexes. ' Les « battements de coeurs » peuvent être prévus de différentes façons :

-- Connexion par port série

-- Connexion ethernet UDP/IP broadcast -- Unicast

7. Source : https://fr.wikipedia.org/wiki/Heartbeat_(logiciel)

c~Tchuenché Rodrigue Élève Ingénieur En Informatique 35

-- ping (pour des routeurs, commutateur réseau, etc.)

Dans le schéma HAProxy standard, si le serveur HAProxy (Load Balancer) tombe en panne, le cluster devient indisponible. Le principe consiste donc à prévoir au moins deux serveurs HAProxy (Load balancer) redondants tel que à un moment donné, un seul soit actif et les autres passifs. Heartbeat permet ainsi de vérifier et de synchroniser les Load Balancer de façon à ce que dès que le serveur actif tombe en panne (n'est plus disponible) un des Load Balancer passif prend le relais de façon rapide et transparente. L'administrateur du système remet le serveur qui vient de tomber en marche et peut le remettre soit en mode actif, le laisser en mode passif ou laisser Heartbeat gérer automatiquement.

FIGURE 3.2 - Architecture Haproxy/heartbeat

3.4 Conception du cluster

Après avoir fait un état de l'art sur les clusters existants et fait une analyse par rapport à notre travail, nous allons dans cette partie présenter les différentes architectures à implémenter pour notre cluster. Nous avons opté implémenter un cluster de répartition de charge (Load Balancing) auquel nous allons coupler un cluster haute disponibilité et implémenter par la suite un cluster Docker Swarm.

3.4.1 Nombre de Noeuds du Cluster

Notre cluster sera formé de dix (10) noeuds Raspberry Pi. Nous avons choisi la dernière version de Raspberry Pi à l'heure actuelle c'est à dire le Raspberry Pi 3 Modele B (voir section 2.2.1.6). Les dix noeuds seront repartis ainsi :

36 IAI Gabon

* deux (02) noeuds serveurs maitres HAProxy (Load Balancer)

Sur ces deux noeuds maitres nous allons virtualiser l'addresse IP d'accès au cluster pour garantir la haute disponibilité. Un des deux maitres sera actif à un moment donné tandis que l'autre sera passif et prêt à prendre le relais dès que le maitre principal tombe.

NB : Ces deux noeuds seront aussi maitre pour le cluster Docker Swarm. * huit (08) noeuds serveurs esclaves

Sur ces huit noeuds, nous allons déployer les différentes applications containerisées8 de l'entreprise comme Odoo par exemple et planifier la répartition de charge dessus (Load Balancing).

NB : Les noeuds maitres peuvent aussi jouer le rôle des noeuds esclaves, c'est à dire contenir des applications containerisées.

3.4.2 Adressage IP du Cluster

En fonction de certaines contraintes du réseau local de l'entreprise, nous avons choisi la plage d'adresse suivante pour adresser les noeuds du cluster.

Adresse du cluster :

-- adresse réseau : 172.16.0.0 -- masque réseau : 255.255.0.0 -- passerelle : 172.16.0.1

Nous avons utilisé la plage allant de 172.16.0.50 à 172.16.0.60 pour adresser les noeuds

du cluster. L'adresse 172.16.0.50 étant la seule adresse d'accès du cluster les autres étant les

adresses internes au cluster.

Noeud Consul: 172.16.0.51

Noeud Master1 (actif) 172.16.0.52

Noeud Master2 (passif) 172.16.0.56

Noeud exclave Simple: 172.16.0.53; 172.16.0.54; 172.16.0.55; 172.16.0.57; 172.16.0.58; 172.16.0.59;

172.16.0.60

Les noms des hôtes vont de "black-pearl1 à black-pearl10".

3.4.3 Constituant de chaque noeud

Comme nous l'avions dejà insinué plus haut, les noeuds du cluster seront des Raspberry Pi. Les Raspberry Pi sont à processeur ARM et supportent certains versions derivées du système d'exploitation Linux telles que RASPBIAN, ARCHLINUX, ALPINELINUX, HYPRIOT OS et bien d'autres (voir section 2.2.1). Pour notre travail, nous avons utilisé le système HYPRIOT OS et ce pour des raisons suivantes :

-- ce système a été nativement conçu pour Raspberry

8. Installer dans un Docker

c~Tchuenché Rodrigue Élève Ingénieur En Informatique 36

37 IAI Gabon

-- Ce système intègre déjà le moteur Docker pour gérer les Docker et le Docker Swarm

-- Ce système est facile à installer

-- Ce système permet l'utilisation de HAProxy et Heartbeat

-- Ce système permet le fonctionnement de beaucoup d'applications y compris l'application

phare de notre travail.

Au dessus du système HYPRIOT OS de chaque Raspberry (Noeud) nous allons:

· Pour les noeuds maitre

-- configurer les Docker maitres -- configurer les Docker esclaves -- installer et configurer HAProxy -- installer et configurer Heartbeat

· Pour les noeuds esclaves

-- configurer les Docker esclaves

-- installer les applications containerisées

3.4.4 Architecture de notre cluster

Vu que nous avons superposé plusieurs types de clusters à savoir :

-- cluster de répartition de charge

-- cluster de haute disponibilité

-- cluster Docker Swarm

Nous allons dans la suite présenter deux architectures de cluster que nous allons implémenter :

CONCLUSION

Arrivé au terme de ce chapitre, nous avons fait une analyse et nous avons mis sur pied l'architecture de notre cluster. dans la suite du travail, nous allons procéder à une phase de mise en oeuvre du cluster.

c~Tchuenché Rodrigue Élève Ingénieur En Informatique 37

38 IAI Gabon

FIGURE 3.4 - Architecture cluster Docker Swarm à implémenter

c~Tchuenché Rodrigue Élève Ingénieur En Informatique

38

FIGURE 3.3 - Architecture cluster à implémenter

Chapitre4

MISE EN OEUVRE DU CLUSTER

39

Introduction

Dans ce chapitre consacré à la mise en oeuvre, nous allons dans une première phase présenter les matériels utilisés, et dans la suite nous présenterons les différentes étapes de la mise en oeuvre du cluster.

4.1 Matériel utilisés pour monter notre Cluster

Pour monter notre cluster, nous avons utilisé les outils suivantes :

1. Dix (10) Raspberry Pi 3 Modèle B (voir section 2.2.1.6)

2. Un switch : Pour réaliser notre cluster, nous devons utiliser un switch 16 ports Gigabit Ethernet

3. Des câbles RJ45

4. Un poste Client : Un poste Client pouvant établir des connexions SSH pour nous connecter et configurer les différents noeuds.

5. Une batterie d'alimentation pour faire fonctionner les Raspberry. Cette batterie peut être par exemple celle d'une voiture. Nous conseillons une batterie pouvant se charger à l'aide d'une plaque solaire.

6. Des convertisseurs 12V - 5V

7. Des Carte MicroSD : Des cartes (au moins 10) MicroSD classe 6 à 10 et d'au moins 8 Go. Ces cartes vont servir comme disque dur pour les raspberry Pi.

40 IAI Gabon

c~Tchuenché Rodrigue Élève Ingénieur En Informatique 40

FIGURE 4.1 - Switch Gigabit Ethernet

FIGURE 4.2 - Câble RJ45

FIGURE 4.3 - Batterie d'alimentation

TABLE 4.1 - Carte MicroSD 8 & 32 Go

8. Une bonne connexion internet : pour les installations des outils logiciels nécessaires et des mises à jour.

9. Des boites en LEGO : Les raspberry Pi sont livrés à nus, pour les assembler nous avons

41 IAI Gabon

c~Tchuenché Rodrigue Élève Ingénieur En Informatique 41

FIGURE 4.4 - Convertisseur 12V - 5V

utilisé des boites en LEGO. Une fois un raspberry Pi bien assemblé à base des lego, on a ceci :

FIGURE 4.5 - Notre Raspberry Pi 3 Assemblé

Une fois tout agencé, voici à quoi ressemble notre architecture de cluster physique monté :

42 IAI Gabon

c~Tchuenché Rodrigue Élève Ingénieur En Informatique 42

FIGURE 4.6 - Notre Cluster Physique monté

4.2 Mise en OEuvre du cluster

Après avoir mis à disposition les différents matériels nécessaires et monté l'architecture physique du cluster, nous allons étape par étape faire fonctionner chaque noeud et l'associer au cluster.

4.2.1 Installation du système d'exploitation sur les 10 noeuds du cluster

Nous avons choisi le système d'exploitation HYPRIOT OS 1 comme système à utiliser sur chaque noeud du cluster. Ce système existe en plusieurs versions. Pour notre travail nous avons utilisé la version Version 0.7.0 Berry (hypriot-rpi-20160306-192317.img) publié le 06/03/2016. car cette version est très stable et possède deja les outils nécessaires pour gérer les Docker.

Installation : (Voir annexe 1)

4.2.1.1 Configuration adresse IP des noeuds Raspberry Pi

Après avoir scanné le réseau et trouvé l'adresse IP obtenu dynamiquement par le noeud, Il faudra se connecter et fixer une adresse statique et un nom d'hôte pour une meilleure utilisation du noeud. Pour ce faire, se connecter et éditer les fichiers suivantes : (Voir annexe 2)

1. Source : http://blog.hypriot.com/

43 IAI Gabon

c~Tchuenché Rodrigue Élève Ingénieur En Informatique 43

4.2.1.2 Configuration nom d'hôte des noeuds Raspberry Pi

Pour changer le nom d'hôte de la machine, éditer les fichiers /boot/device-init.yaml ou /boot/occidentalis.txt selon la version du système HYPRIOT OS installé en changeant le nom d'hôte (ligne hostname=nom_hote) préalablement définir. (Voir annexe 3)

4.2.2 Installation du moteur Docker sur chaque noeud

Une des raisons pour laquelle nous utilisons le système HypriotOS est qu'il intègre ce moteur par défaut. Mais un système comme RASPBIAN par exemple n'intègre pas ce moteur. Pour l'installer suivre les étapes suivantes : (Voir annexe 4)

4.2.3 Création d'un container Docker, le cas du container Odoo

Après avoir installé le moteur docker, la suite consiste à créer un container Docker (Docke-riser une application). Nous rappelons ceci, Trois éléments essentiels forment les bases de la philosophie d'un Docker :

* Docker Image : c'est un template qui va servir directement ou indirectement à produire d'autres Docker Image ou des Docker containers.

* Docker Containers : c'est «l'exécutable» obtenu à partir d'une Docker Image. On peut le démarrer, l'arrêter ou le détruire

* Docker Registry ou Docker Hub : c'est le repository des Docker Images. On peut y télécharger des Docker Images créés par d'autres mais également y stocker les siennes.

Ainsi, la création de "l'exécutable" Docker Container se fait grâce à un Docker Image. Pour créer un Docker Image, nous avons deux options :

~ Soit nous créons un fichier Dockerfile en local dans la machine à partir duquel nous créons le Docker Image.

~ Soit nous nous servons d'une image déjà existante soit en local soit sur le site Docker Hub2 pour créer notre image.

Tous d'abord quelques commandes utiles pour Docker :

~ docker info, docker version permet d'avoir l'information et la version du moteur docker installé.

~ docker build permet de construire (créer) un Docker Container.

~ docker image permet de lister les images existantes en local.

~ docker ps permet de lister les Containers en cours d'exécution à un moment donné.

~ docker run start stop rm permet de lancer, démarrer, arrêter et supprimer un Docker Container.

NB : Taper docker help pour avoir une liste plus exhaustive des commandes docker et taper docker --help nomCommande pour avoir une aide plus détaillée avec différents attributs sur la commande "nomCommande".

2. Docker Hub est un site qui contient tous les images officiels Docker accessible au grand public et open source

44 IAI Gabon

c~Tchuenché Rodrigue Élève Ingénieur En Informatique 44

4.2.3.1 Création d'un Docker Image à partir d'un Dockerfile

Pour créer une image à partir d'un Dockerfile, nous devons d'abord créer un fichier de même nom « Dockerfile » dans un dossier relatif à l'image que nous voulons créer. Nous rappelons que ce nom est le même quelque soit l'image à créer.

Exemple d'image

L'ERP Odoo utilise Postgresql comme Serveur de base données, ci-dessous le contenu d'un Dockerfile pour la création de l'image Postgresql compatible avec raspberry. (Voir annexe 5)

Ce qui rend les docker intéressants c'est le fait qu'une image une fois créée peut être exportée, portative et fonctionnelle sur toute autre plateforme intégrant un moteur docker. Une image docker une fois exportée ne pèse que quelques centaines de Mo maximum ce qui rend son transport facile. On exporte généralement une image sous format d'archive .tar sous Linux, elle peut être ensuite zipper et sera plus facile à transporter car plus léger. Les commandes pour exporter et importer une image sous forme d'archive sont les suivantes : (Voir annexe 6)

4.2.3.2 Création des Docker Containers

Après avoir créé l'image docker, la création d'un Container Docker se base sur une image Docker. Soit à créer un container basé sur l'image « postgresql » au nom de « postgresdemo », voici la commande (Voir annexe 7)

4.2.4 Mise en oeuvre du Cluster Docker Swarm

Après avoir installé le moteur Docker et créé des containers Docker, nous pouvont implémenter le cluster Docker Swarm. Nous rappelons que le Docker Swarm permet d'avoir une visibilité globale et permet de centraliser la gestion des Docker à travers le ou les noeuds maitres (master). Le principe consiste à faire communiquer les deamons (moteur) Docker préalablement installés sur chaque noeud.

La première étape pour créer un cluster Docker Swarm est d'installer sur chaque noeud l'image rpi-swarm servant à implémenter le swarm sur les raspberry pi.

$docker build hypriot /rpi-swarm ou

$docker pull hypriot /rpi-swarm

Par défaut cette image existe sur certaines versions du système Hypriot OS. Après avoir installé ou vérifié l'existence de cette image, faire ceci :

45 IAI Gabon

c~Tchuenché Rodrigue Élève Ingénieur En Informatique 45

-- Ouvrir un port TCP sur chaque noeud pour la communication avec le gestionnaire de Swarm

-- Créer et gérer des certificats TLS pour sécuriser votre cluster.

Pour la découverte réseau par les différents noeuds de façon à communiquer en cluster, Docker a prévu deux methodes :

· Utilisation des jetons cluster (Swarm Token) : Pour la découverte réseau, Les noeuds se servent d'un ID unique pour communiquer. Ce ID (Swarm Token) est généralement créé sur le noeud master et distribué sur les autres noeuds. On utilise généralement cette méthode pour les cluster en laboratoire car pas très efficace et pas très sécurisée.

· Utilisation d'un noeud Consul: Pour la découverte réseau, les noeuds se servent d'un noeud consul qui contient les informations sur chaque noeud du réseau. c'est avec ce noeud consul que le noeud master communique le plus souvent. cette méthode nécessite l'installation de l'image rpi-consul (image consul pour les Raspberry Pi). Il est généralement utilisé pour les clusters en production car plus stable et sécurisée.

NB : Nous rappelons que c'est cette méthode que nous avons utilisé dans notre cluster (voir schéma architecture fig. 3.4 ).

Nous rappelons que d'après notre architecture, notre noeud Consul a pour adresse 172.16.0.51; le noeud maitre (master) actif 172.16.0.52; le noeud maitre (master replicate) passif 172.16.0.56. Une fois ces pré-requis établis et les dix (10) noeuds étant en réseau et se communiquant parfaitement, suivre les étapes suivantes : (Voir annexe 8)

4.2.5 Mise en OEuvre du Cluster de Répartition de charges et Haute Disponibilité

Après avoir mis sur pied le cluster Docker Swarm, nous allons implémenter dessus un cluster de répartition de charge couplé à un cluster haute disponibilité. Les principaux noeuds à configurer sont des noeuds maitres. Par la suite, nous allons juste nous assurer que l'inter-communication est parfaite entre les dix (10) noeuds.

4.2.5.1 Mise en oeuvre de la répartition de charge

Pour implémenter la répartition de charge, nous allons utiliser le logiciel HAProxy. Ha-proxy est ce qu'on appelle un load-balancer, c'est à dire un service permettant de dispatcher les requêtes TCP/HTTP vers plusieurs serveurs, appelés les backends. Mais haproxy peut aussi servir comme premier rempart contre les attaques sur les sites et applications Web.

Il est principalement utilisé en tant que load-balancer http vers des backends Apache, NginX et bien d'autres mais peut aussi être utilisé pour faire du load-balancing vers d'autres services (mysql,redis,node.js ...). Dans notre cluster, nous allons installer et configurer haproxy sur les deux serveurs maitres de façon identique. Pour le faire, nous allons suivre les étapes suivantes : (Voir annexe 9)

46 IAI Gabon

c~Tchuenché Rodrigue Élève Ingénieur En Informatique 46

4.2.5.2 Mise en oeuvre Haute Disponibilité du cluster

Pour implémenter la haute disponibilité du cluster, nous allons utiliser le logiciel Heartbeat. C'est un service qui permet de gérer la haute disponibilité dans un cluster. Elle permet de mettre en place le balancement entre les deux serveurs.

Son principe consiste à placer une adresse IP sur une interface virtuelle du serveur actif et ensuite de démarrer le service haproxy. Quand le serveur actif tombe, le service heartbeat du serveur passif le détecte et refait la même procédure sur le serveur passif qui passe en mode actif. Nous rappelons que la configuration de haproxy et heartbeat est le même sur les deux serveurs. Dans notre cluster, nous allons installer et configurer heartbeat sur les deux serveurs maitres de façon identique. Pour le faire, nous allons suivre les étapes suivantes : (Voir annexe 10)

À ce stade de notre travail, notre cluster haute disponibilité est fonctionnel et tous les services (applications) du cluster seront accessibles à l'adresse 172.16.0.50.

Sur le serveur actif, une capture d'écran sur les interfaces réseaux

FIGURE 4.7 - ifconfig partie eth0 :0 qui indique que le noeud fonction sur l'adresse virtuelle 172.16.0.50

C'est l'exemple de l'ERP odoo qui est accessible à l'adresse 172.16.0.50 :8070 et qui en arrière plan tourne en load balancing sur 4 serveurs.

47 IAI Gabon

c~Tchuenché Rodrigue Élève Ingénieur En Informatique 47

FIGURE 4.8 - Interface Connexion Odoo sur le cluster à l'adresse 172.16.0.50 :8070

CONCLUSION

Arrivé au terme de ce chapitre, nous avons mis en oeuvre notre cluster haute disponibilité. Dans la suite du travail, nous allons procéder à une phase d'évaluation du cluster dans le but de vérifier si les objectifs ont été atteints.

Chapitre5

ÉVALUATION DU CLUSTER ET

CONDUITE DU PROJET

48

Introduction

Dans ce chapitre consacré à l'évaluation du cluster et conduite du projet, nous allons dans une première phase évaluer le cluster, et dans la suite nous présenterons la conduite du projet.

5.1 Protocole d'évaluation

Nous allons dans cette section définir comment évaluer et valider notre cluster serveur par rapport aux serveurs standard. L'évaluation de notre cluster se fera sur trois aspects :

-- Évaluation par rapport au cout :

Ici nous allons évaluer le cout de réalisation de notre cluster et le comparer au cout d'un serveur standard.

-- Évaluation par rapport à l'énergie:

Ici nous allons évaluer la consommation en énergie de notre cluster et la comparer à celle d'un serveur standard.

-- Évaluation par rapport à la performance : Ici nous allons évaluer la performance sur la répartition de charge réseau et sur la haute disponibilité du cluster.

La vérification de la répartition de charge consistera à lancer plusieurs requêtes de connexions sur le serveur maitre actif (dans notre cas 172.16.0.50) et vérifier la répartition sur les serveurs esclaves hébergeant les applications.

La vérification de la haute disponibilité consistera à faire tomber le noeud maitre actif et vérifier que la connectivité reste effective et en temps réel. C'est à dire vérifier que le noeud maitre passif est devenu actif et a pris le relai de façon automatique.

49 IAI Gabon

c~Tchuenché Rodrigue Élève Ingénieur En Informatique 49

5.2 Évaluation du cluster

5.2.1 Évaluation de l'énergie

Le Raspberry Pi répond aux deux critères : minuscule et très peu énergivore, pour l'alimenter il faut un chargeur de smartphone du genre mini usb, il est recommandé du 700 mA sur 5v, ce qui nous donne comme puissance :

NB : Dans nos calculs, nous ne tenons pas compte des résistances effets joules ce qui rend nos réponses à des valeurs approximatives.

P=U*I

P=5v*0.7A = 3.5 Watts = 0.0035 KW

Évaluons sa consommation électrique journalière d'un Raspberry Pi (24h) :

E=P*t

E=0.0035kw*24h = 0.084 KWh

Pour les dix (10) Raspberry Pi, l'energie donne (soit Et) :

Et = 0.084 KWh * 10 = 0.84 KWh

Évaluons la consommation énergétique journalière d'un switch :

Un switch TP link 16 ports a les caractéristiques en puissance : environ 9.26W

Sa consommation électrique journalière :

E=P*t

E=0.00926kw*24h = 0.2222 KWh

Au total, notre cluster à globalement une consommation électrique journalière d'environ :

Etotal = 0.84 + 0.2222 = 1.06224 KWh

Contrairement à un serveur standard comme Super Micro qui consomme dans les 1200 Watts soit environ

E=P*t

E=1.2kw*24h = 28.8 KWh par jour

50 IAI Gabon

 

Cluster Réalisé

Serveur Standard (Cas du Super Micro)

Consommation journalière

1.06224 KWh

28.8 KWh

 

TABLE 5.1 - Comparaison consommation d'énergie

5.2.2 Évaluation coût du cluster

Pour monter notre cluster, nous avons fait les dépenses suivantes :

Matériel

Prix unitaire

Nombre

Prix Global

Raspberry Pi 3

25.300 Fcfa

10

253.000 Fcfa

Carte MicroSD 8 Go

10.000 FCA

6

60.000 Fcfa

Carte MicroSD 32 Go

20.000 Fcfa

4

80.000 Fcfa

convertisseur 12V - 5V

7500 Fcfa

5

37.500 Fcfa

Batterie Véhicule 40Ah

50.000Fcfa

1

50.000 Fcfa

Switch

65.000 Fcfa

1

65.000 fcfa

Câble RJ45

500 Fcfa /m

20 m

10.000 Fcfa

Connecteur RJ54

6500 Fcfa

1 paquet

6.500 Fcfa

Logistique

100.000Fcfa

 

200.000Fcfa

Prix Total

762.000 Fcfa

 
 
 

TABLE 5.2 - Table dépenses

 

Cluster Réalisé

Serveur Standard (Cas du Super Micro)

Coût

environ 762.000 Fcfa

environ 7.000.000 FCFA

 

TABLE 5.3 - Comparaison coût

5.2.3 Évaluation Performance Cluster

En suivant le protocole défini plus haut, la répartition de charge et la haute disponibilité sont effectives. En effet, nous avons lancer plusieurs connexion Odoo et avons brusquement mis le serveur maitre haut réseau. L'ensemble a continué de fonctionner sans problème. Et nous avons par la suite vérifier la répartition de charge qui était bien effective.

5.3 Conduite du projet

Cette partie porte sur l'organisation de notre projet et s'articule en quatre points :

-- les intervenants dans le projet

-- le découpage du projet

-- la planification et le diagramme de GANTT

-- l'estimation des charges et des coûts du projet.

c~Tchuenché Rodrigue Élève Ingénieur En Informatique 50

51 IAI Gabon

5.3.1 Les intervenants dans le projet

Un projet informatique est certes une aventure technologique, mais aussi une aventure humaine dans laquelle s'effectuent plusieurs rencontres de personnes d'horizons divers. La réussite d'un tel projet passe donc par une organisation efficace de l'équipe de projet. Le maître d'ouvrage (MOA), est l'entité porteuse du besoin, définissant l'objectif du projet, son calendrier et le budget consacré à ce projet. Dans notre cas, ce rôle a été joué par :

· Mr NJIOMO Luc Prosper Chief Executive Officer of MYRABILYS Sarl; maitre de stage, il a contrôlé l'avancement de ce projet de bout en bout et nous a permis de cerner les problématiques liées à l'analyse et la conception de ce projet et les méthodes statistiques utilisées dans ce domaine.

· Dr NOUSSI Roger Enseignant permanent à l'IAI, notre superviseur. Nous lui avons présenté le travail que nous avons effectué et nous nous sommes soumis à ses orientations, propositions et corrections pour le bon déroulement du projet

· Nous même Le maître d'oeuvre (MOE) est le garant de la réalisation technique de la solution à mettre en place. Dans notre projet, cette tâche a été réalisée par nous-même en tant que stagiaire ingénieur.

5.3.2 Découpage du projet

Découper un projet en phases permet de pouvoir mieux le conduire à terme en respectant les impératifs de qualité, de coûts et de délais. Chaque phase est découpée en tâches et accompagnée d'un bilan de fin d'étape destinée à la validation de la phase écoulée avant de passer à la phase suivante. Le découpage de notre projet en phases et en tâches est présenté dans le tableau ci-dessous :

c~Tchuenché Rodrigue Élève Ingénieur En Informatique 51

52 IAI Gabon

No

Phases

Tâches

1.

Étude préliminaire

Prise de contact et interviews

 

2.

Étude de quelques concepts liés au sujet

Notion de Raspberry

 
 
 

3.

Analyse et Conception

État de l'art Solutions cluster existante

 
 
 
 
 

4.

. Mise en oeuvre du clustrer

Recherche Matériels utilisés

 
 
 
 
 
 
 

5.

Étude évaluatrice et conduite du projet

Évaluation coût

 
 
 

6.

Documentation

Rédaction Mémoire

 

TABLE 5.4 - Découpage des tâches

5.3.3 Diagramme de GANTT

c~Tchuenché Rodrigue Élève Ingénieur En Informatique 52

53 IAI Gabon

FIGURE 5.1 - Diagramme de GANTT

FIGURE 5.2 - Diagramme de GANTT next

5.4 Bilan et perspectives 5.4.1 Bilan

Ce stage nous a permis de revisiter et de mettre en pratique les connaissances acquises durant notre formation notamment en réseaux, en système d'exploitation et en programmation. Cependant, il nous a fait côtoyer le monde de la recherche.

c~Tchuenché Rodrigue Élève Ingénieur En Informatique 53

54 IAI Gabon

c~Tchuenché Rodrigue Élève Ingénieur En Informatique 54

Toutefois, l'expérience, la disponibilité de l'encadreur ont été pour nous une source d'inspiration, de formation et de clairvoyance pour le début d'une carrière fascinante. Nous avons en effet eu quelques difficultés durant le déroulement de notre travail à savoir :

-- L'acquisition de certains outils servant au montage du cluster. -- La bonne maitrise de certains concepts liés au sujet.

-- l'implémentation et l'évaluation des performances de la solution.

5.4.2 Perspectives

Notre sujet portait sur la conception, implémentation et étude d'un cluster haute disponibilité de raspberry pi et exécution des dockers swarm. Pour le faire, nous avons utilisé dix (10) Raspberry Pi 3 modèle B, ainsi en terme de perspectives, nous comptons l'implémenter avec 32 ou 64 Raspberry Pi pour espérer avoir un cluster plus puissant et plus stabilité.

Cependant, Raspberry Pi n'est pas le seul nano-ordinateur low-cost pouvant servir pour ce travail, il existe un autre « Udoo » qui est un nano-ordinateur de même taille que le Raspberry Pi mais plus puissant et légèrement plus cher que le Raspberry. Nous comptons dans la même lancé réaliser ce même type de cluster mais basé plutot sur ces Udoo. Udoo est une famille de nano-ordinateur, compatible avec Android et Linux, que l'on peut exploiter à la fois comme les systèmes embarqués pour les projets de bricolage-électronique et de faible consommation d'énergie, des nano-ordinateurs très adaptés pour un usage quotidien. 1

1. Source : http://www.udoo.org/

55 IAI Gabon

CONCLUSION GÉNÉRALE

Arrivé au terme de notre travail sur la conception et l'implémentation d'un cluster low-cost haute disponibilité basé sur Raspberry Pi, nous sortons très bénéfiques et satisfait des travaux réalisés. les résultats sont très encourageants. le travail que nous avons mené durant ces cinq (05) mois de stage a abouti à la réalisation de notre première version de cluster. Cette réalisation a mis en avant l'utilisation des technologies comme Docker et Docker Swarm qui font partir des nouvelles technologies à la mode du moment.

Après évaluation de notre cluster, nous pouvons affirmer que le challenge en coût et en énergie a été atteint. Notre solution se trouve ainsi bien adaptée à tout genre d'entreprises désirant s'offrir un serveur. Elle se trouve aussi adaptée à fonctionner dans les conditions plus ou moins dégradées en énergie vue qu'avec une petite batterie de véhicule, nous pouvont faire tourner notre cluster. Ce qui convient bien aux zones reculées sans couverture d'énergie électrique.

Nous comptons poursuivre le travail étant donné que c'est un projet initié par la structure qui nous a accueillis et dans laquelle nous comptons être employés. Dans la suite du projet, il sera réalisé avec plus de Raspberry Pi ou avec des nano-ordinateurs Udoo qui sont plus puissants que les Raspberry Pi. Nous comptons aussi nous servir des Docker pas seulement pour Odoo, mais également pour beaucoup d'autres applications du même type client-serveur.

En dépit de quelques difficultés rencontrées que nous pensons mineures et normales dans le déroulement de toute oeuvre humaine, nous avons atteint nos objectifs. Ce stage a été plus qu'une expérience enrichissante à tout point de vue. Il nous a permis à mieux organiser et manager notre temps. Ce stage nous a été bénéfique du point de vue connaissance car nous avons pu découvrir certains outils en pleine évolution : les Raspberry Pi et les Docker. Nous nous sommes familiarisés avec ces outils. Pour finir, nous pouvons conclure que ce stage a contribué à accroitre nos connaissances en administration système Linux.

c~Tchuenché Rodrigue Élève Ingénieur En Informatique 55

56

Les Annexes

.1 Annexe 1

Installation Système: <>

1. Télécharger le système hypriot os

Si on ne dispose pas déjà du fichier image du système, aller sur le site http://blog. hypriot.com/downloads/ et télécharger le fichier hypriot-rpi-20160306-192317.img.zip.

2. Préparer la carte microSD en flashant l'image téléchargée sur la carte Il existe plusieurs manières de flasher l'image sur la carte. La méthode diffère que l'on soit sur un système Windows, Linux ou Mac OS X. Nous allons décrire la procédure étant sur Windows. Pour plus d'informations, aller sur le site2 Tout d'abord, nous aurons besoin des outils suivants :

Applications

Description

7-Zip

Pour extraire l'image compressée à flasher sur la carte microSD. S'assurer que l'on a choisi le fichier de téléchargement qui correspond à l'architecture de votre poste de travail (x86 vs x64)!

Win32 Disk Imager"Start

Pour flasher l'image sur la carte microSD

Pendant l'installation, vous trouverez une case à cocher appelée Pcap-Service at startup". Nous vous recommandons de le désactiver

Putty

Pour établir une connexion SSH sur les différents noeuds Il suffit de le télécharger. Aucune installation nécessaire.

Zenmap

Pour scanner et identifier l'adresse IP d'un nouveau noeud que l'on vient de mettre en marche

SD Formatter

Pour formater la carte microSD au cas ou on aimerai le réutiliser

 

TABLE 5 - Liste outils nécessaires pour flasher la carte microSD

Après avoir télécharger et installer ses outils, extraire le fichier hypriot-rpi-20160306-192317.img.zip et lancer l'application Win32 Disk Imager. (voir figure) Après avoir finir l'écriture de l'image sur la carte, éjecter la carte et l'insérer dans le Raspberry.

3. Première connexion et première configuration du Raspbery sur Hypriot OS Connecter votre raspberry à un réseau local où il obtiendra une adresse dynamique et le démarrer. Patienter quelques minutes (2 ou 3) et lancer Zenmap à partir de votre poste client situer dans le même réseau local. dans la zone cible, taper l'adresse reseau. dans notre cas 172.16.0.0/16

2. Source : http://blog.hypriot.com/getting-started-with-docker-on-your-arm-device/

57 IAI Gabon

FIGURE 3 - Fenêtre WinDiskImager

FIGURE 4 - Fenêtre Zenmap

c~Tchuenché Rodrigue Élève Ingénieur En Informatique 57

dans la zone commande, taper la commande nmap -sn 172.16.0.0/16

NB : Les adresses utilisées ici sont les adresses de notre structure et celle dont nous utilisons pour notre cluster.

Après avoir identifié l'adresse du noeud en question, lancer Putty.exe (Voir figure) et se connecter (clic sur open) en ssh sur le noeud pour des éventuelles modifications comme:

-- changer l'adresse IP dynamique en static -- changer le nom du noeud

-- vérifier que le nouveau noeud est dans le réseau du cluster sinon, le connecter au réseau du cluster.

Une fois cliquer sur open, si le noeud est bien en réseau, on aura cette fenêtre : (Voir

figure) Pour se connecter à HYPRIOT OS (noeud), taper les paramètres suivants : login : root

mot de pass : hypriot

Une fois ces paramètres bien saisis et validés, on obtient cette fenêtre :(Voir figure)

58 IAI Gabon

FIGURE 5 - Fenêtre Putty.exe

FIGURE 6 - Fenêtre connexion Hypriot OS

c~Tchuenché Rodrigue Élève Ingénieur En Informatique 58

.2 Annexe 2

Configuration Adresse IP : <> Pour changer l'adresse IP, éditer le fichier /etc/network/in-terfaces en ajoutant le contenu suivant en supposant que nous voulons fixer les paramètres suivants en mode administrateur (sudo) :

-- adresse IP : 172.16.0.51 -- masque : 255.255.0.0 -- passerelle : 172.16.0.1

Éditer le fichier /etc/network/interfaces en mode administrateur (sudo)

$sudo nano /etc/network/interfaces

59 IAI Gabon

c~Tchuenché Rodrigue Élève Ingénieur En Informatique 59

FIGURE 7 - Fenêtre acceuil Hypriot OS

.3 Annexe 3

Configuration Nom des noeuds <>

$sudo nano /boot/occidentalis.txt

# hostname for your Hypriot Raspberry Pi: hostname=hypriot-pi

# basic wireless networking options: wifi_ssid=SSID

wifi_password="secret_password"

ou

$sudo nano /boot/device-init.yaml

hostname: black-pearl

wifi:

interfaces:

wlan0:

ssid: "MyNetwork"

password: "secret_password"

NB : Après avoir changé ces paramètres, redemarrer la machine et se reconnecter. Répéter cette étape pour tous les 10 noeuds du cluster.

À ce stade, le noeud est fonctionnel et prêt à être configurer pour faire partie du cluster.

60 IAI Gabon

c~Tchuenché Rodrigue Élève Ingénieur En Informatique 60

.4 Annexe 4

Installation du Docker: <> Connecter le noeud (ou la machine) à internet, lancer l'invite de

commande et taper les commandes suivantes :

1. curl -sSL http://downloads.hypriot.com/docker-hypriot_1.10.1-

1_armhf.deb > /tmp/docker-hypriot_1.10.1-1_armhf.deb

2. sudo dpkg -i /tmp/docker-hypriot_1.10.1-1_armhf.deb

3. rm -f /tmp/docker-hypriot_1.10.1-1_armhf.deb

4. sudo sh -c 'usermod -aG docker $SUDO_USER'

5. sudo systemctl enable docker.service

Une fois installé, taper la commande docker info et verifier qu'on obtient un resultat semblable à ceci :

$ docker info

Containers: 3

Running: 3

Paused: 0

Stopped: 0

Images: 2

Server Version: 1.10.2

Storage Driver: overlay

Backing Filesystem: extfs

Execution Driver: native-0.2

Logging Driver: json-file

Plugins:

Volume: local

Network: bridge null host

Kernel Version: 4.1.17-hypriotos-v7+

Operating System: Raspbian GNU/Linux 8 (jessie)

OSType: linux

Architecture: armv7l

CPUs: 4

Total Memory: 925.5 MiB

Name: black-pearl2

ID: FNWT:25U4:JGOW:SJPB:52UX:U7H6:FWPT:GVIY:54B5:PTD2:LESJ:7F2Z

Debug mode (server): true

File Descriptors: 40

Goroutines: 74

System Time: 2016-10-06T13:45:39.411942274+02:00

EventsListeners: 1

Init SHA1: dfeb8c17f8c3a118753fea8353b715a7a75f5491

Init Path: /usr/lib/docker/dockerinit

Docker Root Dir: /var/lib/docker

Cluster store: consul://172.16.0.51:8500

Cluster advertise: 172.16.0.52:2375

ou taper la commande docker version

$ docker version Client:

61 IAI Gabon

c~Tchuenché Rodrigue Élève Ingénieur En Informatique 61

Version: 1.10.2

API version: 1.22

Go version: go1.4.3

Git commit: c3959b1

Built: Wed Feb 24 09:51:38 2016

OS/Arch: linux/arm

Server:

Version: 1.10.2

API version: 1.22

Go version: go1.4.3

Git commit: c3959b1

Built: Wed Feb 24 09:51:38 2016

OS/Arch: linux/arm

NB : Faire ceci sur tous les noeuds où l'on veut installer le moteur docker.

A ce niveau où nous avons installé le moteur Docker, Nous pouvons déjà créer un Container Docker

.5 Annexe 5

Création d'image Docker <>

# vim:set ft=dockerfile:

FROM resin/rpi-raspbian:jessie

MAINTAINER Rodrigue Dester < rodridest@gmail.com>

# explicitly set user/group IDs

RUN groupadd -r postgres --gid=999 && useradd -r -g postgres --uid=999 postgres

# grab gosu for easy step-down from root

RUN gpg --keyserver pool.sks-keyservers.net --recv-keys B42F6819007F00F88E364FD4036A95BF357DD4

RUN apt-get update && apt-get install -y --no-install-recommends ca-

certificates wget && rm -rf /var/lib/apt

lists/* \

&& wget -O /usr/local/bin/gosu " https://github.com/tianon/gosu/releases

/download/1.2/gosu-$(dpkg --print

architecture)" \

&& wget -O /usr/local/bin/gosu.asc " https://github.com/tianon/gosu/

releases/download/1.2/gosu-$(dpkg --print

architecture).asc" \

&& gpg --verify /usr/local/bin/gosu.asc \

&& rm /usr/local/bin/gosu.asc \

&& chmod +x /usr/local/bin/gosu \

&& apt-get purge -y --auto-remove ca-certificates wget

62 IAI Gabon

ENV LANG en_US.utf8

RUN mkdir /docker-entrypoint-initdb.d ENV PG MAJOR 9.4

_

#ENV PG_VERSION 9.4.8-0+deb8u1 ENV PG_VERSION 9.4.9-0+deb8u1

RUN apt-get update \

&& apt-get install -y postgresql-common \

&& sed -ri 's/#(create_main_cluster) .*$/\1 = false/' /etc/postgresql-

common/createcluster.conf \

&& apt-get install -y \

postgresql-$PG_MAJOR=$PG_VERSION \

postgresql-contrib-$PG_MAJOR=$PG_VERSION \

&& rm -rf /var/lib/apt/lists/*

RUN mkdir -p /var/run/postgresql && chown -R postgres /var/run/postgresql

ENV PATH /usr/lib/postgresql/$PG_MAJOR/bin:$PATH

ENV PGDATA /var/lib/postgresql/data

VOLUME /var/lib/postgresql/data

COPY docker-entrypoint.sh /

RUN chmod +x / docker-entrypoint.sh

ENTRYPOINT ["/ docker-entrypoint.sh"]

EXPOSE 5432

CMD ["postgres"]

La syntaxe du Dockerfile : 3

FROM <image> ou FROM <image> :<tag> ou FROM <image>@<digest>

FROM : indique sur quelle distribution ou image de référence va se baser cette nouvelle Image

Docker.

MAINTAINER <name>

MAINTAINER: indique qui est responsable de cette image.

RUN <command> ou RUN ["executable", "param1", "param2"]

RUN : ensemble de commande qui vont successivement être exécutées pour créer cette Image

Docker.

ENV <key> <value> ou ENV <key>=<value>

ENV : permet de définir des variables d'environnements qui pourront ensuite être modifiées

grâce au paramètre de la commande run --env <key>=<value>.

COPY <src>... <dest> ou COPY ["<src>",... "<dest>"] ou ADD <src>... <dest>

ou ADD ["<src>",... "<dest>"]

COPY ou ADD : permet de copier un fichier depuis la machine hôte ou depuis une URL

VOLUME ["/data"]

VOLUMES : permet de créer un point de montage qui permettra de persister les données.

On pourra alors choisir de monter ce volume dans un dossier spécifique en utilisant la com-

mande run -v :

EXPOSE <port> [<port>...]

EXPOSE : permet d'ouvrir des ports de communication TCP / UDP pour communiquer

avec le reste du monde

3. Source : https://www.grafikart.fr/tutoriels/docker/dockerfile-636, Source: https://docs.docker.com/engine/reference/builder/

c~Tchuenché Rodrigue Élève Ingénieur En Informatique 62

63 IAI Gabon

ENTRYPOINT ["executable", "param1", "param2"] ou ENTRYPOINT command param1 param2

ENTRYPOINT : permet d'ajouter une commande qui sera exécutée par défaut, et ce, même si on choisit d'exécuter une commande différente de la commande standard.

CMD ["executable","param1","param2"] ou CMD ["param1","param2"] ou CMD command param1 param2

CMD : détermine la commande qui sera exécutée lorsque le container démarrera. elle détermine les paramètres que vont prendre en compte le fichier bash de la commande ENTRY-POINT

NB : Pour plus d'information ici

Contenu docker-entrypoint.sh

#!/bin/bash set -e

set_listen_addresses() {

sedEscapedValue="$(echo "$1" | sed 's/[\/&]/\\&/g')"

sed -ri "s/^#?(listen_addresses\s*=\s*)\S+/\1'$sedEscapedValue'/" " $PGDATA/postgresql.conf"

}

if [ "$1" = 'postgres' ]; then mkdir -p "$PGDATA"

chown -R postgres "$PGDATA"

chmod g+s /run/postgresql

chown -R postgres /run/postgresql

# look specifically for PG_VERSION, as it is expected in the DB dir if [ ! -s "$PGDATA/PG_VERSION" ]; then

gosu postgres initdb

# check password first so we can output the warning before

postgres

# messes it up

if [ "$POSTGRES_PASSWORD" ]; then

pass="PASSWORD '$POSTGRES_PASSWORD'"

authMethod=md5

else

# The - option suppresses leading tabs but *not* spaces.

:)

cat >&2 <<-'EOWARN'

****************************************************

WARNING: No password has been set for the

database.

This will allow anyone with access to the Postgres port to access your database. In Docker's default configuration, this is

c~Tchuenché Rodrigue Élève Ingénieur En Informatique 63

64 IAI Gabon

effectively any other container on the

same

system.

Use "-e POSTGRES_PASSWORD=password" to

set

it in "docker run".

****************************************************

EOWARN

pass=

authMethod=trust

fi

{ echo; echo "host all all 0.0.0.0/0 $authMethod"; } >> "

$PGDATA/pg_hba.conf"

# internal start of server in order to allow set-up using psql-

client

# does not listen on TCP/IP and waits until start finishes

gosu postgres pg_ctl -D "$PGDATA" \

-o "-c listen_addresses=''" \

-w start

: ${POSTGRES_USER:=postgres}

: ${POSTGRES_DB:=$POSTGRES_USER} export POSTGRES_USER POSTGRES_DB

if [ "$POSTGRES_DB" != 'postgres' 1; then psql --username postgres <<-EOSQL CREATE DATABASE "$POSTGRES_DB" ;

EOSQL

echo

fi

if [ "$POSTGRES_USER" = 'postgres' 1; then op='ALTER'

else

op='CREATE'

fi

psql --username postgres <<-EOSQL

$op USER "$POSTGRES_USER" WITH SUPERUSER $pass ;

EOSQL echo

echo

for f in /docker-entrypoint-initdb.d/*; do

case "$f" in

*.sh) echo "$0: running $f"; . "$f" ;;

*.sql) echo "$0: running $f"; psql --username "

c~Tchuenché Rodrigue Élève Ingénieur En Informatique 64

65 IAI Gabon

c~Tchuenché Rodrigue Élève Ingénieur En Informatique 65

$POSTGRES_USER" --dbname "$POSTGRES_DB" < "$f" && echo ;;

*) echo "$0: ignoring $f" ;;

esac echo

done

gosu postgres pg_ctl -D "$PGDATA" -m fast -w stop set_listen_addresses '*'

echo

echo 'PostgreSQL init process complete; ready for start up.'

echo

fi

exec gosu postgres "$@"

fi

exec "$@"

Après avoir créé le Dockerfile, on crée l'image avec la commande suivante : En supposant que notre Dockerfile et docker-entrypoint.sh sont dans un dossier dester/postgres, on a :

$docker build -t postgresql dester/postgres

FIGURE 8 - Fenêtre docker build

L'option -t ici permet de donner un nom à l'image. Lorsque cette commande est validée, docker va d'abord chercher en local dans le dossier « dester/postgres » s'il trouve un Dockerfile. Si c'est le cas, il l'exécute sinon il cherche sur internet dans le site dépôt officiel Docker Hub. S'il ne trouve pas sur internet, alors une erreur sera généré.

À la fin de création, voir l'image crée à l'aide de la commande docker image.

Contenu Dockerfile Odoo

FROM resin/rpi-raspbian:jessie

MAINTAINER Rodrigue Dester < rodridest@gmail.com>

66 IAI Gabon

c~Tchuenché Rodrigue Élève Ingénieur En Informatique 66

# Install some deps, lessc and less-plugin-clean-css, and wkhtmltopdf

RUN set -x; \

apt-get update \

&& apt-get install -y --no-install-recommends \

ca-certificates \

curl \

node-less \

python-gevent \

python-pip \

python-pyinotify \

python-renderpm \

python-support \

&& apt-get install wkhtmltopdf -y

# Install Odoo

ENV ODOO_VERSION 9.0

ENV ODOO_RELEASE 20161103

RUN set -x; \

curl -o odoo.deb -SL http://nightly.odoo.com/${ODOO_VERSION}/nightly/

deb/odoo_${ODOO_VERSION}c.${ODOO_RELEASE}_all.deb \

&& echo 'b5f88c06d8ba3475fa5ef15d93e504891c648f8e odoo.deb' | sha1sum -

c - \

&& dpkg --force-depends -i odoo.deb \

&& apt-get update \

&& apt-get -y install -f --no-install-recommends \

&& rm -rf /var/lib/apt/lists/* odoo.deb

# Copy entrypoint script and Odoo configuration file

COPY ./ docker-entrypoint.sh /

RUN chmod +x / docker-entrypoint.sh

COPY ./openerp-server.conf /etc/odoo/

RUN chown odoo /etc/odoo/openerp-server.conf

# Mount /var/lib/odoo to allow restoring filestore and /mnt/extra-addons for

users addons

RUN mkdir -p /mnt/extra-addons \

&& chown -R odoo /mnt/extra-addons

VOLUME ["/var/lib/odoo", "/mnt/extra-addons"]

# Expose Odoo services EXPOSE 8069 8071

# Set the default config file

ENV OPENERP_SERVER /etc/odoo/openerp-server.conf

# Set default user when running the container #USER odoo

ENTRYPOINT ["/ docker-entrypoint.sh"] CMD ["openerp-server"]

67 IAI Gabon

Contenu openerp-server.conf A modifier selon les configuration du système :

[options]

addons_path = /mnt/extra-addons,/usr/lib/python2.7/dist-packages/openerp/

addons

data_dir = /var/lib/odoo

auto_reload = True

; admin_passwd = admin

; csv_internal_sep = ,

; db_maxconn = 64

; db_name = False

; db_template = template1

; dbfilter = .*

; debug_mode = False

; email_from = False

; limit_memory_hard = 2684354560

; limit_memory_soft = 2147483648

; limit_request = 8192

; limit_time_cpu = 60

; limit_time_real = 120

; list_db = True

; log_db = False

; log_handler = [':INFO']

; log_level = info

; logfile = None

; longpolling_port = 8072

; max_cron_threads = 2

; osv_memory_age_limit = 1.0

; osv_memory_count_limit = False

; smtp_password = False

; smtp_port = 25

; smtp_server = localhost

; smtp_ssl = False

; smtp_user = False

; workers = 0

; xmlrpc = True

; xmlrpc_interface =

; xmlrpc_port = 8069

; xmlrpcs = True

; xmlrpcs_interface =

; xmlrpcs_port = 8071

Contenu du fichier docker-entrypoint.sh.sh: #!/bin/bash

set -e

# set the postgres database host, port, user and password : ${HOST:=${DB_PORT_5432_TCP_ADDR:='db'}} : ${PORT:=${DB_PORT_5432_TCP_PORT:=5432}}

c~Tchuenché Rodrigue Élève Ingénieur En Informatique 67

68 IAI Gabon

c~Tchuenché Rodrigue Élève Ingénieur En Informatique 68

: ${USER:=${DB_ENV_POSTGRES_USER:=${POSTGRES_USER:='odoo'}}}

: ${PASSWORD:=${DB_ENV_POSTGRES_PASSWORD:=${POSTGRES_PASSWORD:='odoo'}}}

# pass them as arguments to the odoo process

DB_ARGS=("--db_user" $USER "--db_password" $PASSWORD "--db_host" $HOST "--

db_port" $PORT)

case "$1" in

-- | openerp-server)

shift

exec openerp-server "${DB_ARGS[@]}" "$@"

-*)

*)

;;

exec openerp-server "${DB_ARGS[@]}" "$@" ;;

exec "$@"

esac exit 1

Après avoir créé le Dockerfile, on crée l'image avec la commande suivante : En supposant que notre Dockerfile et docker-entrypoint.sh sont dans un dossier dester/odoo, on a :

$docker build -t odoo9.0 dester/odoo

.6 Annexe 6

Exporter une image : <>

(soit l'image odoo_c9)

$docker save odoo_c9 > dester/odoo/odoo_c9.tar $docker load -i dester/odoo/odoo_c9.tar

Pour voir les images créées, taper la commande suivante :

$docker images

REPOSITORY TAG IMAGE ID CREATED SIZE

odoo9c latest 411ffb00ac5b 6 weeks ago 1.061 GB

hypriot/rpi-swarm latest c298de062190 7 months ago 13.27 MB

hypriot/rpi-busybox-httpd latest fbd9685c5ffc 16 months ago 2.156 MB

.7 Annexe 7

Création Container Docker : Le container postgres au nom de db et le container odoo au nom de odoo-c-9.0 <>

# container postgresql "db"

69 IAI Gabon

FIGURE 9 - Fenêtre docker images

docker run --name db -d --restart=always -v /var/lib/postgresql/data:/var/lib/ postgresql/data -e POSTGRES_USER=odoo -e POSTGRES_PASSWORD=odoo -p 5432:5432 postgresql

#container Odoo avec lien "link" sur postgresql "db"

docker run --name odoo_c_9.0 --restart=always -v /root/dester/:/etc/odoo -v / mnt/extra-addons:/mnt/extra-addons -v /var/lib/odoo:/var/lib/odoo -p 8069:8069 --link db:db -t odoo9.0

Explication de quelques attributs et paramètres de cette commande :

-- --name permet de definir le nom du container Docker. Ici 'db' pour postgrqsql et 'odoo-c-9.0' pour Odoo

-- --restart=always permet un démarrage automatique du docker à chaque redémarrage de la machine (noeud)

-- -e POSTGRES_PASSWORD=odoo : permet d'initialiser la variable POSTGRES_PASSWO à postgres qui représente ici le mot de passe de connexion à la base de données à l'inté-

rieur du docker.

-- -d permet au docker de tourner en libérant la console.

-- -p permet de faire correspondre le port de connexion à l'application dans le container au port de la machine physique (-p port-machinehote :port-dans-le-docker). remarquer que le port-dans-le-docker correspond au port EXPOSE dans le Dockerfile.

-- postgresql ici correspond à l'image crée précédemment.

-- -v : permet d'indiquer un dossier sur la machine physique pour persister les données du container. (-v dossier_machine_physique :dossier_dans_docker)

Si la création (le docker run) se passe bien, la commande docker ps permet de voir les docker crée uniquement encours d'exécution dans la machine hôte. La commande docker ps -a permet de voir tous les containers (encours, suspendus,etc.) dans la machine hôte.

$docker ps

CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES

2009b2442c49 hypriot/rpi-dockerui "/dockerui -e http://" 6 weeks ago Up 6 hours 0.0.0.0:9000->9000/tcp tiny_saha

a9f57b9e9ebf hypriot/rpi-swarm "/swarm manage -H :60" 6 weeks ago Up 6 hours 2375/tcp, 0.0.0.0:6000->6000/tcp naughty_hugle

86ee357572d3 hypriot/rpi-swarm "/swarm join -adverti" 6 weeks ago Up 6 hours 2375/tcp swarm-agent-2

c~Tchuenché Rodrigue Élève Ingénieur En Informatique 69

70 IAI Gabon

c~Tchuenché Rodrigue Élève Ingénieur En Informatique 70

$docker ps -a

CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES

c7b8e84ffb4e hypriot/rpi-busybox-httpd "/bin/busybox httpd -" 6 weeks ago Exited (137) 6 weeks ago 0.0.0.0:80->80/tcp busybox1

f58d0a4e0439 hypriot/rpi-consul "/consul agent -dev -" 6 weeks ago Up 6 hours consul

1550aec5185f hypriot/rpi-swarm "/swarm join -adverti" 7 weeks ago Up 6 hours 2375/tcp swarm-agent-1

On constate que pour un container Docker donné, on a :

~ CONTAINER ID : c'est un id permettant d'identifier un container de façon unique. ~ IMAGE : c'est l'image à partir de laquelle on a crée le container.

~ COMMAND : c'est la commande qui s'exécute au lancement du docker container. ~ CREATED : c'est la date de création du container Docker.

~ STATUS : c'est l'état du container à un moment donné.

~ NAME : c'est le nom du container. Ce nom est soit généré automatiquement par le moteur docker à la création du container soit donner par l'utilisateur.

NB : Une fois le container docker créé et encours, on peut soit l'arrêter, le supprimer ou le relancer. Soit le Container odoo_9 :

docker stop odoo_9; docker rm odoo_9; docker start odoo_9.

La connexion au serveur postgresql ou à l'application odoo se fait normalement comme dans une machine ou un serveur standard à partir de l'adresse du noeud.

Nous pouvons ainsi lancer autant de container à partie de la même image. Dans le cas d'Odoo, nous pouvons lancer autant d'instances odoo souhaitées selon la puissance du noeud. Il suffit dans notre cas de changer la correspondance de port sur la machine (noeud) physique en laissant le port du docker fixe puisqu'il correspond au port dans l'image et de changer aussi le nom du container docker.

Exemple

$docker run --name odoo_91 --restart=always -v /var/lib/postgresql/data:/var/ lib/postgresql/data -e POSTGRES_PASSWORD=postgres -d -p 8070:8069 -p 5433:5432 odoo_c9

$docker run --name odoo_92 --restart=always -v /var/lib/postgresql/data:/var/ lib/postgresql/data -e POSTGRES_PASSWORD=postgres -d -p 8071:8069 -p 5434:5432 odoo_c9

$docker run --name odoo_93 --restart=always -v /var/lib/postgresql/data:/var/ lib/postgresql/data -e POSTGRES_PASSWORD=postgres -d -p 8072:8069 -p 5435:5432 odoo_c9

.8 Annexe 8

Mise en oeuvre Docker swarm: <>

71 IAI Gabon

c~Tchuenché Rodrigue Élève Ingénieur En Informatique 71

a) Sur chaque noeud du cluster, faire ceci

1. Update HYPRIOT OS et des moteurs Docker si la version a changé

$sudo apt-get update && apt-get install --only-upgrade docker-hypriot docker-compose

2. éditer le fichier /etc/default/docker en ajoutant ceci àla variables DOCKER OPTS

_

$DOCKER_OPTS="--storage-driver=overlay -D -H tcp://0.0.0.0:2375 --cluster -store consul://172.16.0.51:8500 --cluster-advertise=eth0:2375"

3. Redémarrer le service docker

$systemctl restart docker

b) Sur le noeud Consul, s'assurer que l'image rpi-consul existe et faire ceci

1. Configuration du noeud consul (choisir le noeud consul qui va gérer le relai et le configurer ) cmd:

$docker run -d --net=host --restart=always --name=consul hypriot/rpi-consul agent -dev -ui -ui-dir=/ui -advertise=172.16.0.51 -bind =172.16.0.51 -client=172.16.0.51

2. Configuration du noeud esclave

$docker run -d --restart=always --name=swarm-agent-1 hypriot/rpi-swarm join -advertise 172.16.0.51:2375 consul://172.16.0.51:8500

c) Sur le noeud master actif, faire ceci:

1. Configuration des noeuds master

$docker run -d -p 6000:6000 --restart=always hypriot/rpi-swarm manage -H :6000 --replication --advertise 172.16.0.52:6000 consul ://172.16.0.51:8500

# NB: Ici nous avons choisi écouter le réseau cluster sur le port 6000 qui est un choix très arbitraire

2. Configuration des noeuds esclaves

$docker run -d --restart=always --name=swarm-agent-2 hypriot/rpi-swarm join -advertise 172.16.0.52:2375 consul://172.16.0.51:8500

3. exporter la variable host_opts $export DOCKER_HOST=tcp://172.16.0.52:6000

4. Créer un nouveau réseau de recouvrement, exécuter la commande suivante sur le maitre principal (un des maitres)

72 IAI Gabon

c~Tchuenché Rodrigue Élève Ingénieur En Informatique 72

$docker network create --driver=overlay --subnet=172.16.0.0/16 cluster_network

5. container pour visualiser les informations du cluster en interface graphique sur le port 9000 (choix du port arbitraire)

$docker run -d -p 9000:9000 --restart=always --privileged --env=" constraint:node==black-pearl2" hypriot/rpi-dockerui -e http ://172.16.0.52:6000

d) Sur le noeud master passif, faire ceci:

1. Configuration du noeud master

$docker run -d -p 6000:6000 --restart=always hypriot/rpi-swarm manage -H :6000 --replication --advertise 172.16.0.56:6000 consul ://172.16.0.51:8500

2. Configuration du noeud esclave

$docker run -d --restart=always --name=swarm-agent-6 hypriot/rpi-swarm join -advertise 172.16.0.56:2375 consul://172.16.0.51:8500

3. container pour visualiser les informations du cluster en interface graphique sur le port 9000 (choix du port arbitraire)

$docker run -d -p 9000:9000 --restart=always --privileged --env=" constraint:node==black-pearl6" hypriot/rpi-dockerui -e http ://172.16.0.56:6000

e) Sur le reste des noeuds esclaves, faire ceci:

#l'adresse IP 172.16.0.53 est appliqué au noeud 3, la changer pour les autres noeuds esclaves.

1. Configuration du noeud esclave

$docker run -d --restart=always --name=swarm-agent-3 hypriot/rpi-swarm join -advertise 172.16.0.53:2375 consul://172.16.0.51:8500

Après avoir fini, vérifier que le cluster est bien fonctionnel en vérifiant les résultats de ces commandes :

1. Information générale sur le cluster

$ docker -H :6000 info

Containers: 20

Running: 15

Paused: 0

Stopped: 5

Images: 20

Server Version: swarm/1.1.3

Role: replica

Primary: 172.16.0.56:6000

73 IAI Gabon

c~Tchuenché Rodrigue Élève Ingénieur En Informatique 73

Strategy: spread

Filters: health, port, dependency, affinity, constraint

Nodes: 9

black-pearl1: 172.16.0.51:2375

âStatus: Healthy

âContainers: 3

âReserved CPUs: 0 / 4

âReserved Memory: 0 B / 971.8 MiB

âLabels: executiondriver=native-0.2, kernelversion=4.1.17-hypriotos-v7

+, operatingsystem=Raspbian GNU/Linux 8 (jessie), storagedriver=

overlay

âError: (none)

âUpdatedAt: 2016-10-24T10:29:52Z

black-pearl2: 172.16.0.52:2375

âStatus: Healthy

âContainers: 3

âReserved CPUs: 0 / 4

âReserved Memory: 0 B / 971.8 MiB

âLabels: executiondriver=native-0.2, kernelversion=4.1.17-hypriotos-v7

+, operatingsystem=Raspbian GNU/Linux 8 (jessie), storagedriver=

overlay

âError: (none)

âUpdatedAt: 2016-10-24T10:29:57Z

black-pearl3: 172.16.0.53:2375

âStatus: Healthy

âContainers: 1

âReserved CPUs: 0 / 4

âReserved Memory: 0 B / 971.8 MiB

âLabels: executiondriver=native-0.2, kernelversion=4.1.17-hypriotos-v7

+, operatingsystem=Raspbian GNU/Linux 8 (jessie), storagedriver=

overlay

âError: (none)

âUpdatedAt: 2016-10-24T10:30:39Z

black-pearl4: 172.16.0.54:2375

âStatus: Healthy

âContainers: 3

âReserved CPUs: 0 / 4

âReserved Memory: 0 B / 971.8 MiB

âLabels: executiondriver=native-0.2, kernelversion=4.1.17-hypriotos-v7

+, operatingsystem=Raspbian GNU/Linux 8 (jessie), storagedriver=

overlay

âError: (none)

âUpdatedAt: 2016-10-24T10:30:19Z

black-pearl5: 172.16.0.55:2375

âStatus: Healthy

âContainers: 3

âReserved CPUs: 0 / 4

âReserved Memory: 0 B / 971.8 MiB

âLabels: executiondriver=native-0.2, kernelversion=4.1.17-hypriotos-v7

+, operatingsystem=Raspbian GNU/Linux 8 (jessie), storagedriver=

74 IAI Gabon

c~Tchuenché Rodrigue Élève Ingénieur En Informatique 74

overlay

âError: (none)

âUpdatedAt: 2016-10-24T10:30:44Z

black-pearl6: 172.16.0.56:2375

âStatus: Healthy

âContainers: 2

âReserved CPUs: 0 / 4

âReserved Memory: 0 B / 971.8 MiB

âLabels: executiondriver=native-0.2, kernelversion=4.1.17-hypriotos-v7

+, operatingsystem=Raspbian GNU/Linux 8 (jessie), storagedriver=

overlay

âError: (none)

âUpdatedAt: 2016-10-24T10:30:01Z

black-pearl7: 172.16.0.57:2375

âStatus: Healthy

âContainers: 1

âReserved CPUs: 0 / 4

âReserved Memory: 0 B / 971.8 MiB

âLabels: executiondriver=native-0.2, kernelversion=4.1.17-hypriotos-v7

+, operatingsystem=Raspbian GNU/Linux 8 (jessie), storagedriver=

overlay

âError: (none)

âUpdatedAt: 2016-10-24T10:30:32Z

black-pearl8: 172.16.0.58:2375

âStatus: Healthy

âContainers: 1

âReserved CPUs: 0 / 4

âReserved Memory: 0 B / 971.8 MiB

âLabels: executiondriver=native-0.2, kernelversion=4.1.17-hypriotos-v7

+, operatingsystem=Raspbian GNU/Linux 8 (jessie), storagedriver=

overlay

âError: (none)

âUpdatedAt: 2016-10-24T10:30:29Z

black-pearl9: 172.16.0.59:2375

âStatus: Healthy

âContainers: 3

âReserved CPUs: 0 / 4

âReserved Memory: 0 B / 971.8 MiB

âLabels: executiondriver=native-0.2, kernelversion=4.1.17-hypriotos-v7

+, operatingsystem=Raspbian GNU/Linux 8 (jessie), storagedriver=

overlay

âError: (none)

âUpdatedAt: 2016-10-24T10:30:40Z

Plugins:

Volume:

Network:

Kernel Version: 4.1.17-hypriotos-v7+

Operating System: linux

Architecture: arm

CPUs: 36

75 IAI Gabon

Total Memory: 8.541 GiB Name: a9f57b9e9ebf

Dans ce résultat info, nous avons :

· Nombre et détails sur les noeuds

· Nombre de containers du cluster

· Capacité globale du cluster (CPU, RAM)

· Nombre d'images du cluster

· etc.

2. Liste des noeuds du cluster

$ docker run --rm hypriot/rpi-swarm list consul://172.16.0.51:8500

time="2016-10-24T10:33:16Z" level=info msg="Initializing discovery

without TLS"

172.16.0.51:2375

172.16.0.52:2375

172.16.0.53:2375

172.16.0.54:2375

172.16.0.55:2375

172.16.0.56:2375

172.16.0.57:2375

172.16.0.58:2375

172.16.0.59:2375

3. Statistique occupation CPU des noeuds $docker -H :6000 stats

FIGURE 10 - Fenêtre résultat docker stats

4. Liste des Containers du cluster $docker -H :6000 ps

.9 Annexe 9

Répartition de charge : <>

c~Tchuenché Rodrigue Élève Ingénieur En Informatique 75

76 IAI Gabon

c~Tchuenché Rodrigue Élève Ingénieur En Informatique 76

FIGURE 11 - Fenêtre résultat docker ps sur cluster

1. Installation de Haproxy Taper les commandes suivantes:

$sudo apt-get update

$sudo apt-get install haproxy

2. Configuration de Haproxy

Le fichier de configuration est le suivant /etc/haproxy/haproxy.cfg. Faites un backup du fichier de base au cas ou. Contenu du fichier dans notre cas. (en respectant l'indentation)

global

log /dev/log local0

log /dev/log local1 notice

chroot /var/lib/haproxy

stats socket /run/haproxy/admin.sock mode 660 level admin

stats timeout 30s

user haproxy

group haproxy

daemon

# Default SSL material locations ca-base /etc/ssl/certs

crt-base /etc/ssl/private

# Default ciphers to use on SSL-enabled listening sockets.

# For more information, see ciphers(1SSL). This list is from:

# https://hynek.me/articles/hardening-your-web-servers-ssl-ciphers /

ssl-default-bind-ciphers ECDH+AESGCM:DH+AESGCM:ECDH+AES256:DH+ AES256:ECDH+AES128:DH+AES:ECDH+3DES:DH+3DES:RSA+AESGCM:RSA+AES: RSA+3DES:!aNULL:!MD5:!DSS

ssl-default-bind-options no-sslv3

defaults

77 IAI Gabon

log global

mode http

option httplog

option dontlognull

timeout connect 5000

timeout client 50000

timeout server 50000

errorfile 400 /etc/haproxy/errors/400.http errorfile 403 /etc/haproxy/errors/403.http errorfile 408 /etc/haproxy/errors/408.http errorfile 500 /etc/haproxy/errors/500.http errorfile 502 /etc/haproxy/errors/502.http errorfile 503 /etc/haproxy/errors/503.http errorfile 504 /etc/haproxy/errors/504.http

listen stats :70

stats enable

stats hide-version

stats scope webfront

stats scope webbackend

stats uri /

stats realm Haproxy\ Statistics

stats auth haproxy:secret

stats refresh 1s

frontend webfront

bind 172.16.0.50:8070

mode http

option httplog

default_backend webbackend

backend webbackend mode http

option forwardfor option httpchk

balance roundrobin

server web01

172.16.0.53:8069 weight

1

cookie web01 check inter

1s

server web02

172.16.0.54:8069 weight

1

cookie web02 check inter

1s

server web03

172.16.0.56:8069 weight

1

cookie web03 check inter

1s

option httpchk GET /

http-check expect status 200

Explication de quelques terminologie:

global : Dans cette section, on défini les paramètres globaux de haproxy, les logs (dans syslog), l'utilisateur et le groupe de fonctionnement du service. Il est possible aussi si le serveur héberge plusieurs services de chrooter haproxy.

defaults: Dans cette section, on défini certains paramètres par défaut. Nous avons : -- mode : mode de fonctionnement par défaut du load-balancer : http donc load-balancing sur le niveau 7 du modèle OSI;

-- maxconn : nombre de connexion maximum accepté sur le frontal, cette option

permet de limiter les connexions vers les backend et donc les attaques de type

c~Tchuenché Rodrigue Élève Ingénieur En Informatique 77

78 IAI Gabon

c~Tchuenché Rodrigue Élève Ingénieur En Informatique 78

(D)DOS, si le nombre de connexion dépasse cette limite les nouvelles connexions seront refusées;

-- timeout : différents timeout permettant de couper les connexions trop longues, ce qui permet par exemple de limiter les attaques de type slowloris;

-- errorfile : il est possible de définir des pages d'erreur générique

listen stats : Dans cette section, on défini les paramètres liés aux statistiques de charges. haproxy met à disposition une page de stats accessible, ici par exemple cette page sera accessible sur l'ip virtuelle 172.16.0.50 et le port 70 avec une authentification assez complexe!!!

(voir figure)

FIGURE 12 - Fenêtre statistique Haproxy

Backend / Frontend : Le frontend est un bloc de configuration qui permet de définir toutes les règles qui s'appliqueront (domaines écoutés, limitations, etc). Un frontend peut s'appliquer à un ou plusieurs bind. Le backend est un autre bloc de configuration, que l'on place derrière un frontend. Si le frontend gère ce qui est public (à "l"avant" du serveur), le backend gère "l'arrière". C'est là que vous définirez les serveurs web vers lesquels envoyer les requêtes. Côté frontend, on écoute sur l'IP et sur un port et on fait référence au backend « webservers » : Dans ces deux sections, nous avons :

-- bind : permet de dire sur quelle IP et quel port HAProxy doit écouter le réseau. Par exemple, 172.16.0.50 sur le port 8070.

-- acl une "access control list" permet de définir des conditions dans un bloc, par exemple "si le domaine contient site1, alors faire cela, si la requête est en https, alors faire ceci".

-- mode http : on définit que ce frontend va traiter uniquement le protocole HTTP (et donc aussi HTTPS). Cela permet déjà à haproxy d'analyser les requêtes, et de rejeter tout ce qui n'est pas formaté correctement vis à vis des RFC.

-- option httplog : permet de logguer le détail des requêtes http. Cela permet d'avoir plus d'informations dans les logs haproxy (headers, session http, ...).

79 IAI Gabon

-- option httpchk : le httpchk permet de faire en sorte que haproxy vérifie à tout moment l'état des serveurs web derrière lui. Il peut ainsi savoir si le serveur est prêt à recevoir des requêtes, basculer vers un serveur de secours, afficher une page d'erreur en cas de panne, etc. De base, c'est un simple check HTTP sur le / qui est effectué, mais il est possible par exemple de spécifier un script ou un chemin précis.

-- forwardfor except 127.0.0.1 : cette option va permettre d'ajouter un en tête xfor-wardfor dans les requêtes qui passent par le backend, en tête contenant la véritable adresse IP du visiteur. En effet, les requêtes passant par le proxy, c'est son IP qui sera vu niveau réseau par le serveur web ce qui peut être gênant pour faire des statistiques de visites par exemple, car vous auriez l'impression que toutes les visites viennent du serveur proxy... Le except 127.0.0.1 permet d'éviter d'ajouter cet en tête si c'est 127.0.0.1 qui a généré la requête.

-- server web01,web02,web03 : cette définition va permettre d'indiquer le serveur vers lequel transmettre les requêtes. 172.16.0.53, 172.16.0.54,172.16.0.56 sont bien sûr les adresses IP des serveurs web web01, web02,web03. :8069 permet d'indiquer le port ou transmettre. Il est possible d'indiquer plusieurs lignes pour définir plusieurs serveur web et faire de la répartition de charge.

-- maxconn 32 : permet de limiter le nombre maximum de connexions gérées par ce serveur, ici 32. Cela permet d'éviter de surcharger le serveur web au dessus de sa

capacité par exemple, et de mitiger directement et à peu de coût une attaque.

-- balance roundrobin permet de choisir l'algorithme de répartition à utiliser. Il existe plusieurs façon de répartir les requêtes :

a) roundrobin : les requêtes sont réparties les unes après les autres sur chaque serveur de façon uniforme (modulo le paramètre weight);

b) leastconn : les requêtes sont envoyées vers le serveur le moins chargé;

c) source : les requêtes seront toujours envoyées vers le même serveur backend pour la même source. Ce qui permet par exemple d'être sur de renvoyer vers le bon serveur web si les sessions sont stockées en dur

Quelques Paramètres ligne server dans backend:

a) nom IP :port : le nom du serveur, son IP et son port;

b) weight : on est en mode roundrobin mais on peut affecter un poids aux serveurs, par exemple si un est plus puissant que l'autre il aura un poids supérieur, la somme des poids doit faire 100;

c) cookie nom : nom du cookie, ce paramètre est en relation avec la ligne cookie. Cela permet de faire plus ou moins la même chose que pour le mode source. Le proxy va positionner un cookie ici nommé LBN avec pour contenu le nom du serveur backend;

d) check inter 1s : vérifie toutes les secondes que le serveur est disponible Après avoir fini les configurations, redémarrer le service haproxy.

$service haproxy restart

#voir etat service

$service haproxy status

c~Tchuenché Rodrigue Élève Ingénieur En Informatique 79

80 IAI Gabon

c~Tchuenché Rodrigue Élève Ingénieur En Informatique 80

FIGURE 13 - Fenêtre status Haproxy

.10 Annexe 10

Haute disponibilité : <>

1. Installation de Heartbeat sur les deux serveurs maitres Taper les commandes suivantes:

$sudo apt-get install heartbeat

Il arrive souvent que l'installation ne se termine pas correctement, dans ce cas, éditer le fichier /etc/openhpi/openhpi.conf en commentant la ligne :

#OPENHPI_UNCONFIGURED = "YES"

Une fois ceci fait, désinstaller heartbeat avec cette commande : sudo apt-get remove --purge heartbeat

Et ré-installer heartbeat :

$sudo apt-get install heartbeat

Une fois heartbeat bien installé, pour le démarrer il faudra d'abord le configurer.

2. Configuration de heartbeat sur les deux serveurs maitres Les trois fichiers à créer et à configurer obligatoirement sont les suivants : 4

-- Le fichier /etc/ha.d/ ha.cf

-- le fichier /etc/ha.d/haresources -- le fichier /etc/ha.d/authkeys

(a) Le fichier /etc/ha.d/ ha.cf

Ce fichier sert de configuration générale. Quand ce fichier n'existe pas il faut le créer et l'éditer. Dans notre cas, son contenu est le suivant :

4. Source : Site1 Site2

81 IAI Gabon

$sudo nano /etc/ha.d/ ha.cf

# Contenu ******************************************************** mcast eth0 239.0.0.10 694 1 0

baud 19200

serial /dev/ttyS0

debugfile /var/log/ha.debug

logfile /var/log/ha.log

logfacility local0

# temps avant d.avertir dans le log warntime 4

# temps nécessaire avant de déclarer un noeud comme mort deadtime 5

# valeur utilise pour le démarrage (au moins 2 fois le deadtime) initdead 15

# temps entre 2 battements (2 signifie 2s, sinon 2000ms) keepalive 2

#Re-balance les services sur le maitre primaire quand il revient en ligne

auto_failback off

#Serveurs du cluster node black-pearl2 node black-pearl6

NB : Attention! Pour que tout fonctionne bien il faut s'assurer que vous puissiez faire un ping vers black-pearl2 depuis black-pearl6 et vice-versa.

(b) Le fichier /etc/ha.d/haresources

Ce fichier sert de configuration des ressources.Il indique quels sont les services à rendre hautement disponibles. Quand ce fichier n'existe pas il faut le créer et l'éditer. Dans notre cas, son contenu est le suivant :

$sudo nano /etc/ha.d/haresources

# Contenu ********************************************************

# On doit commencer la ligne par le nom du serveur maitre. Suivi par la description des services rendus par le cluster.

black-pearl2 IPaddr::172.16.0.50/16/eth0:virt haproxy

(c) Le fichier /etc/ha.d/authkeys

Ce fichier contient la méthode d'encryptage utilisée pour la communication des serveurs. Cela peut être un mot de passe, ou un simple mot. Quand ce fichier n'existe

c~Tchuenché Rodrigue Élève Ingénieur En Informatique 81

82 IAI Gabon

pas il faut le créer et l'éditer. Dans notre cas, son contenu est le suivant : $sudo nano /etc/ha.d/authkeys

# Contenu ********************************************************

auth 1

1 md5 hypriot

2 crc

3 sha1 hypriot

# ici nous avons defini 3 méthodes d'encryptage et nous avons utilisé la méthode 1 (au choix)

Après avoir configuré ce fichier, toujours lui donner le droit rwx 600. $sudo chmod 600 /etc/ha.d/authkeys

Après ces trois fichiers, dans le fichier /etc/hosts de chaque serveur , renseigner les valeurs suivantes si c'est pas déjà fait :

$sudo nano /etc/hosts

#adresse_ip_serveur1 nom_serveur1

172.16.0.52 black-pearl2 172.16.0.56 black-pearl6

Ensuite nous allons désactiver le démarrage automatique de HaProxy sur les serveurs : $insserv -r haproxy

Enfin sur les deux serveur arrêtez haproxy : $sudo /etc/init.d/haproxy stop

et démarrer le service heartbeat sur les deux serveurs en commençant par le serveurs maitres primaire

$systemctl restart heartbeat.service

c~Tchuenché Rodrigue Élève Ingénieur En Informatique 82

83 IAI Gabon

RÉFÉRENCES BIBLIOGRAPHIQUES

Articles et Livres

[1 ] Tidiane Massouba,2013-2014, Etude et implémentation d'un cluster low-cost basé sur Raspberry pi,UNIVERSITE GASTON BERGER DE SAINT-LOUIS DU SÉNÉGAL, U.F.R DE SCIENCES APPLIQUÉES ET DE TECHNOLOGIE SECTION D'INFORMATIQUE, Mémoire de Maîtrise Informatique

[2 ] Run Hypriot Docker BirthdayParty#3 app, http://textlab.io/doc/2310814/run-hypriot-do 233-app

Documents web

[1 ] Raspberry Pi, https://fr.wikipedia.org/wiki/Raspberry_Pi

[2 ] Bien choisir vos accessoires pour les Raspberry Pi 3 et 2, http://raspbian-france. fr/acheter-raspberry-pi-3-accessoires/

[3 ] Dockerisez votre Raspberry Pi!, http://raspbian-france.fr/docker-raspberry-pi/

[4 ] Docker, https://docs.docker.com/

[5 ] Présentation de Docker, https://www.grafikart.fr/tutoriels/docker/docker-intro-634

[6 ] Comprendre Docker , https://www.wanadev.fr/23-tuto-docker-comprendre-docker-partie1

[7 ] How to get Docker running on your Raspberry Pi using Windows, http://blog. hypriot.com/getting-started-with-docker-and-windows-on-the-raspberry-pi/

[8 ] Docker swarm, https://docs.docker.com/swarm/

[9 ] Installer PostgreSQL 9.3 sur Raspberry Pi Raspbian, http://domoenergytics.com/ domo.energy/Installer-PostgreSQL-9-3-sur

[10 ]Installer sur Raspberry, http://blog.hypriot.com/post/how-to-setup-rpi-docker-swarm/

[11 ] Docker en production : la bataille sanglante des orchestrateurs de conteneurs, http:// blog.octo.com/docker-en-production-la-bataille-sanglante-des-orchestrateurs-de-con

[12 ] Configurer un reverse proxy avec haproxy, https://blog.victor-hery.com/index. php?article21/configurer-un-reverse-proxy-sous-haproxy

[13 ] Load Balancing with HAProxy, https://serversforhackers.com/load-balancing-with-hapr

[14 ] Mise en place haproxy Debian 8, http://www.hisyl.fr/mise-en-place-haproxy-debian-8/

[15 ] [Tuto]HA : Mettre en place deux serveurs HaProxy actif / passif avec Heartbeat, http: // denisrosenkranz.com/tutoha-mettre-en-place-deux-serveurs-haproxy-actif-passif-av #comment-409445

[16 ] CLUSTER HAUTE-DISPONIBILITÉ AVEC ÉQUILIBRAGE DE CHARGE, http: // connect.ed-diamond.com/GNU-Linux-Magazine/GLMF-097/Cluster-haute-disponibilite-a

[17 ] A Raspberry Pi Docker Cluster, http://www.informaticslab.co.uk/infrastructure/ 2015/12/09/raspberry-pi-docker-cluster.html

c~Tchuenché Rodrigue Élève Ingénieur En Informatique 83






Bitcoin is a swarm of cyber hornets serving the goddess of wisdom, feeding on the fire of truth, exponentially growing ever smarter, faster, and stronger behind a wall of encrypted energy








"Il faut répondre au mal par la rectitude, au bien par le bien."   Confucius