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


par Rodrigue Tchuenche
Institut Africain d'Informatique (IAI) - Ingénieur 2016
  

précédent sommaire

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

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

précédent sommaire






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