Archive

Archives pour 09/2007

Gestion des disques avancée : LVM et RAID Soft

1 LVM2 : Le gestionnaire de volumes logiques

1.1 Introduction à LVM :

1.1.1 Pourquoi aurais-je besoin de LVM ?

LVM est un mécanisme permettant de gérer l’allocation de l’espace disque aux applications et au utilisateurs à un niveau d’abstraction plus élevé que la conception habituelle des disques et partitions. Cette abstraction permet ainsi de s’affranchir des limitations de la gestion du stockage par partitions.

Les volumes logiques peuvent êtres redimensionnés, étendus sur un autre disques ou déplacés sur le système de stockage sous jacent sans les risques du redimmensionnement des partitions. Ils sont également nommés par des labels définis par l’utilisateurs sans recourir à la notation habituelle des disques (sda, sdb etc…).

Si à l’installation les tailles de partition de données ont été mal calculées causant des tailles de partition systèmes ou de données étriquées, avec LVM il n’est plus nécessaire de détruire ces partitions (et de réinstaller s’il s’agit d’une partition système), il suffit de redimensionner la partition.

1.1.2 Terminologie de LVM :

Volume Physique (PV ou Physical Volume) : Il s’agit d’un élément de stockage physique de l’ordinateur, comprendre un disque dur, une partition de disque, un disque en RAID logiciel etc… qui est attribué à LVM.

Groupe de Volume (VG ou Volume Group) : C’est un pool de volumes physiques dont la gestion est assurée par LVM.

Volume Logique (LV ou Logical Volume) : C’est un espace de stockage alloué sur un Groupe de Volume. Au final c’est ce qui est utilisé par le système en remplacement des partitions.

Physical Extent / Logical Extent : Les volumes logiques et physiques sont divisés en blocs de données. Ces blocs sont nommés ainsi et ont tous les même taille sur un même volume.

1.1.3 Installation :

LVM2 est désormais disponible en standard dans la plupart des distributions Linux. Si vous utilisez le noyau standard de votre distribution, les modules nécessaires seront déja compilés pour vous. Si vous utilisez un noyau personnalisé, je suis certain que vous saurez trouver vous même les options à sélectionner ;)
Il restera juste les outils en ligne de commande à installer :

# apt-get install lvm2

En effet, LVM ne s’administre qu’en ligne de commande. Néanmoins celles-ci sont simples, leur nom est suffisament explicite et il commence systématiquement par :

  • pv lorsqu’elles portent sur les volumes physiques
  • vg pour les commandes pour manipuler un groupe de volume
  • lv lorsqu’il s’agit d’administrer les volumes logiques

Ces commandes sont également présentes dans le « shell » lvm.

1.2 Administration de LVM2 :

1.2.1 Création d’un volume logique :

On commence par créer un périphérique physique LVM :

debian:~# pvcreate /dev/hdb1 VG1
  Physical volume "/dev/hdb1" successfully created
  Device VG1 not found (or ignored by filtering).
debian:~# pvdisplay /dev/hdb1
  --- NEW Physical volume ---
  PV Name               /dev/hdb1
  VG Name
  PV Size               4,09 GB
  Allocatable           NO
  PE Size (KByte)       0
  Total PE              0
  Free PE               0
  Allocated PE          0
  PV UUID               c2XjmK-HWad-xms2-2NXb-UsMn-ETfy-eXEyJF

Ensuite on créé un Volume Physique utilisant ce disque physique :

debian:~# vgcreate MyVG /dev/hdb1
  Volume group "MyVG" successfully created
debian:~# vgdisplay MyVG
  --- Volume group ---
  VG Name               MyVG
  System ID
  Format                lvm2
  Metadata Areas        1
  Metadata Sequence No  1
  VG Access             read/write
  VG Status             resizable
  MAX LV                0
  Cur LV                0
  Open LV               0
  Max PV                0
  Cur PV                1
  Act PV                1
  VG Size               4,09 GB
  PE Size               4,00 MB
  Total PE              1046
  Alloc PE / Size       0 / 0
  Free  PE / Size       1046 / 4,09 GB
  VG UUID               1tjZ0L-JHPS-43tc-jFD8-22Jh-QuQf-KLy5Pd

Il ne reste plusqu’à créer un ou plusieurs volumes logiques. Dans notre cas, nous allons créer deux volumes logiques. L’un nommé Softs et l’autre Data :

debian:~# lvcreate -L 1g -n Softs MyVG
  Logical volume "Softs" created

debian:~# lvcreate -L 2g -n Data MyVG
  Logical volume "Data" created

debian:~# lvdisplay -a
  --- Logical volume ---
  LV Name                /dev/MyVG/Softs
  VG Name                MyVG
  LV UUID                z4MFxB-8tvO-v5g3-zkyD-3lOD-AhST-hZqDRT
  LV Write Access        read/write
  LV Status              available
  # open                 0
  LV Size                1,00 GB
  Current LE             256
  Segments               1
  Allocation             inherit
  Read ahead sectors     0
  Block device           254:0

  --- Logical volume ---
  LV Name                /dev/MyVG/Data
  VG Name                MyVG
  LV UUID                Dj1iVU-wSCa-DLgT-hzlQ-ielB-bArY-EKkfPQ
  LV Write Access        read/write
  LV Status              available
  # open                 0
  LV Size                2,00 GB
  Current LE             512
  Segments               1
  Allocation             inherit
  Read ahead sectors     0
  Block device           254:1

