Vous êtes sur la page 1sur 10

TRAVAUX PRATIQUES

Architecture détaillée de la mise en place d’un serveur web hautement disponible

Load Balancing service


Ce service est le point d'entrée pour toutes les requêtes du service. Il a en charge le dispatch
de ces requêtes sur les serveurs d’application en fonction de la charge de ceux-ci. La
configuration sera faite de manière à ce que le serveur le moins sollicité reçoive les nouvelles
demandes.

Le logiciel qui est utilisé pour ceci est haproxy (http://www.haproxy.org/). C’est le logiciel le
plus reconnu et le plus puissant, rapide et flexible disponible sur le marché de l'open source.

Dimensionnement machines

CPU 2 cores

RAM 1 GB

Disk ● /: 5GB

OS Debian GNU/Linux buster 10

Listing des machines

Hostname ip

lbs-vip (service ip) 10.10.10.10

lbs-1 10.10.10.11
lbs-2 10.10.10.12

Procédure d’installation
Redondance IP
La première chose à installer est la mise en place du système master/slave IP en utilisant ucarp
qui est un équivalent du protocole VRRP mais libre et qui se configure vraiment facilement sur
une debian :

root@lbs-1:~# apt-get install ucarp

## next only need to add configuration into /etc/network/interfaces


root@lbs-1:/etc/network# nano interfaces

address 10.10.10.11
netmask 255.255.255.0
gateway 10.10.10.1
ucarp-vid 10
ucarp-vip 10.10.10.10
ucarp-password toto
ucarp-advskew 0
ucarp-advbase 1
ucarp-master yes

iface enp0s3:ucarp inet static


address 10.10.10.10
netmask 255.255.255.255
root@lbs-1:/etc/network# service networking restart

Load Balancer
Le load balancing entre les serveurs va être effectué à l’aide du logiciel HA-Proxy. Celui-ci est
relativement simple à installer et administrer. Nous utilisons la version 1.8.19 qui fournit par
défaut sous debian buster. Cette version suffit à nos besoins et est très stable. La
documentation officielle est disponible ici http://cbonte.github.io/haproxy-
dconv/1.5/configuration.html.

Installation du software
root@lbs-1:~# apt-get install haproxy
Reading package lists... Done
Building dependency tree
Reading state information... Done
Suggested packages:
vim-haproxy haproxy-doc
The following NEW packages will be installed:
haproxy
0 upgraded, 1 newly installed, 0 to remove and 0 not upgraded.
Need to get 641 kB of archives.
After this operation, 1,314 kB of additional disk space will be used.
----

Fichier de configuration de base, nous allons séparer la configuration haproxy en plusieurs


partie afin de simplifier la compréhension. ce premier fichier permet la configuration de
base pour celui-ci avec la mise en place du logging de toutes les requêtes vers syslog,
l’interface de monitoring et les pages d’erreur au besoin:
/etc/haproxy/haproxy.cfg:
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

defaults
log global
mode http
option httplog
option forwardfor
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

peers esi
peer lbs-1 10.10.10.11:1024
peer lbs-2 10.10.10.12:1024

Service Web
Maintenant la configuration est effectuée pour les “frontend” qui reçoivent les connections
des clients et les backend qui sont les serveurs d’application eux même. Le frontend http
redirige simplement les requêtes vers les 2 serveurs applicatifs.
/etc/haproxy/haproxy.cfg:


backend backend_http
balance leastconn
server www-1 10.10.10.21:80 check
server www-2 10.10.10.22:80 check

frontend http
bind *:80
default_backend backend_http

Le service est maintenant disponible sur les ports http(80) en mode http vers les 2 serveurs
de production.
Application Web Servers
Les serveurs d’application web sont les machines sur lesquelles le service apache est
exécuté.
Ce sont les machines qui reçoivent toute la charge des clients. Le service est construit de
telle manière que l’on peut facilement ajouter des machines applications à tout moment si
l’utilisation du service le nécessite.

Dimensionnement machines

CPU 2 cores

RAM 1GB

Disk ● /: 5 GB

OS Debian GNU/Linux buster 10

Listing des machines

Hostname ip

www-1 10.10.10.21

www-2 10.10.10.22

Procédure d’installation
Apache2
Installation de apache2 :
root@www-1:~# apt-get install apache2
Reading package lists... Done
Building dependency tree
Reading state information... Done
The following extra packages will be installed:
apache2-bin apache2-data apache2-utils libapr1 libaprutil1 libaprutil1-dbd-sqlite3
libaprutil1-ldap liblua5.1-0 ssl-cert
Suggested packages:
apache2-doc apache2-suexec-pristine apache2-suexec-custom openssl-blacklist
The following NEW packages will be installed:
apache2 apache2-bin apache2-data apache2-utils libapr1 libaprutil1 libaprutil1-dbd-
sqlite3 libaprutil1-ldap liblua5.1-0 ssl-cert
0 upgraded, 10 newly installed, 0 to remove and 0 not upgraded.
Need to get 1,942 kB of archives.
After this operation, 6,643 kB of additional disk space will be used.
Do you want to continue? [Y/n]
Get:1 http://http.debian.org/debian/ buster/main libapr1 amd64 1.5.1-3 [95.3 kB]

…....

Montage du shared storage


Afin de partager les données entre les serveurs il est nécessaire d’utiliser le stockage partage
et de le configurer sur les serveurs web
root@www-1:~# apt-get install nfs-common

root@www-1:~# mkdir /webdata/
root@www-1:~# chown www-data:www-data /webdata/www

# add fstab entries


root@www-1:~# nano /etc/fstab
10.10.10.30:/share/www-home /var/www nfs hard,nfsvers=3 0 0

root@www-1:~# mount 10.10.10.30:/share/www-home /webdata/

# To check everything is fine check mount output for nfs shares


root@www-1:~# mount | grep nfs

Maintenant nous allons mettre les donnés de nos pages dans le dossier /webdata

Le dossier par défaut ou sont stockés les page web dans Debian se trouve dans
/var/www/ nous allons donc mettre le contenu du ce dossier dans /webdata et créer un lien
symbolique vers le dossier d’origine:

Sur www-1 faire:

root@www-1:~# mv /var/www /webdata/


root@www-1:~# ln -s /webdata/www/ /var/

Sur www-2 faire

root@www-2:~# rm -rvf /var/www/


root@www-2:~# ln -s /webdata/www/ /var/

NAS service

Le service NAS va permettre aux serveurs d’application de stocker tous les éléments à partager
entre eux. Cela inclut le code source des applications, et diverses autres données si necessaire.

Le service permet le partage via l’utilisation du protocole NFSv3 implémente nativement sur
les OS linux. Pour la haute disponibilité du service le logiciel DRBD (http://www.drbd.org/)
permet de synchroniser 2 volumes disque en continue et la suite heartbeat (http://www.linux-
ha.org/wiki/Heartbeat) permet le failover entre les 2 servers.

Dimensionnement machines

CPU 2 cores

RAM 1 GB

Disk ● /: 5 GB
● / :data 1GB
OS Debian GNU/Linux buster 10

Listing des machines

Hostname ip

nas-vip (service ip) 10.10.10.30

nas-1 10.10.10.31

nas-2 10.10.10.32

Procédure d’installation
Pour la synchronisation des données entre les 2 servers NAS nous utilisons DRBD
(http://www.drbd.org/). Ce système permet une synchronisation en continue de block device
en mode raid1 sur le réseau. Celui-ci est très bien supporté depuis plusieurs années et est très
fiable. la procédure d’installation est assez simple sur debian en suivant la documentation
officielle en parallèle (http://www.drbd.org/en/doc/users-guide-84).

Auparavant, il faut s’assurer avoir créer la partition qui sera utilisée pour les données. A faire
sur les 2 serveurs

root@nas-1:~# fdisk /dev/sdb

Command (m for help): n


Partition type:
p primary (0 primary, 0 extended, 4 free)
e extended
Select (default p): p
Partition number (1-4, default 1):
Using default value 1
First sector (2048-16777215, default 2048):
Using default value 2048
Last sector, +sectors or +size{K,M,G} (2048-16777215, default 16777215):
Using default value 16777215

Command (m for help): w


The partition table has been altered!

Calling ioctl() to re-read partition table.


Syncing disks.

#Formater la partition créée en ext4


root@nas-1:/etc/drbd.d# mkfs.ext4 -L data /dev/drbd1

Cette partie est à effectuer sur les 2 serveurs NAS :

root@nas-1:~# apt-get install drbd-utils

## Activer le module:
root@nas-1:~#modprobe drbd
Maintenant que nos disques et DRBD sont mis en place nous allons configurer la
réplication des données entre les deux disques.Pour ce faire nous allons créer et éditer
un fichier que nous allons appeler data.res dans le dossier /etc/drbd.d/.

Attention les commandes et les configurations suivantes sont à faire sur les deux
serveurs.

root@nas-1:~# cd /etc/drbd.d/
## create the configuration file with data ressource parameters

root@nas-2:/etc/drbd.d# vim data.res


resource data {

startup {
wfc-timeout 30;
degr-wfc-timeout 15;
}

disk {
on-io-error detach;
}

syncer {
rate 100M;
}

on nas-1 {
device /dev/drbd1;
disk /dev/sdb1;
address 10.10.10.31:7788;
meta-disk internal;
}
on nas-2 {
device /dev/drbd1;
disk /dev/sdb1;
address 10.10.10.32:7788;
meta-disk internal;
}
}

## Init and run our ressource


root@nas-2:/etc/drbd.d# drbdadm create-md data.
root@nas-2:/etc/drbd.d# drbdadm up data

## checking the status on both servers


root@nas-1:/etc/drbd.d# drbd-overview
1:data/0 Connected Secondary/Secondary Inconsistent/Inconsistent
root@nas-2:/etc/drbd.d# drbd-overview
1:data/0 Connected Secondary/Secondary Inconsistent/Inconsistent

Nous sommes prêts à continuer le setup du cluster drbd. Attention les étapes suivantes ne
sont à effectuer que sur le serveur master actuel (-1) :

## init the current master as primary.


root@nas-1:/etc/drbd.d# drbdadm -- --overwrite-data-of-peer primary data
root@nas-1:/etc/drbd.d# drbd-overview
1:data/0 SyncSource Primary/Secondary UpToDate/Inconsistent
[>....................] sync'ed: 0.1% (524236/524268)Mfinish: 8:11:35 speed:
18,116 (18,116) K/sec
## first init started, This will take a while but we can start building filesystem

## Et nfs2 en secondary (pas forcement obligatoire de faire ça)


root@nas-2:/etc/drbd.d# drbdadm secondary data

La partie synchronisation du nas est maintenant terminée une fois la première


synchronisation complète (cela peut prendre jusqu'à 12h en fonction de la vitesse du réseau).
Le statut de la synchronisation est vérifié avec la même commande “drbd-overview”.

Il reste maintenant à configurer le système de redondance qui est basé sur la solution
heartbeat.

Sur chacun des serveurs, il faut faire l’installation suivante :

## ajout d'entree dans /etc/hosts pour joindre les serveurs entre eux
echo '10.10.10.31 nas-1' >> /etc/hosts
echo '10.10.10.32 nas-2' >> /etc/hosts

## create mountpoint
mkdir /share/www-home

## Installation des packages sur les 2 servers


root@nas-[12]:/etc/drbd.d# apt-get install heartbeat

## installation du daemon nfs


root@nas-[12]:/etc/drbd.d# apt-get install nfs-kernel-server

## disable automatic nfs daemon startup
root@nas-1:/etc/ha.d# systemctl disable nfs-kernel-server

## on edite le fichier /etc/exports en ajoutant :


/share 10.10.10.0/24(rw,sync,fsid=0,no_root_squash,no_subtree_check)

Ensuite il faut créer la configuration heartbeat sur le premier host :

## basic system configuration


root@nas-1:/etc/ha.d# cat ha.cf
autojoin none
ucast enp0s3 10.10.10.31
ucast enp0s3 10.10.10.32
warntime 4
deadtime 5
initdead 15
keepalive 2

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


auto_failback on

#Serveurs du cluster
node nas-1
node nas-2
## creer le fichier qui contient la clé partagée entre les 2 serveurs
root@nas-1:/etc/ha.d# nano authkeys
auth 3
3 md5 my-auth-key

## Set the file right to 600 for security. Program won’t work if it’s not done.
root@nas-1:/etc/ha.d# chmod 600 authkeys

## setup ressources to be managed by heartbeat


root@nas-1:/etc/ha.d# nano haresources
nas-1 IPaddr::10.10.10.30/24/enp0s3 drbddisk::data Filesystem::/dev/drbd1::/share::ext4
nfs-kernel-server

## Start heartbeat on nas-1


root@nas-1:/etc/ha.d# /etc/init.d/heartbeat start

Wait a few seconds and check with drbd-overview that the partition /dev/drbd1 is well
mounted on /share.
If you do ip addr, you will notice that the virtual ip exists under enp0s3:0

## Start heartbeat on nas-2


root@nas-1:/etc/ha.d# etc/init.d/heartbeat start.

If you want to test:


Stop hearbeat on nas-1, and check drbd-overview on nas-2

La dernière configuration concerne le serveur nfs et les share qui lui sont associés. Afin de
parfaitement prendre la main en cas de problème, il est nécessaire de mettre sur les disques
redondés les fichiers de statut des espaces déjà mount par les clients. Attention une partie est
à effectuer sur le serveur nas-1 et l’autre sur le 2.

## server 1
root@nas-1:~# /etc/init.d/nfs-kernel-server stop
Stopping nfs-kernel-server (via systemctl): nfs-kernel-server.service.
root@nas-1:~# mv /var/lib/nfs /share/
root@nas-1:~# ln -s /share/nfs /var/lib/nfs
root@nas-1:~# chown statd:nogroup /var/lib/nfs
root@nas-1:~# mv /etc/exports /share/
root@nas-1:~# ln -s /share/exports /etc/exports
root@nas-1:~# /etc/init.d/nfs-kernel-server start
Starting nfs-kernel-server (via systemctl): nfs-kernel-server.service.
## server 2
root@nas-2:~# rm -rf /var/lib/nfs
root@nas-2:~# ln -s /share/nfs /var/lib/nfs
root@nas-2:~# chown statd:nogroup /var/lib/nfs
root@nas-2:~# rm /etc/exports
root@nas-2:~# ln -s /share/exports /etc/exports

La configuration des différents share expose aux autre machines est effectuée via le fichier
/etc/exports. Chaque share est décrit dans une ligne de configuration.

10.10.10.0/24(rw,async,no_root_squash)

Vous aimerez peut-être aussi