Haute disponibilité [HA] : Mise en place de DRBD et Apache sur Linux Debian 7

Mise en place de DRBD et Apache sur Linux Debian pour mettre en place une solution de haute disponibilité.

Publié le 03/11/2013

DRBD est un système de replication distribué en mode block. Cela permet de faire une sorte de RAID 1 sur IP. Dans notre cas nous allons mettre en place DRBD sur deux machines qui auront chacune une partition synchronisé via DRBD.

Si une de ces machines tombe, on retrouvera les données à l’identique sur l’autre machine.

L’objectif de ce tutorial est de monter un cluster de 2 noeuds disposant chacun d’apache et d’une partition en synchronisation drbd avec le repertoire www contenant les datas de notre vhost.

1 - Préparation des VM Debian

Pour la réalisation de maquettes, j’utilise un serveur Linux CentOS 5.3 avec KVM comme hyperviseur. Je prendrai donc cet environnement à titre d’exemple.

On va créer 2 machines virtuelles avec KVM de type Linux Debian 7 avec les paquets : apache2, drbd8-utils, htop et iotop.

Elles auront chacune les spécificités suivantes :

Machine 1 :

IP : 192.168.0.113
hostname : gg-front
Un second disque de type virtIO de 2 Go

Un fichier host avec le nom de la machine 2 associé à son IP :

su nano /etc/hosts 

Avec le contenu suivant :


127.0.0.1       localhost
127.0.0.1       gg-front
192.168.0.115   fresh-front

# The following lines are desirable for IPv6 capable hosts
::1     localhost ip6-localhost ip6-loopback
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters

Machine 2 :

IP : 192.168.0.115
hostname : fresh-front
Un second disque de type virtIO de 2 Go

Un fichier host avec le nom de la machine 2 associé à son IP :

su nano /etc/hosts 

Avec le contenu suivant :


127.0.0.1       localhost
127.0.0.1       fresh-front
192.168.0.113   gg-front

# The following lines are desirable for IPv6 capable hosts
::1     localhost ip6-localhost ip6-loopback
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters

2 - Préparation des partitions

Sur chacune des machines, nous allons préparer la partition de stockage pour DRBD :

su fdisk /dev/vdb 

A l’invite de commande de fdisk rentrer les commandes suivantes :