On peut maintenant créer un système de fichier et monter ces volumes logiques dans l’arbrorescence. Par commodité il sera plus simple d’indiquer les lignes adéquates dans le fichier /etc/fstab.

debian:~# mkdir /mnt/Data
debian:~# mkfs.ext3 /dev/MyVG/Softs
debian:~# mkfs.ext3 /dev/MyVG/Data
debian:~# mount /dev/MyVG/Data /mnt/Data
debian:~# mount /dev/MyVG/Softs /usr/local

1.2.2 Redimensionnement d’un volume logique :

Il est important ici de voir que modifier la taille du volume logique ne revient à modifier que la taille de la « boite ». Il est indispensable de propager les modifications de la taille du système de fichier et cela doit être fait dans un ordre précis.

1.2.2.1 Agrandissement :

L’opération consiste à démonter le volume, le vérifier, augmenter la taille du volume logique et enfin augmenter la taille du système de fichiers.

debian:~# umount /mnt/Data/
debian:~# fsck /dev/MyVG/Data
fsck 1.40-WIP (14-Nov-2006)
e2fsck 1.40-WIP (14-Nov-2006)
/dev/MyVG/Data: clean, 11/262144 files, 25406/524288 blocks
debian:~# lvresize -L 3G /dev/MyVG/Data
  Extending logical volume Data to 3,00 GB
  Logical volume Data successfully resized
debian:~# fsck -f /dev/MyVG/Data
fsck 1.40-WIP (14-Nov-2006)
e2fsck 1.40-WIP (14-Nov-2006)
Passe 1 : vérification des i-noeuds, des blocs et des tailles
Passe 2 : vérification de la structure des répertoires
Passe 3 : vérification de la connectivité des répertoires
Passe 4 : vérification des compteurs de référence
Passe 5 : vérification de l'information du sommaire de groupe
/dev/MyVG/Data: 11/262144 files (9.1% non-contiguous), 25406/524288 blocks
debian:~# resize2fs /dev/MyVG/Data
resize2fs 1.40-WIP (14-Nov-2006)
Resizing the filesystem on /dev/MyVG/Data to 786432 (4k) blocks.
Le système de fichiers /dev/MyVG/Data a maintenant une taille de 786432 blocs.
debian:~# mount /dev/MyVG/Data /mnt/Data/
1.2.2.2 Rétrécissement :

L’opération consiste à démonter le volume, le vérifier, réduire la taille du système de fichier et enfin réduire la taille du volume logique.

debian:~# umount /mnt/Data/
debian:~# fsck -f /dev/MyVG/Data
fsck 1.40-WIP (14-Nov-2006)
e2fsck 1.40-WIP (14-Nov-2006)
Passe 1 : vérification des i-noeuds, des blocs et des tailles
Passe 2 : vérification de la structure des répertoires
Passe 3 : vérification de la connectivité des répertoires
Passe 4 : vérification des compteurs de référence
Passe 5 : vérification de l'information du sommaire de groupe
/dev/MyVG/Data: 11/393216 files (9.1% non-contiguous), 29518/786432 blocks
debian:~# resize2fs /dev/MyVG/Data 2G
resize2fs 1.40-WIP (14-Nov-2006)
Resizing the filesystem on /dev/MyVG/Data to 524288 (4k) blocks.
Le système de fichiers /dev/MyVG/Data a maintenant une taille de 524288 blocs.
debian:~# lvresize -L 2G /dev/MyVG/Data
  WARNING: Reducing active logical volume to 2,00 GB
  THIS MAY DESTROY YOUR DATA (filesystem etc.)
Do you really want to reduce Data? [y/n]: y
  Reducing logical volume Data to 2,00 GB
  Logical volume Data successfully resized
debian:~# mount /dev/MyVG/Data /mnt/Data/
debian:~# fd -h /mnt/Data/
debian:~# df -h /mnt/Data/
Sys. de fich.         Tail. Occ. Disp. %Occ. Monté sur
/dev/mapper/MyVG-Data
                      2,0G   68M  1,9G   4% /mnt/Data

1.2.3 Les snaphots :

Les snapshots constituent l’une des fonctionnalités clé de LVM2. Un snapshot est un cliché du volume à un instant t, ce qui est très pratique pour toutes les opérations qui nécessitent que les données ne soient pas modifiées comme les sauvegardes. De plus, depuis LVM2, les snapshots sont en lecture/écriture. Ce qui signifie qu’il est possible de faire un snapshot du système. De remonter le snapshot des partitions systèmes en lecture/écriture pour par exemple installer un logiciel sensible. Si le résultat n’a pas été problant, que les système est endommagé ou autre, il suffit de démonter ce snapshot, de remonter le volume logique puis de supprimer le snapshot et le tour est joué!

