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 :