Commande (m pour l'aide): n
Type de partition :
p primaire (0 primaire(s), 0 étendue(s), 4 libre(s))
e étendue
Sélection (p par défaut) : p
Numéro de partition (1-4, par défaut 1): 1
Premier secteur (2048-2097151, par défaut 2048):
Utilisation de la valeur par défaut 2048
Dernier secteur, +secteurs or +taille{K,M,G} (2048-2097151, par défaut 2097151):
Utilisation de la valeur par défaut 2097151

Commande (m pour l'aide): w
La table de partitions a été altérée.

Appel de ioctl() pour relire la table de partitions.
Synchronisation des disques.

3 - Installation et paramétrage d’Apache

Sur chacune des VM, nous allons installer apache :

apt-get install apache2 

Puis configurer un vhost pour chacune d’entre elle.

Machine 1 :

nano /etc/apache2/sites-available/gg 

Contenu :


<VirtualHost *:80>
        ServerName gg-front
        ServerAdmin admin@domaine.tld

        DocumentRoot /mnt/srv/www/monsite
        <Directory />
                Options FollowSymLinks
                AllowOverride All
        </Directory>
        <Directory /mnt/srv/www/monsite/>
                Options Indexes FollowSymLinks MultiViews
                AllowOverride All
                Order allow,deny
                allow from all
        </Directory>

        ScriptAlias /cgi-bin/ /usr/lib/cgi-bin/
        <Directory "/usr/lib/cgi-bin">
                AllowOverride None
                Options +ExecCGI -MultiViews +SymLinksIfOwnerMatch
                Order allow,deny
                Allow from all
        </Directory>

        ErrorLog ${APACHE_LOG_DIR}/error.log

        # Possible values include: debug, info, notice, warn, error, crit,
        # alert, emerg.
        LogLevel warn

        CustomLog ${APACHE_LOG_DIR}/access.log combined

</VirtualHost>

Machine 2 :

nano /etc/apache2/sites-available/fresh 

Contenu :


<VirtualHost *:80>
        ServerName fresh-front
        ServerAdmin admin@domaine.tld

        DocumentRoot /mnt/srv/www/monsite
        <Directory />
                Options FollowSymLinks
                AllowOverride All
        </Directory>
        <Directory /mnt/srv/www/monsite/>
                Options Indexes FollowSymLinks MultiViews
                AllowOverride All
                Order allow,deny
                allow from all
        </Directory>

        ScriptAlias /cgi-bin/ /usr/lib/cgi-bin/
        <Directory "/usr/lib/cgi-bin">
                AllowOverride None
                Options +ExecCGI -MultiViews +SymLinksIfOwnerMatch
                Order allow,deny
                Allow from all
        </Directory>

        ErrorLog ${APACHE_LOG_DIR}/error.log

        # Possible values include: debug, info, notice, warn, error, crit,
        # alert, emerg.
        LogLevel warn

        CustomLog ${APACHE_LOG_DIR}/access.log combined

</VirtualHost>

Pour l’instant, le repertoire public où est stocké le site n’est pas encore disponible, donc on ne va pas activer nos vhost maintenant.

4 - Installation et paramétrage de DRBD

Sur chacune des VM, nous allons installer le paquet drbd8-utils :

apt-get install drbd8-utils 

Ensuite on active le module drbd :

modprobe drbd 

On vérifie ensuite la version installée :

modinfo drbd 

Configuration de la réplication entre les deux disques de chaque VM :

On va créer sur chaque VM un fichier de configuration drbd-config.res :

nano /etc/drbd.d/drbd-config.res 

Qui contiendra les informations suivantes :


resource srv {
   syncer {
      rate 100M;
   }


        on gg-front {
                device /dev/drbd0;
                disk /dev/vdb;
                address 192.168.0.115:7788;
                meta-disk internal;
        }
        on fresh-front {
                device /dev/drbd0;
                disk /dev/vdb;
                address 192.168.0.113:7788;
                meta-disk internal;
        }
}

Ce fichier contient la description de notre ressource drbd « srv ».

On va maintenant initialiser la ressource sur chacune des VM :

drbdadm create-md srv drbdadm up srv 

On vérifie que les noeuds communiquent entre eux :

drbd-overview 

A chaque étape de notre installation, on pourra consulter le statut de la ressource drbd avec la commande : drbd-overview.

Promotion de la machine 1 en tant que noeud primaire :

drbdadm -- --overwrite-data-of-peer primary srv 

Promotion de la machine 2 en tant que noeud secondaire :

drbdadm secondary srv 

La synchronisation initiale va alors se dérouler, on pourra consulter son avancement via la commande : cat /proc/drbd.

Une fois la synchronisation terminée, nous obtiendrons le résultat suivant après avoir lancé la commande cat /proc/drbd :

version: 8.3.11 (api:88/proto:86-96) srcversion: F937DCB2E5D83C6CCE4A6C9 0: cs:Connected ro:Primary/Secondary ds:UpToDate/UpToDate C r----- ns:1048508 nr:0 dw:0 dr:1049172 al:0 bm:64 lo:0 pe:0 ua:0 ap:0 ep:1 wo:f oos:0 

Création d’un système de fichier virtuel pour drbd et montage de la partition sur le noeud primaire (actif) :


mkfs.ext4 /dev/drbd0
mkdir /mnt/srv
mount /dev/drbd0
/mnt/srv/

On va maintenant pouvoir créer sur la machine 1, le repertoire www qui contiendra notre site :


mkdir /mnt/srv/www
mkdir /mnt/srv/www/monsite
nano /mnt/srv/www/monsite/index.html

On ajoute du contenu dans notre page d’accueil index.html :

<p>Hello DRBD</p> 

On va maintenant pouvoir vérifier que notre contenu s’est bien répliqué sur la machine 2. Pour ce faire, on va démonter la partition srv et passer la machine 1 en noeud secondaire. Le système de fichier ne peut être monter que sur le noeud primaire. Il faut donc à chaque fois répéter cette opération quand on veux accéder aux fichiers.

Sur la machine 1 :


cd /
umount /mnt/srv
drbdadm secondary srv

Sur la machine 2 :


cd /
drbdadm primary srv
mkdir /mnt/srv
mount /dev/drbd0 /mnt/srv

On va redémarrer apache sur la machine 2 :

service apache2 restart 

Si on va dans le repertoire /mnt/srv/www/monsite, on va voir notre fichier index.html que l’on vient de créer sur la machine 1. Notre système de replication est actif, va pouvoir activer nos vhost apache et effectuer quelques test de bascule.

5 - Activation des vhost et test

On va activer nos vhost sur chacune des VM :

Machine 1 :

a2ensite gg 

Machine 2 :

a2ensite fresh 

Actuellement notre machine 2 est déclarée comme noeud primaire, on pourra accéder au site via l’url : http://fresh-front

On va basculer la machine 1 en primaire et la machine 2 en secondaire :

Machine 2 :


cd /
umount /mnt/srv
drbdadm secondary srv

Machine 1 :


cd /
drbdadm primary srv
mount /dev/drbd0 /mnt/srv

On va pouvoir voir le site à l’url : http://gg-front.

Attention de bien avoir les hôtes gg-front et fresh-front renseigné dans le fichier hosts de la machine avec laquelle vous allez naviguer.

Source :