1.2.4.1 Création d’un snapshot :

Commençons par créer un snapshot du volume logique Softs :

debian:~# lvcreate -L512M -s -n SnapSofts /dev/MyVG/Softs
  Logical volume "SnapSofts" created
1.2.4.2 Montage d’un snapshot :

Un snapshot de monte comme n’importe quel volume logique :

debian:~# mkdir /mnt/snapsofts
debian:~# mount /dev/MyVG/SnapSofts /mnt/snapsofts/
1.2.4.3 Suppression d’un snapshot :
debian:~# umount  /mnt/snapsofts/
debian:~# lvremove /dev/MyVG/SnapSofts
Do you really want to remove active logical volume "SnapSofts"? [y/n]: y
  Logical volume "SnapSofts" successfully removed

1.2.4 Redimensionnement d’un Groupe de Volume :

Grâce à LVM, il est possible à tout moment d’ajouter ou de retirer des disques dans un groupe de volume pour ajuster l’espace disque nécessaire.

1.2.4.1 Agrandissement :

Ajoutons tout le disque /dev/hdd à notre groupe de volume MyVG. Pour cela il est obligatoire d’initialiser le disque via la commande pvcreate. C’est seulement après qu’il est possible d’étendre le volume de groupe pour qu’il utilise ce disque

debian:~# pvcreate /dev/hdd
  Physical volume "/dev/hdd" successfully created
debian:~# vgextend MyVG /dev/hdd
  Volume group "MyVG" successfully extended
debian:~# vgdisplay MyVG
  --- Volume group ---
  VG Name               MyVG
  System ID
  Format                lvm2
  Metadata Areas        2
  Metadata Sequence No  9
  VG Access             read/write
  VG Status             resizable
  MAX LV                0
  Cur LV                2
  Open LV               2
  Max PV                0
  Cur PV                2
  Act PV                2
  VG Size               12,07 GB
  PE Size               4,00 MB
  Total PE              3089
  Alloc PE / Size       768 / 3,00 GB
  Free  PE / Size       2321 / 9,07 GB
  VG UUID               1tjZ0L-JHPS-43tc-jFD8-22Jh-QuQf-KLy5Pd

On constate que désormais notre volume de groupe fait désormais 12Go. Cet espace est désormais accessible pour les volumes logiques créés (lvresize) ou à créer dans cet espace (lvcreate).

1.2.4.2 Retrait d’un disque :

Les opérations de retrait d’un disque peuvent être souhaitées lorsque l’un des disques est de capacité trop faible ou pire, lorsque celui-ci présente des signes de faiblesses. Avant de procéder à une telle opération, il est important de sauvegarder les données, ainsi que de s’assurer qu’au final la capacité du VG sera au moins équivalente à ce qu’elle était avant le retrait du disque.
Pour réduire un volume de groupe, il est nécessaire de déplacer tous les Physical Extent du premier disque vers le second.

debian:~# pvmove /dev/hdb1
  /dev/hdb1: Moved: 27,1%
  /dev/hdb1: Moved: 33,3%
  /dev/hdb1: Moved: 62,5%
  /dev/hdb1: Moved: 91,9%
  /dev/hdb1: Moved: 100,0%
debian:~# vgreduce MyVG /dev/hdb1
  Removed "/dev/hdb1" from volume group "MyVG"

Le disque /dev/hdb1 peut désormais être retiré sans perte de données car il était entièrement dédié à notre groupe de volume (une seule partition sur tout le disque).

2 Le RAID Logiciel :

2.1 Introduction :

Linux supporte depuis maintenant assez longtemps le RAID au niveau du noyau. Cela permet d’utiliser des disques en RAID sans pour autant nécessiter de contrôleur RAID. Le noyau supporte actuellement le RAID 0 (stripping), 1 (mirroring), 0+1 (stripping en mirroir), 4, 5 et 6 (parité).

2.2 Avantages et inconvénients du RAID logiciel :

Avantages :

  • Faible coût
  • Ne nécessite pas de contrôleur RAID
  • Pas de risque de corruption de données à cause d’un bug ou d’une mise à jour du firmware
  • Le format de données du RAID est ouvert
  • Le format du RAID est neutre du point de vue du contrôleur. Le RAID soft ne connait pas les problèmes de compatibilité entre les différents fabricants de carte
  • Les performances du RAID peuvent être augmentées par l’upgrade du CPU
  • Un niveau d’abstraction plus élevé permettant un éventail de matériel supporté plus étendu
  • Le noyau de Linux a une durée de support plus étendue que la plupart de celle fournie par les fabricants de cartes RAID
  • Il est plus rapide et facile de corriger un problème au niveau du noyau qu’au niveau matériel
  • Alors que les fonctionnalités d’une carte RAID sont fixées à l’achat pour un model donné, celles du noyau peuvent évoluer avec le temps
  • Certaines cartes RAID ATA et SATA ont tendance à masquer certaines fonctionnalités comme les alertes SMART

