Drbd

De The Linux Craftsman
Aller à la navigation Aller à la recherche

Introduction

DRBD (Distributed Replicated Block Device) est un mécanisme de stockage distribuée qui permet la réplication en mode bloc (disques ou partitions) entre plusieurs machines.

La réplication des données se fait :

  • en temps réel ;
  • de façon transparente pour les applications (qui n'ont pas conscience de la réplication) ;
  • de façon synchrone, ou asynchrone (l'application qui déclenche une écriture de donnée est notifiée de la fin de l'opération après la synchronisation ou avant).

DRBD peut servir conjointement avec Ucarp pour monter un cluster de serveur Web ou autre.

Pour le faire fonctionner il vous faut deux serveurs avec deux disques identiques (en plus du disque système) !

Préparation

Dans un premier temps, il faudra avoir une connexion à Internet, utiliser un serveur DNS et désactiver SELinux.

Pour ceux qui auraient manqué des étapes les voici:

Ensuite il faudra :

  • deux disques identiques (un dans chaque machine) ;
  • la synchronisation des horloges avec NTP ;
  • ouvrir le port TCP 7789.

Une fois ces étapes effectuées, entrons dans le vif du sujet !

Installation de DRBD

DRBD est présent dans le dépôt EL et il faudra donc l'installer comme c'est expliqué ici

Une fois l'installation du dépôt EL nous pouvons installer DRBD:

# yum -y install drbd84-utils.x86_64 kmod-drbd84.x86_6

Pour charger le module dans le noyau un redémarrage est nécessaire !

Configuration

Résolution DNS

Sur les deux machines dans le fichier /etc/hosts ajoutez les lignes suivantes:

192.168.100.135 node1 node1.tala-informatique.fr
192.168.100.136 node2 node2.tala-informatique.fr

Remplacez les adresses IP par celles de vos machines.

Synchronisation de l'horloge

Il faut que les horloges des deux machines soient synchrones pour que DRBD fonctionne:

# yum -y install ntp

Puis:

  • Pour SystemVInit:
service ntpd start
  • Pour SystemD:
systemctl start ntpd.service

Ouverture du pare-feu

On ouvre le port TCP 7789 puis on sauvegarde la configuration Iptables

# iptables -I INPUT 2 -p tcp --dport 7789 -j ACCEPT
# service iptables save

Création d'une partition principale

Sur les deux machines vous devez partitionner le disque qui servira pour DRBD.

Consultez la page sur la gestion des disques pour voir comment faire.

DRBD

Fonctionnement

Le format des fichiers de configuration à été développé pour pouvoir faire une copie du fichier sur les deux machine (plus simple à gérer). Le fichier /etc/drbd.conf doit donc être le même sur toutes les machines du cluster.

Par convention, le fichier de configuration contient deux inclusions:

  • /etc/drbd.d/global_common.conf
  • tous les fichiers en .res qui se trouvent dans le dossier /etc/drbd.d

Pour résumer :

  • on ne touche jamais à /etc/drbd.conf
  • on ajoute les clusters dans le répertoire /etc/drbd.d dans un fichier qui se termine par .res

Fichier de cluster

Éditez le fichier /etc/drbd.d/cluster.res comme suit :

resource cluster {
        net {
                cram-hmac-alg sha1;
                shared-secret "tala-informatique";
        }
        on node1 {
                device    minor 0;
                disk      /dev/sdb1;
                meta-disk internal;
                address   192.168.100.135:7789;
        }
        on node2 {
                device    minor 0;
                disk      /dev/sdb1;
                meta-disk internal;
                address   192.168.100.136:7789;
        }
}

On n'oublie pas de le copier sur l'autre machine:

# scp /etc/drbd.d/cluster.res root@node2:/etc/drbd.d/

Création du cluster

On doit initialiser le cluster pour qu'il soit utilisable:

# drbdadm create-md cluster
Writing meta data...
initializing activity log
NOT initialized bitmap
New drbd meta data block successfully created.
success

Démarrage du service

On démarre DRBD en simultané sur les deux machines, sinon plantage !

  • Pour SystemVInit:
service drbd start
  • Pour SystemD:
systemctl start drbd.service
Starting DRBD resources: [ d(cluster) n(cluster) ]..........
***************************************************************
 DRBD's startup script waits for the peer node(s) to appear.
 - In case this node was already a degraded cluster before the
   reboot the timeout is 0 seconds. [degr-wfc-timeout]
 - If the peer was available before the reboot the timeout will
   expire after 0 seconds. [wfc-timeout]
   (These values are for resource 'cluster'; 0 sec -> wait forever)
 To abort waiting enter 'yes' [  14]:
.

Il doit démarrer comme cela:

Starting DRBD resources: [ s(cluster) ].

Puis on l'enregistre dans le chargeur de démarrage:

  • Pour SystemVInit:
chkconfig drbd on
  • Pour SystemD:
systemctl enable drbd.service

Synchronisation du nœud primaire

Avant de faire quoi que ce soit, exécuter la commande suivante pour synchroniser le cluster:

# /sbin/drbdadm -- --overwrite-data-of-peer primary cluster

Vous pouvez suivre l'avancement du processus en faisant un cat ou un watch du fichier /proc/drbd :

# cat /proc/drbd
ou bien
# watch -n 1 'cat /proc/drbd'

On commence avec watch:

Every 1,0s: cat /proc/drbd                                                                 Tue Nov  4 20:43:31 2014

version: 8.3.16 (api:88/proto:86-97)
GIT-hash: a798fa7e274428a357657fb52f0ecf40192c1985 build by phil@Build64R6, 2014-10-28 10:31:39
 0: cs:SyncSource ro:Primary/Secondary ds:UpToDate/Inconsistent C r-----
    ns:65392 nr:0 dw:0 dr:66056 al:0 bm:3 lo:0 pe:0 ua:0 ap:0 ep:1 wo:f oos:457820
        [=>..................] sync'ed: 13.3% (457820/523212)K
        finish: 0:26:42 speed: 272 (272) K/sec

Pour finir avec :

Every 1,0s: cat /proc/drbd                                                                 Tue Nov  4 21:49:26 2014

version: 8.3.16 (api:88/proto:86-97)
GIT-hash: a798fa7e274428a357657fb52f0ecf40192c1985 build by phil@Build64R6, 2014-10-28 10:31:39
 0: cs:StandAlone ro:Primary/Unknown ds:UpToDate/DUnknown   r-----
    ns:523212 nr:0 dw:0 dr:523876 al:0 bm:32 lo:0 pe:0 ua:0 ap:0 ep:1 wo:f oos:0

Formatage de la partition DRBD

Enfin, il ne reste plus qu'à partitionner, formater et attribuer un point de montage au volume DRBD sur votre nœud primaire:

# fdisk /dev/drbd0
# mkfs.ext4 /dev/drbd0
# mkdir /opt/cluster
# mount /dev/drbd0 /opt/cluster

Ne tentez pas de monter la partition sur les nœuds secondaire, de toute façon vous n'en n'avez pas besoin.

Bascule

Que faire pour basculer le point de montage sur un des noeuds secondaire ?

Tout d'abord on démonte le volume DRBD

# umount /dev/drbd0

Ensuite, on fait basculer le primaire en secondaire:

drbdadm secondary cluster

Puis on fait basculer un des secondaire en primaire:

drbdadm --overwrite-data-of-peer primary all