Différences entre les pages « Serveur Dédié » et « DRBD »

De Cliss XXI
(Différence entre les pages)
Sauter à la navigation Sauter à la recherche
imported>SylvainBeucler
 
imported>SylvainBeucler
 
Ligne 1 : Ligne 1 :
= Prestataires =
+
Distributed Replicated Block Device
  
* Dédiés
+
apt-get install drbd8-utils drbd8-modules-2.6-686
** [http://www.ovh.com/fr/particulier/produits/kimsufi08.xml OVH Kimsufi] - 20€ / 1.2GHz / 1Go / 250Go / 100Mbit / 2 IPs
+
# ou variante:
** [http://www.dedibox.fr/ Dédibox] - 30€ / 1.2Ghz / 1Go / 160Go / 100Mbit / 1 IP
+
apt-get install drbd8-utils drbd8-modules-2.6-vserver-686
** [http://www.ovh.com/fr/particulier/produits/rps1.xml OVH iSCSI] (NAS proprio) - 10€ / 512Mo / 10Go / 100Mbit / 2 IPs
 
* Virtuel
 
** [http://www.lost-oasis.fr/virtuel/offre.html Lost Oasis virtuel] (virtualisation KVM) - 12.5€ / 1/32e / 256Mo / 10Go RAID5 / 1|30MBit / 1 IP
 
** [http://www.gandi.net/hebergement/offre/ Gandi virtuel] (virtualisation Xen) - 6€ / 1/64e / 256Mo / 5Go RAID6 / 3Mbit / 1 IP
 
** Amen virtuel (virtualisation proprio) - 10€ / 128Mo / 2Go data / ? Mbit / 1 IP
 
  
= Contraintes =
+
== Configuration simple ==
  
* Pour faire de la virtualisation, maximisez le nombre d'IPs
+
Primary/Secondary (il existe aussi Primary/Primary):
* Sauvegarde: préférer un autre hébergement bas prix _chez le même hébergeur_ (ex: kimsufi chez OVH) pour faire de la restauration rapide (sauvegarde, pas fastfood)
 
* Pour un système de mail complet, compter facilement 200 Mo de RAM
 
* Pour pouvoir renouveler au moment opportun, renouveler mois par mois
 
  
= Installation de base =
+
<pre>
 +
global {
 +
  usage-count yes;
 +
}
 +
common {
 +
  protocol C;
 +
  syncer { rate 40M; }
 +
  disk { on-io-error: detach; }
 +
  startup {
 +
    wfc-timeout 15;
 +
    degr-wfc-timeout 15;
 +
    #outdated-wfc-timeout 15; # not in DRBD 8.0/Lenny
 +
  }
 +
}
 +
resource r0 {
 +
  startup { become-primary-on VM1; }
 +
  on VM1 {
 +
    device    /dev/drbd0;
 +
    disk      /dev/VG0/test;
 +
    address  192.168.101.115:7789;
 +
    meta-disk /dev/VG0/test-drbdmeta[0];
 +
  }
 +
  on VM2 {
 +
    device    /dev/drbd0;
 +
    disk      /dev/VG0/test;
 +
    address  192.168.101.118:7789;
 +
    meta-disk /dev/VG0/test-drbdmeta[0];
 +
  }
 +
}
 +
</pre>
  
Pour un système préparant de la virtualisation, le minimum vitale pour le host/Dom0:
+
== DRBD par dessus LVM ==
* Post-install variante serveur (aptitude no-recommends, smartmontools...)
+
 
** ntp
+
Snapshots LVM d'un volume [[DRBD]]:
** smartctl -t long
+
* http://thread.gmane.org/gmane.comp.linux.drbd/6175 : en 2004
* GRUB
+
* http://www.mail-archive.com/drbd-user@lists.linbit.com/msg00277.html : en 2009
* Noyau Debian vserver
+
 
* Exim & /etc/aliases
+
Ce que je comprend:
* Réseau:
+
* léger risque d'incohérence du snapshot
** resolvconf
+
* pas de risque d'incohérence des données maîtres
** IPs dispos
+
 
* Pare-feu & NAT & /etc/modules (conntrack)
+
En pratique, pour avoir un backup cohérent à partir du noeud secondaire:
* SNMP
+
lvcreate -s VG0/test -n test-snapshot -L 5G
* Sauvegarde
+
mount /dev/VG0/test-snapshot -o ro /mnt/snapshots/test  # ro par parano
** remote_backup.sh
+
# backup avec rsync...
** accès SSH
+
umount /mnt/snapshots/test
** sauvegarde locale local (ftpbackup)
+
lvremove VG0/test-snapshot
* locales (fr_FR.UTF-8) + rm /etc/environment
+
 
* Supprimer le bind local (si remplacé)
+
== Recharger la configuration ==
 +
 
 +
Utiliser
 +
drbdadm adjust r0
 +
 
 +
Attention: comme indiqué [http://www.drbd.org/users-guide/s-configure-io-error-behavior.html ici], s'il y a un changement ''dans une section <code>disk</code>'', les versions < 8.3.1 lancent une resynchronization complète. Pour éviter cela, passer le primaire en secondaire (donc les deux noeuds en secondaire) avant de lancer <code>adjust</code>; cela implique de démonter toutes les volumes DRBD actifs.
 +
 
 +
== Simuler des erreurs d'entrées/sorties ==
 +
 
 +
Cf. http://lists.linbit.com/pipermail/drbd-dev/2009-July/001073.html
 +
 
 +
<pre>
 +
+   The actual simulation of IO errors is done by writing 3 values to
 +
+   /sys/module/drbd/parameters/
 +
+
 +
+   enable_faults: bitmask of...
 +
+   1 meta data write
 +
+   2              read
 +
+   4 resync data write
 +
+   8             read
 +
+   16 data write
 +
+   32 data read
 +
+   64 read ahead
 +
+   128 kmalloc of bitmap
 +
+   256 allocation of EE (epoch_entries)
 +
+
 +
+   fault_devs: bitmask of minor numbers
 +
+   fault_rate: frequency in percent
 +
+
 +
+   Example: Simulate data write errors on /dev/drbd0 with a probability of 5%.
 +
+ echo 16 > /sys/module/drbd/parameters/enable_faults
 +
+ echo 1 > /sys/module/drbd/parameters/fault_devs
 +
+ echo 5 > /sys/module/drbd/parameters/fault_rate
 +
</pre>
 +
 
 +
L'exemple occasionne une erreur disque au bout de quelques accès disque.
 +
drbd0: Notified peer that my disk is broken
 +
 
 +
== Gérer des erreurs d'entrées/sorties ==
 +
 
 +
Cas 1 (configuration par défaut, mais n'est plus recommandée):
 +
 
 +
disk { on-io-error pass_on; }
 +
 
 +
Dans ce cas, les erreurs sont passées au système de fichiers, qui habituellement va se remonter en lecture seule. D'après mes tests, cependant, même avec <code>-o errors=remount-ro</code>, le système de fichiers s'est corrompu avec moult messages de drbd0 mais ''sans'' que le système de fichiers ne passe en lecture seule.
 +
 
 +
Cas 2:
 +
 
 +
disk { on-io-error detach; }
 +
 
 +
Dans ce cas le disque continue de fonctionner de manière transparente sur le secondaire, en passant par le réseau (mode "diskless").
 +
 
 +
Cas 3:
 +
 
 +
disk { on-io-error call-local-io-error; }
 +
 
 +
Dans ce cas DRBD appelle un script spécifié via <code>local-io-error</code>.
 +
 
 +
== Montage au démarrage ==
 +
 
 +
* Dans <code>/etc/fstab</code> faire attention:
 +
** de bien faire référence au volume DRBD (pas au volume physique)
 +
** de ne pas demander un fsck (mettre les deux derniers champs à <code>0</code>) car drbd n'est pas activé au moment où fstab est utilisé, ce qui va causerait une erreur
 +
* Dans l'ordre de démarrage, positionner les services dépendant de DRBD (ex: vserver) après lui
 +
* Rajouter un script au démarrage pour finir de monter les volumes DRBD, par exemple:
 +
<pre>
 +
#!/bin/bash
 +
if [ "$1" = "start" ]; then mount -a; fi
 +
</pre>
 +
 
 +
== Liens ==
 +
 
 +
* [http://www.drbd.org/users-guide/ The DRBD User's Guide]
 +
* [[LVM]]

Version du 31 octobre 2009 à 14:08

Distributed Replicated Block Device

apt-get install drbd8-utils drbd8-modules-2.6-686
# ou variante:
apt-get install drbd8-utils drbd8-modules-2.6-vserver-686

Configuration simple

Primary/Secondary (il existe aussi Primary/Primary):

global { 
  usage-count yes;
}
common {
  protocol C;
  syncer { rate 40M; }
  disk { on-io-error: detach; }
  startup {
    wfc-timeout 15;
    degr-wfc-timeout 15;
    #outdated-wfc-timeout 15; # not in DRBD 8.0/Lenny
  }
}
resource r0 {
  startup { become-primary-on VM1; }
  on VM1 {
    device    /dev/drbd0;
    disk      /dev/VG0/test;
    address   192.168.101.115:7789;
    meta-disk /dev/VG0/test-drbdmeta[0];
  }
  on VM2 {
    device    /dev/drbd0;
    disk      /dev/VG0/test;
    address   192.168.101.118:7789;
    meta-disk /dev/VG0/test-drbdmeta[0];
  }
}

DRBD par dessus LVM

Snapshots LVM d'un volume DRBD:

Ce que je comprend:

  • léger risque d'incohérence du snapshot
  • pas de risque d'incohérence des données maîtres

En pratique, pour avoir un backup cohérent à partir du noeud secondaire:

lvcreate -s VG0/test -n test-snapshot -L 5G
mount /dev/VG0/test-snapshot -o ro /mnt/snapshots/test  # ro par parano
# backup avec rsync...
umount /mnt/snapshots/test
lvremove VG0/test-snapshot

Recharger la configuration

Utiliser

drbdadm adjust r0

Attention: comme indiqué ici, s'il y a un changement dans une section disk, les versions < 8.3.1 lancent une resynchronization complète. Pour éviter cela, passer le primaire en secondaire (donc les deux noeuds en secondaire) avant de lancer adjust; cela implique de démonter toutes les volumes DRBD actifs.

Simuler des erreurs d'entrées/sorties

Cf. http://lists.linbit.com/pipermail/drbd-dev/2009-July/001073.html

+	  The actual simulation of IO errors is done by writing 3 values to
+	  /sys/module/drbd/parameters/
+
+	  enable_faults: bitmask of...
+	  1	meta data write
+	  2               read
+	  4	resync data write
+	  8	            read
+	  16	data write
+	  32	data read
+	  64	read ahead
+	  128	kmalloc of bitmap
+	  256	allocation of EE (epoch_entries)
+
+	  fault_devs: bitmask of minor numbers
+	  fault_rate: frequency in percent
+
+	  Example: Simulate data write errors on /dev/drbd0 with a probability of 5%.
+		echo 16 > /sys/module/drbd/parameters/enable_faults
+		echo 1 > /sys/module/drbd/parameters/fault_devs
+		echo 5 > /sys/module/drbd/parameters/fault_rate

L'exemple occasionne une erreur disque au bout de quelques accès disque.

drbd0: Notified peer that my disk is broken

Gérer des erreurs d'entrées/sorties

Cas 1 (configuration par défaut, mais n'est plus recommandée):

disk { on-io-error pass_on; }

Dans ce cas, les erreurs sont passées au système de fichiers, qui habituellement va se remonter en lecture seule. D'après mes tests, cependant, même avec -o errors=remount-ro, le système de fichiers s'est corrompu avec moult messages de drbd0 mais sans que le système de fichiers ne passe en lecture seule.

Cas 2:

disk { on-io-error detach; }

Dans ce cas le disque continue de fonctionner de manière transparente sur le secondaire, en passant par le réseau (mode "diskless").

Cas 3:

disk { on-io-error call-local-io-error; }

Dans ce cas DRBD appelle un script spécifié via local-io-error.

Montage au démarrage

  • Dans /etc/fstab faire attention:
    • de bien faire référence au volume DRBD (pas au volume physique)
    • de ne pas demander un fsck (mettre les deux derniers champs à 0) car drbd n'est pas activé au moment où fstab est utilisé, ce qui va causerait une erreur
  • Dans l'ordre de démarrage, positionner les services dépendant de DRBD (ex: vserver) après lui
  • Rajouter un script au démarrage pour finir de monter les volumes DRBD, par exemple:
#!/bin/bash
if [ "$1" = "start" ]; then mount -a; fi

Liens