Inconvénients :

  • Le cache des cartes RAID améliore significativement les performances
  • Le calcul de parité est généralement plus rapide lorsqu’il est effectué par la carte que par le CPU
  • Les batteries des cartes RAID permettent de correctement flusher les données sur les disques
  • Le bus PCI sera saturé bien avant qu’une carte RAID ne le soit.

3.3 Création d’un RAID 1 (mirror) pas à pas :

Nous allons voir la création d’un RAID 1 avec les partitions /dev/hdb1 et /dev/hdd1 sans gestion des disques spare qui est pourtant une fonctionnalité extraordinaire. Ces partitions sont de capacité identique (6Go) et leur type est 0xFD (Linux RAID Autodetect). Notez qu’il est tout à fait possible de faire du RAID directement avec des disques comme support physique.
La gestion du RAID se fera via la commande mdadm qui devra être installée auparavent sur le système.

On commence par créer une partition RAID à partir de ces partitions :

debian:~# mdadm --create /dev/md0 --level=raid1 --raid-devices=2 /dev/hdb1 /dev/hdd1
mdadm: array /dev/md0 started.

Le détail de ce RAID peut être obtenu via cette commande :

debian:~# mdadm --detail /dev/md0
/dev/md0:
        Version : 00.90.03
  Creation Time : Tue Sep 25 01:03:34 2007
     Raid Level : raid1
     Array Size : 6291328 (6.00 GiB 6.44 GB)
    Device Size : 6291328 (6.00 GiB 6.44 GB)
   Raid Devices : 2
  Total Devices : 2
Preferred Minor : 0
    Persistence : Superblock is persistent

    Update Time : Tue Sep 25 01:03:34 2007
          State : clean, resyncing
 Active Devices : 2
Working Devices : 2
 Failed Devices : 0
  Spare Devices : 0

 Rebuild Status : 86% complete

           UUID : 20ba3ba8:41d75456:9d4deba6:47ca997f (local to host debian)
         Events : 0.1

    Number   Major   Minor   RaidDevice State
       0       3       65        0      active sync   /dev/hdb1
       1      22       65        1      active sync   /dev/hdd1

Ensuite il faut figer la configuration du RAID dans le fichier /etc/mdadm/mdadm.conf :

DEVICE partitions
CREATE owner=root group=disk mode=0660 auto=yes
HOMEHOST 
MAILADDR root
ARRAY /dev/md0 devices=/dev/hdb1,/dev/hdd1

A noter qu’il est possible d’obtenir le même résultat grâce à la commande mdadm –detail –scan >> /etc/mdadm/mdadm.conf

Et on peut s’assurer que le RAID est ok grâce à cette commande :

debian:~# cat /proc/mdstat
Personalities : [linear] [multipath] [raid0] [raid1] [raid6] [raid5] [raid4] [raid10]
md0 : active raid1 hdb1[0] hdd1[1]
      6291328 blocks [2/2] [UU]

unused devices: 

La partition RAID peut ainsi être formatée et montée comme n’importe quelle partiton :

debian:~# mkfs.ext3 /dev/md0
debian:~# mount /dev/md0 /usr/local/

3.4 Réparation d’un RAID soft :

Le RAID permet de se protéger d’une panne disque, il est néanmoins important de savoir comment récupérer un système sain lorsqu’il passe en mode dégradé. Sur ce RAID le second disque /dev/hdd a rendu l’âme et il n’est même plus détecté. Comme on peut le constater, il est absent du RAID.

debian:~# cat /proc/mdstat
Personalities : [linear] [multipath] [raid0] [raid1] [raid6] [raid5] [raid4] [raid10]
md0 : active raid1 hdb1[0]
      6291328 blocks [2/1] [U_]

unused devices: 

Une fois ce disque remplacé et repartitionné comme il faut, il s’agit juste de l’ajouter à la grappe et de vérifier que le RAID se reconstruit :

debian:~# mdadm -a /dev/md0 /dev/hdd1
mdadm: added /dev/hdd1
debian:~# cat /proc/mdstat
Personalities : [linear] [multipath] [raid0] [raid1] [raid6] [raid5] [raid4] [raid10]
md0 : active raid1 hdd1[2] hdb1[0]
      6291328 blocks [2/1] [U_]
      [===================>.]  recovery = 99.9% (6291264/6291328) finish=0.0min speed=202944K/sec

Dans certaint cas, le retrait d’un disque défaillant peut nécessiter au préalable que ce disque soit marqué comme défaillant pour être retiré du RAID. Cela se fait comme suit :

debian:~# mdadm -f /dev/hdd1
debian:~# mdadm -r /dev/hdd1

3.4 Le boot avec grub en RAID soft :

L’installation de la plupart des distribution moderne en RAID soft ne posent pas de problème en général avec la partition /boot. Néanmoins il est important de s’assurer que le bootloader n’a pas été installé uniquement sur le MBD (Master Boot Record) du premier disque. En RAID 1 cela se fait simplement en bootant la machine avec successivement un disque de débranché. Si le PC ne boot pas sur le second disque, il suffit de réinstaller grub sur les 2 MBR de cette façon (en considérant que vos disques sont /dev/hda et /dev/hdb) :

debian:~#  grub
grub>device (hd0) /dev/hda
grub>root (hd0,0)
grub>setup (hd0)
grub>device (hd0) /dev/hdb
grub>root (hd0,0)
grub>setup (hd0)
Categories: GNU/Linux Tags:

Serveur Linux haute disponibilité

1. Introduction :

1.1 Principe de fonctionnement :

Contrairement à un certain nombres de systèmes comme les annuaires LDAP et les serveurs de base de données, les serveurs de fichiers ne possèdent pas de mécanisme natif de réplication. Nous allons voir ici commentre mettre en place un serveur avec réplication de données sur un deuxième serveur qui prendra le relais en cas de panne sur le serveur principal. Ce mécanisme attribuera l’IP virtuelle utilisée par les clients et basculera les données et les services réseaux sur le second serveur. Nous mettrons en évidence le fonctionnement en réalisant un serveur Web haute dispo.

Cette solution s’appuie sur les briques DRBD et Heartbeat. Elle fonctionne en mode maitre->esclave, par conséquent le deuxième serveur ne permet pas de faire de l’équilibrage de charge. C’est néanmoins une excellente solution lorsque le budget est limité car elle fonctionne avec seulement deux serveurs et ne nécessite pas de SAN, NAS, système de fichiers clusterisé etc… dont le coût peut être prohibitif.

Pour tout savoir sur la haute disponibilité, vous pouvez consulter cette page du site lea-linux : [http://lea-linux.org/cached/index/Leapro-pro_sys-dispo.html->http://lea-linux.org/cached/index/Leapro-pro_sys-dispo.html]

1.2 Background technique :

Les exemples seront données en utilisant 2 serveurs nommés debian1 et debian2 se basant sur la distribution Debian Etch.

Chaque serveur possède deux cartes réseau. L’une est l’interface visible depuis les clients, dans notre cas sur le sous-réseau 192.168.69.0/24. La seconde carte réseau est reliée via un cable croisée sur la seconde carte réseau de l’autre serveur afin de se prémunir de fiabiliser au maximum la réplication des données entre les serveurs.

Donc on aura les serveurs suivants :
debian1.morot.local
eth0 : 192.168.69.14/24
eth1 : 10.0.0.1/8

debian2.morot.local
eth0 : 192.168.69.15/24
eth1 : 10.0.0.2/8

2. Redondance des données : DRBD

2.1 Installation des différents composants :

Dans un premier temps, on installe module-assistant pour compiler le module drbd à la sauce Debian :

# apt-get install module-assistant

Ensuite on installe le nécessaire pour compiler un module de cette façon :

# module-assistant prepare
# module-assistant update

Et enfin on réalise l’installation du module et la compilation en une seule étape, qui va également installer tous les outils nécessaire à l’utilisation de drbd :

# module-assistant auto-install drbd0.7-module-source

On peut ensuite charger le module à l’aide de la commande modprobe drbd, ce qui fera apparaitre ceci à l’ecran :

drbd : initialised. Version: 0.7.21 (api:79/proto:74)
drbd : SVN Revision: 2326 build by root@debian2, 2007-09-18 23:57:54
drbd : registered as block device major 147

2.2 Configuration de DRBD :

L’essentiel de la configuration de DRBD se passe dans le fichier /etc/drbd.conf. Il est absolument indispensable que ce fichier soit identique sur les deux serveurs. Voici son contenu :

resource repl {
  protocol C;

  startup {
    degr-wfc-timeout 120;
  }

  disk {
    on-io-error detach;
  }

  syncer {
    rate 100M;
  }

  on debian1 {
    device      /dev/drbd0;
    disk        /dev/hda5;
    address     10.0.0.1:7788;
    meta-disk   internal;
  }

  on debian2 {
    device      /dev/drbd0;
    disk        /dev/hda5;
    address     10.0.0.2:7788;
    meta-disk   internal;
  }
}

Le protocole C est le plus pointilleux en ce qui concerne la réplication. Il considère qu’une information est répliquée lorsqu’elle a été flushée du cache disque du serveurs esclave.

La section syncer définit le débit du lien de réplication qui unit les deux machines.

Enfin, la section on <serveur> est la plus importante. C’est ici que sont définit les serveurs et les partitions de ces serveurs qui forment le périphérique bloc (/dev/drbd0) répliqué entre les serveurs. Il s’agit donc ici d’un endroit à entièrement adapter à votre configuration.

On peut passer à la suite et démarrer drbd sur les deux serveurs :

# /etc/init.d/drbd start

2.3 Initialisation des réplicas :

Les deux serveurs apparaissent alors à ce moment en esclave et désynchronisés dans les logs :

debian1# dmesg
[...]
drbd0: Creating state block
drbd0: resync bitmap: bits=708222 words=22132
drbd0: size = 2766 MB (2832888 KB)
drbd0: 2832888 KB now marked out-of-sync by on disk bit-map.
drbd0: Assuming that all blocks are out of sync (aka FullSync)
drbd0: 2832888 KB now marked out-of-sync by on disk bit-map.
drbd0: drbdsetup [2141]: cstate Unconfigured --> StandAlone
drbd0: drbdsetup [2154]: cstate StandAlone --> Unconnected
drbd0: drbd0_receiver [2155]: cstate Unconnected --> WFConnection
drbd0: drbd0_receiver [2155]: cstate WFConnection --> WFReportParams
drbd0: Handshake successful: DRBD Network Protocol version 74
drbd0: Connection established.
drbd0: I am(S): 0:00000001:00000001:00000001:00000001:00
drbd0: Peer(S): 0:00000001:00000001:00000001:00000001:00
drbd0: drbd0_receiver [2155]: cstate WFReportParams --> Connected
drbd0: I am inconsistent, but there is no sync? BOTH nodes inconsistent!
drbd0: Secondary/Unknown --> Secondary/Secondary

debian1:~# cat /proc/drbd
version: 0.7.21 (api:79/proto:74)
SVN Revision: 2326 build by root@debian1, 2007-09-19 00:02:20
 0: cs:Connected st:Secondary/Secondary ld:Inconsistent
    ns:0 nr:0 dw:0 dr:0 al:0 bm:346 lo:0 pe:0 ua:0 ap:0

Il faut maintenant initialiser le serveur maitre :

debian1:~# drbdadm -- --do-what-I-say primary all

Ce qui aura pour effet d’initier une synchronisation des serveurs :

debian1:~# cat /proc/drbd
version: 0.7.21 (api:79/proto:74)
SVN Revision: 2326 build by root@debian1, 2007-09-19 00:02:20
 0: cs:SyncSource st:Primary/Secondary ld:Consistent
    ns:20560 nr:0 dw:0 dr:28752 al:0 bm:346 lo:1 pe:0 ua:2048 ap:0
        [>...................] sync'ed:  0.9% (2812328/2832888)K
        finish: 0:09:00 speed: 5,140 (5,140) K/sec

Les logs sur le serveur secondaire nous permettent également d’attester que la synchronisation est en train de se réaliser :

debian2 # dmesg
[...]
drbd0: drbd0_receiver [2119]: cstate Connected --> WFBitMapT
drbd0: Secondary/Secondary --> Secondary/Primary
drbd0: drbd0_receiver [2119]: cstate WFBitMapT --> SyncTarget
drbd0: Resync started as SyncTarget (need to sync 2832888 KB [708222 bits set]).

Et une fois la synchro établie on peut constater que le réplicat est consistant :

debian1:~# cat /proc/drbd
version: 0.7.21 (api:79/proto:74)
SVN Revision: 2326 build by root@debian1, 2007-09-19 00:02:20
 0: cs:Connected st:Primary/Secondary ld:Consistent
    ns:2832888 nr:0 dw:0 dr:2832888 al:0 bm:519 lo:0 pe:0 ua:0 ap:0

2.4 Validation du fonctionnement :

La périphérique de réplication se formate comme n’importe quelle partition de disque dur :

debian1# mkfs.ext3 /dev/drbd0

Il ne reste plus qu’à monter cette partition pour tester le fonctionnement de la réplication en forçant une bascule maitre->esclave :

debian1# mount /dev/drbd0 /mnt/repl
debian1:~# touch /mnt/repl/test
debian1:~# ls /mnt/repl/
test  lost+found
debian1:~# drbdadm secondary repl

Il ne reste plus qu’à passer la machine debian2 en maitre et s’assurer que le fichier nommé « test » est bien présent :

debian2:~# drbdadm primary repl
debian2:~# mount /dev/drbd0 /mnt/repl/
debian2:~# ls /mnt/repl/
test  lost+found

Bingo! On peut passer à la suite!

3. Système de failover : Heartbeat

3.1 Installation est configuration :

On commence par installer le nécessaire sur les deux serveurs :

# apt-get install heartbeat

Ensuite, il faut personnaliser trois fichiers de configuration. Tout comme pour DRBD, ces fichiers doivent être identiques sur les deux serveurs de la grappe. Par conséquent vous pouvez commencer par les éditer sur le premier serveur et les recopier en SCP sur le second.

Première étape : définir une clé partagée dans le fichier /etc/ha.d/authkeys

auth 1
1 md5 "Icimonsupermotdepasse"

Puis modifiez les permissions avec un chmod 0600 /etc/ha.d/authkeys

Deuxième étape : configurer les ressources partagées du cluster. Pour cela éditer le fichier /etc/ha.d/haresources. L’ensemble de la configuration est à placer sur une seule ligne.

debian1 192.168.69.16 IPaddr::192.168.69.100 drbddisk::repl Filesystem::/dev/drbd0::/mnt/repl::ext3 apache MailTo::admin@example.com

Dans l’ordre on indique :

  • La machine maitre du cluster
  • La première adresse virtuelle suivi des autres adresses virtuelles
  • La partition DRBD et comment la monter dans l’arborescence
  • Les services à démarrer
  • Eventuellement une alerte mail

Dernière étape : mettre en place la configuration générale de Heartbeat. Dans le fichier /etc/ha.d/ha.cf on indique les noeuds qui participent au cluster, les durées à partir desquelles on considère que le second noeud est défaillant, si on doit rebasculer automatiquement vers le premier serveur une fois qu’il est de nouveau opérationnel etc…

node debian1 debian2
logfile /var/log/ha.log
logfacility local0

auto_failback off

keepalive 2
warntime 10
deadtime 60
initdead 80

udpport 694
bcast  eth1

Ici, les noeuds communiquent via leur seconde carte réseau. La communication pourrait être fiabilisée en passant par le port série ce qui se ferait avec un fichier de configuration de ce type :

node debian1 debian2
logfile /var/log/ha.log
logfacility local0

auto_failback off

keepalive 2
warntime 10
deadtime 60
initdead 80

baud 9600
bcast eth0
serial /dev/ttyS0

3.2 Test de fonctionnement :

Apache étant démarré par heatbeat, il convient donc de le supprimer du chargement au démarrage de la Debian des deux serveurs :

# update-rc.d -f apache remove

Il ne reste plus qu’à démarrer heartbeat sur les deux serveurs en commençant par le premier :

# /etc/init.d/heartbeat start

Après quelques secondes les adresses IP virtuelles doivent être attribuées sur le serveur debian1 :

debian1:/etc/ha.d# ip addr show eth0
2: eth0:  mtu 1500 qdisc pfifo_fast qlen 1000
    link/ether 08:00:27:42:d9:0d brd ff:ff:ff:ff:ff:ff
    inet 192.168.69.14/24 brd 192.168.69.255 scope global eth0
    inet 192.168.69.16/24 brd 192.168.69.255 scope global secondary eth0:0
    inet 192.168.69.100/24 brd 192.168.69.255 scope global secondary eth0:1
    inet6 fe80::a00:27ff:fe42:d90d/64 scope link
       valid_lft forever preferred_lft forever

De même que la partition DRBD doit être montée automatiquement :

debian1:/etc/ha.d# mount
[...]
/dev/drbd0 on /mnt/repl type ext3 (rw)

Il est possible de tester la bascule en coupant Heartbeat sur le premier serveur, voir même en l’éteignant complètement :

debian1:/etc/ha.d# /etc/init.d/heartbeat stop
Stopping High-Availability services:
Done.

Très rapidement, la machine debian2 devrait se voir attribuer les deux adresses IP virtuelles définies dans le fichier /etc/ha.d/haresources. Il ne reste plus qu’à configurer Apache pour que la directive DocumentRoot pointe vers le point de montage de DRBD pour que les services profitent de ce sous-système en haute disponibilité et le tour est joué.

4. Conclusion :

J’ai eu l’occasion de déployer ce type de cluster sur des serveurs Web gérant 450 sites en hébergement mutualisé et des serveurs mails traitant environ 15000 mails/jour et cela a fonctionné parfaitement. Le mécanisme de haute disponibilité permet même de se payer le luxe d’une maintenance sur les serveurs, par exemple lors d’une mise à jour de sécurité, avec un temps de transition très faible.

Il serait possible d’améliorer le système avec des solutions de type stonith, qui permettent à un serveur d’éteindre le second serveur lorsqu’il juge que celui-ci ne répond plus. Personnellement je n’ai pas osé le mettre en place par crainte que l’un des serveurs se fasse éteindre sans que cela soit nécessaire.

Categories: GNU/Linux Tags:

Fortunes fournisseur d’accès internet

- Qu’avez vous de branché sur votre ligne téléphonique?
- Un halogène.

- Alors vous tapez « ipconfig /all » puis entrée.
- « e », « n », « t », il fallait mettre un espace entre /all et entrée?

- Maintenant vous branchez le transformateur sur la prise électrique.
- Ça ressemble à quoi?

- Allo? Ouais j’arrive plus à me connecter.
- Le voyant arrobace est allumé comment actuellement?
- Ben en fait j’ai vu la ***box clignoter alors j’ai tout débranché

- Vous tapez ping suivi d’un espace.
- Il faut taper sur quelle touche pour faire espace?

- Vous avez quoi à l’écran?
- Samsung 17″

- Oui allo, je n’arrive plus à naviguer.
- Bien, ouvrez Internet Explorer.
- Je ne peux pas mon ordinateur ne démarre plus.

- Hé bien voila votre connexion fonctionne maintenant.
- Ah? Alors qu’est ce qu’on peut faire avec internet?

- La ***box elle ne marche pas!
- Les voyants de la ***box sont allumées comment acutellement?
- Heu elle n’est pas branchée finalement.

- Et vous m’avez dit que vous aviez une erreur en naviguant aussi, c’est quoi?
- Rien l’écran est noir.
- Il est allumé?
- ah ben non.

- Le cdrom est bien dans le lecteur?
- Sans doute.
- Vérifiez s’il vous plait.
- Comment on fait pour l’ouvrir?

- Allez-y, je vous laisse brancher ce cable.
- ça se branche à côté du moteur de l’ordinateur?

- Rentrez le mot de passe en minuscules
- D’accord je le rentre en majuscules.

- La ***box est à moins d’un mètre de l’ordinateur?
- non elle est loin!
- à combien?
- Quelques centimètres!

- Qu’y a-t-il de branché dans cette prise téléphonique?
- La prise de courant.

- Ouvrez le poste de travail
- C’est quoi?

- Quand vous dites « débrancher électriquement » c’est que je débranche la prise électrique?

- J’ai débranché électriquement comme vous m’avez dit mais maintenant il y a un truc qui ne va pas.
- Quoi?
- Ben y’a plus de jus!

- Vous êtes sûr que cette icone n’est pas verte?
- ah oui certain
(5min plus tard)
- Ah mais je ne vous ai pas dit, je suis daltonien et en fait ma femme vient de me dire qu’elle était verte.

- ouvrez le poste de travail monsieur.
- vous savez je ne suis pas un informaticien chevronné.

- Donc vous avez bien redémarré votre ordinateur?
- Oui je l’écoute!
- Vous l’écoutez???
- Ben oui, le lecteur cdrom!

- Bonjour, j’ai la téléphonie par wifi

- Comment vous faites pour redémarrer votre ordinateur?
- Je clique sur le bouton « Démarrer »!

- un ‘e’ comme dans Henri!

- La ***box elle a supprimé des photos de mon disque dur.
- Quand l’avez-vous installée?
- Non! Je l’ai rendue sans la déballer car je me suis dit que c’était trop compliqué pour moi.

- Vous êtes connecté comment entre votre ***box et l’ordinateur?
- Je suis en wifi avec la prise téléphonique!

- Tapez « 192.168.1.1″
- .fr à la fin?

- Qu’avez-vous au niveau des voyants?
- ça fait comme K2000!

- Je me connecte par la souris blanche

- Vous êtes connecté comment entre la ***box et l’ordinateur?
- Mais je vous dis que j’ai un écran philips et une unité centrale packard bell!

- Vous êtes branché par quel mode de connexion entre la ***box et l’ordinateur?
- Comme d’habitude!
- Bien sûr mais je ne suis pas chez vous habituellement pour le savoir.
- Alors comme il y a 3 mois.

- Tapez ici votre clé WEP
- J’écris « clé wep »?

- La ***box elle est où?
- Dans le carton!
- Vous ne l’avez pas branchée?
- Ben non je suis en sans fil!

- Ma ***box date de octobre 1984

- La ***box et l’ordinateur sont éloignés de combien?
- C’est à dire?
- Quelle distance sépare la ***box de votre ordinateur?
- Arrêtez! C’est trop compliqué je vous passe mon mari.

- « espace » vous le tapez ‘e-s-p-a-c-e’ ?

- Votre slash il va bien de en bas à gauche vers en haut à droite?
- Non, de en haut à droite vers en bas à gauche.

- Le cable ethernet est branché à l’arrière du disque dur en usb.

- Vous avez un cable entre la prise ethernet jaune et l’ordinateur?
- oui
- Et vous avez aussi un cable branché entre la petite prise usb et l’unité centrale?
- également.
- Vous avez 2 ordinateurs?
- Non un seul!

- Windows est parti il était la puis il est partit.

- j’appuye sur le clitoris.

- Vous arrivez à consulter des sites internet?
- Presque!

- Cliquez sur « Démarrer »
- Mon ordinateur est déja allumé.

- Moi j’ai une liste, dès que je quitte la liste pour aller dans la liste, ça me quitte la liste alors que je devrais pouvoir accéder à la liste.

- Vous avez la page d’accueil?
- Oui, non, d’accord.

- J’aurais pensé que l’adsl aurait été plus rapide à mettre en route.
- A mettre en route quoi?
- Hé bien mon ordinateur est toujours aussi long à s’allumer le matin

Categories: Divers Tags:

Création d’un bridge pour VirtualBox

On commence par installer le package nécessaire : bridge-utils et uml_utilities

Ensuite, on libère l’ip de la carte réseau qui sera « pontée » : ifconfig eth0 0.0.0.0

On créé le pont en y attachant notre carte réseau eth0. Cette carte peut désormais recevoir une adresse, ici en DHCP :

# brctl addbr br0
# brctl addif br0 eth0
# dhcpcd br0

Ensuite, il ne reste plus qu’à créer notre interface virtuelle qui sera pontée avec les droits de l’utilisateurs spécifié. Il est impératif d’activer la carte pour qu’elle soit utilisable.

# tunctl -t tap0 -u julien
Set 'tap0' persistent and owned by uid 1000
# ifconfig tap0 up
# brctl addif br0 tap0

On peut ensuite mettre le tout dans un script de démarrage :

#!/bin/bash
PATH="/usr/sbin:/sbin:/usr/bin:/bin:/usr/bin"
USER="julien"
BRIDGE="br0"
IFACE="eth0"
TAP="tap0"

ifconfig $IFACE 0.0.0.0
brctl addbr $BRIDGE
brctl addif $BRIDGE $IFACE
dhcpcd $BRIDGE
modprobe tun
tunctl -t $TAP -u julien
ifconfig $TAP up
brctl addif $BRIDGE $TAP
Categories: GNU/Linux Tags: