« LINUX:Drbd » : différence entre les versions

Aucun résumé des modifications
Aucun résumé des modifications
 
(11 versions intermédiaires par le même utilisateur non affichées)
Ligne 1 : Ligne 1 :
----
----
''→ [[LINUX:Notions de gestion des disques|retour à la gestion des disques]]''
''→ [[LINUX:Haute disponibilité|retour au menu de la Haute disponibilité]]''
''→ [[LINUX:Haute disponibilité|retour au menu de la Haute disponibilité]]''
----
----
__FORCETOC__
=But=
=But=
Drbd est un équivalent du Raid 1 mais les deux disques sont sur des machines différentes et la synchronisation se fait à travers le réseau. Avec cette pièce de logiciel, on augmente la haute disponibilité. Deux disques en Raid 1 sur la même machine ne nous mettent pas à l’abri d'un arrêt de la machine. Cette configuration est plus délicate et lente mais évite ce cas de figure.
Drbd est un équivalent du Raid 1 mais les deux disques sont sur des machines différentes et la synchronisation se fait à travers le réseau. Avec cette pièce de logiciel, on augmente la haute disponibilité. Deux disques en Raid 1 sur la même machine ne nous mettent pas à l’abri d'un arrêt de la machine. Cette configuration est plus délicate et lente mais évite ce cas de figure.
Ligne 22 : Ligne 25 :
Les deux interfaces réseaux "eth2" sont réservés exclusivement à la synchronisation des disques en Drbd afin de ne pas être ralentis par d'autres accès et inversement.
Les deux interfaces réseaux "eth2" sont réservés exclusivement à la synchronisation des disques en Drbd afin de ne pas être ralentis par d'autres accès et inversement.


Sur chaque machine, nous avons besoin d'un disque dur de même capacité; nous avons mis un disque de 160 Gb.
Sur chaque machine, nous avons besoin d'un disque dur de même capacité; nous avons mis un disque de 160 Gb sur chaque machine.




Ligne 33 : Ligne 36 :
Comme vu dans l'article sur les [[LINUX:Notions de gestion des disques|Notions de gestion des disques]], nous les préparons avec une seule partition de type LVM ("/dev/sdb1").
Comme vu dans l'article sur les [[LINUX:Notions de gestion des disques|Notions de gestion des disques]], nous les préparons avec une seule partition de type LVM ("/dev/sdb1").


Ensuite nous ajoutons une couche LVM. On ajoutons ce device à un Volume Group nommé "fo1_vg_data" pour la machine "fo1.home.dom" et nommé "fo2_vg_data" pour la machine "fo2.home.dom". Ce device est seul dans ce Volume Group. Enfin on y ajoute un Logical Volume qui prend la totalité de l'espace nommé "fo1_lv_data" pour la machine "fo1.home.dom" et nommé "fo2_lv_data" pour la machine "fo2.home.dom". La couche LVM n'est pas obligatoire mais elle permet, si on le désire, utiliser plus d'un disque. Dans la seconde application, nous partirons directement sur les partitions sans couche LVM.
Ensuite nous ajoutons une couche LVM. On ajoutons ce device à un Volume Group nommé "fo1_vg_data" pour la machine "fo1.home.dom" et nommé "fo2_vg_data" pour la machine "fo2.home.dom". Ce device est seul dans ce Volume Group. Enfin on y ajoute un Logical Volume qui prend la totalité de l'espace nommé "fo1_lv_data" pour la machine "fo1.home.dom" et nommé "fo2_lv_data" pour la machine "fo2.home.dom". La couche LVM n'est pas obligatoire mais elle permet, si on le désire, utiliser plus d'un disque et d'être indépendant du nom de la partition qui peut changer en fonction de la connectique. Dans la seconde application, nous partirons directement sur les partitions sans couche LVM.


En synthèse, nous avons les devices suivants:
En synthèse, nous avons les devices suivants:
Ligne 56 : Ligne 59 :
   }
   }
   
   
  # syncer { rate 40M; }
  # syncer { rate 45M; }
   
   
   disk {
   disk {
Ligne 83 : Ligne 86 :
   }
   }
  }
  }
---
----
Quelques options sont importantes:
Quelques options sont importantes:
* le nom de la ressource Drbd se nomme "'''drbddata'''"
* le nom de la ressource Drbd se nomme "'''drbddata'''"
* Les deux sections derrière l'option "on" définissent les caractéristiques des deux blocs constituant ce device Drbd
* Les deux sections derrière l'option "on" définissent les caractéristiques des deux blocs constituant ce device "/dev/drbd1"
** Derrière l'option "on", nous avons le nom des machines
** Derrière l'option "on", nous avons le nom des machines
** Derrière la sous-option "disk", nous avons le nom des deux devices de type disque dur que nous avons préparés ci-dessus
** Derrière la sous-option "disk", nous avons le nom des deux devices de type disque dur que nous avons préparés ci-dessus
** Derrière la sous-option "address", nous les informations réseaux: l'adresse réseau IPV4 de l'interface et le n° de port TCP
** Derrière la sous-option "address", nous avons les informations réseaux: l'adresse réseau IPV4 de l'interface et le n° de port TCP
** Derrière la sous-option "device", le nom du device résultant nommé "'''/dev/drbd1'''"
** Derrière la sous-option "device", nous avons le nom du device résultant nommé "'''/dev/drbd1'''"
L'ancienne option "syncer" permet de définir la vitesse de transfert en bytes; il existe des options plus récentes, plus adaptatives. Mais le système s'adapte de lui-même et il est calculé à la base pour des cartes réseaux 1Gb, ce que nous avons. Pour cette raison, cette option est mise en commentaire. Le plus facile, pour calculer cette vitesse en bytes et non en bits, on prend la vitesse du périphérique le plus lent entre les disques et les cartes réseaux et on la divise par trois.
L'ancienne option "syncer" permet de définir la vitesse de transfert en bytes; il existe des options plus récentes, plus adaptatives. Mais le système s'adapte de lui-même et il est calculé à la base pour des cartes réseaux 1Gb, ce que nous avons. Pour cette raison, cette option est mise en commentaire. Le plus facile, pour calculer cette vitesse en bytes et non en bits, on prend la vitesse du périphérique le plus lent entre les disques et les cartes réseaux et on la divise par trois.


Ligne 105 : Ligne 108 :


=Principe de fonctionnement=
=Principe de fonctionnement=
Dans le système Raid 1 classique, un seul disque est accessible, l'autre est là pour recevoir les données à synchroniser et pour prendre la main en cas de problème. Pour Drbd, c'est le même principe classiquement.
Dans le système Raid 1 classique, un seul disque est accessible, l'autre est là pour recevoir les données à synchroniser et pour prendre la main en cas de problème. Pour Drbd, c'est le même principe en mode Actif/Passif.


Celui qui a la main, est appelé "Primary", l'autre "Secondary". Par défaut, aucun n'a la main et sont donc tous les deux en mode "Secondary"; il faut en désigner un. Si celui l'autre n'est pas joignable à travers le réseau, il est dit "Unknown". Les deux peuvent être postés au stade "Primary" mais c'est une situation qui demande beaucoup de précautions.
Celui qui a la main, est appelé "Primary", l'autre "Secondary". Par défaut, aucun n'a la main et sont donc tous les deux en mode "Secondary"; il faut en désigner un. Si l'autre n'est pas joignable à travers le réseau, il est dit "Unknown". Les deux peuvent être portés au stade "Primary" mais c'est une situation qui demande beaucoup de précautions.


Au début leurs états est "Inconsistent"; c'est à dire que le contenu des deux disques est différent alors qu'il doit être identique. Quand ces contenus sont identiques ou qu'un est défini comme la référence, cet état est déclaré "UpToDate". Quand les deux disques ont un état "UpToDate", nous sommes dans la situation idéale.
Au début leurs états est "Inconsistent"; c'est à dire que le contenu des deux disques est différent alors qu'il doit être identique. Quand ces contenus sont identiques ou qu'un est défini comme la référence, cet état est déclaré "UpToDate". Quand les deux disques ont un état "UpToDate", nous sommes dans la situation idéale.
Ligne 118 : Ligne 121 :


=Création=
=Création=
Il faut maintenant initialiser ce nouveau périphérique "/dev/drbd1". Cette opération est faire manuellement en lignes de commande. Les premières commandes doivent se faire sur les deux machines du cluster Drbd. Dès que le système est lancé, les suivantes se font d'un seul côté.
Il faut maintenant initialiser ce nouveau périphérique "/dev/drbd1". Cette opération est faite manuellement en lignes de commande. Les premières commandes doivent se faire sur les deux machines du cluster Drbd. Dès que le système est lancé, les suivantes se font d'un seul côté.




Ligne 127 : Ligne 130 :


==Initialisation du device Drbd==
==Initialisation du device Drbd==
Cette opération analogue au formatage d'un disque. La commande suivante va initialiser la ressource "drbddata":
Cette opération analogue au formatage d'un disque. La commande suivante va initialiser la ressource "drbddata" sur chaque disque de chaque machine:
  drbdadm create-md drbddata
  drbdadm create-md drbddata
Cette opération est à faire sur les deux machines. La Commande demande confirmation:
Cette opération est à faire sur les deux machines. La Commande demande confirmation:
Ligne 159 : Ligne 162 :
  srcversion: 086EBDAD8BB6D6FF00986AA
  srcversion: 086EBDAD8BB6D6FF00986AA
----
----
Par la suite, nous utiliserons cette commande pour montrer l'évolution de la création.




Ligne 170 : Ligne 174 :
  srcversion: 086EBDAD8BB6D6FF00986AA
  srcversion: 086EBDAD8BB6D6FF00986AA
   
   
   1: cs:WFConnection ro:Secondary/Unknown ds:Inconsistent/DUnknown C r----s
   1: cs:'''WFConnection''' ro:Secondary/'''Unknown''' ds:Inconsistent/'''DUnknown''' C r----s
     ns:0 nr:0 dw:0 dr:0 al:0 bm:0 lo:0 pe:0 ua:0 ap:0 ep:1 wo:f oos:156282168
     ns:0 nr:0 dw:0 dr:0 al:0 bm:0 lo:0 pe:0 ua:0 ap:0 ep:1 wo:f oos:156282168
----
----
Quand son équivalent est démarré sur l'autre machine, l'état devient:
Cette machine attend la connexion ("WFConnection"). Quand son équivalent est démarré sur l'autre machine, l'état devient:
----
----
  version: 8.4.11 (api:1/proto:86-101)
  version: 8.4.11 (api:1/proto:86-101)
  srcversion: 086EBDAD8BB6D6FF00986AA
  srcversion: 086EBDAD8BB6D6FF00986AA
   
   
   1: cs:Connected ro:Secondary/Secondary ds:Inconsistent/Inconsistent C r-----
   1: cs:'''Connected''' ro:'''Secondary/Secondary''' ds:'''Inconsistent/Inconsistent''' C r-----
     ns:0 nr:0 dw:0 dr:0 al:8 bm:0 lo:0 pe:0 ua:0 ap:0 ep:1 wo:f oos:156282168
     ns:0 nr:0 dw:0 dr:0 al:8 bm:0 lo:0 pe:0 ua:0 ap:0 ep:1 wo:f oos:156282168
----
----
On remarque que l'état est "Inconsistent".  
On remarque que l'état est connecté ("Connected") mais "Inconsistent". Les deux machines sont à l'état Passif/Passif.




Ligne 197 : Ligne 201 :
  srcversion: 086EBDAD8BB6D6FF00986AA
  srcversion: 086EBDAD8BB6D6FF00986AA
   
   
   1: cs:SyncSource ro:Primary/Secondary ds:UpToDate/Inconsistent C r-----
   1: cs:'''SyncSource''' ro:'''Primary'''/Secondary ds:'''UpToDate'''/Inconsistent C r-----
     ns:784128 nr:0 dw:0 dr:784128 al:8 bm:0 lo:0 pe:0 ua:0 ap:0 ep:1 wo:f oos:155498040
     ns:784128 nr:0 dw:0 dr:784128 al:8 bm:0 lo:0 pe:0 ua:0 ap:0 ep:1 wo:f oos:155498040
         [>....................] sync'ed:  0.6% (151852/152616)M
         [>....................] sync'ed:  0.6% (151852/152616)M
         finish: 1:09:22 speed: 37,336 (37,336) K/sec
         finish: 1:09:22 speed: 37,336 (37,336) K/sec
----
----
Il transmet ("SyncSource") et il est la référence ("UpToDate").


On peut visionner l'évolution de cet état sur l'autre machine, ici un peut plus tard:
On peut visionner l'évolution de cet état sur l'autre machine, ici un peut plus tard:
Ligne 208 : Ligne 213 :
  srcversion: 086EBDAD8BB6D6FF00986AA
  srcversion: 086EBDAD8BB6D6FF00986AA
   
   
   1: cs:SyncTarget ro:Secondary/Primary ds:Inconsistent/UpToDate C r-----
   1: cs:'''SyncTarget'''' ro:Secondary/Primary ds:Inconsistent/UpToDate C r-----
     ns:0 nr:73796608 dw:73796352 dr:0 al:0 bm:0 lo:2 pe:4 ua:1 ap:0 ep:1 wo:f oos:82485816
     ns:0 nr:73796608 dw:73796352 dr:0 al:0 bm:0 lo:2 pe:4 ua:1 ap:0 ep:1 wo:f oos:82485816
         [========>...........] sync'ed: 47.3% (80552/152616)M
         [========>...........] sync'ed: 47.3% (80552/152616)M
         finish: 0:35:45 speed: 38,424 (37,516) want: 48,400 K/sec
         finish: 0:35:45 speed: 38,424 (37,516) want: 48,400 K/sec
----
----
On peut voir la vitesse de transfert: environ 38,4MB/s (38,424).
On peut voir la vitesse de transfert en réception ("SyncTarget"): environ 38,4MB/s (38,424).




Ligne 222 : Ligne 227 :
  Connexions Internet actives (serveurs et établies)
  Connexions Internet actives (serveurs et établies)
  Proto Recv-Q Send-Q Adresse locale          Adresse distante        Etat        PID/Program name
  Proto Recv-Q Send-Q Adresse locale          Adresse distante        Etat        PID/Program name
  tcp        0      0 192.168.2.71:7789      192.168.2.72:56647      ESTABLISHED -
  tcp        0      0 '''192.168.2.71:7789'''       192.168.2.72:56647      ESTABLISHED -
  tcp        0 570800 192.168.2.71:44847      192.168.2.72:7789      ESTABLISHED -
  tcp        0 570800 192.168.2.71:44847      '''192.168.2.72:7789'''       ESTABLISHED -
----
----




Enfin quand la synchronisation est finie, l'état devient stable:
Enfin quand la synchronisation est finie, l'état devient stable ("Connected") et mis à jour ("UpToDate"):
----
----
  version: 8.4.11 (api:1/proto:86-101)
  version: 8.4.11 (api:1/proto:86-101)
  srcversion: 086EBDAD8BB6D6FF00986AA
  srcversion: 086EBDAD8BB6D6FF00986AA
   
   
   1: cs:Connected ro:Primary/Secondary ds:UpToDate/UpToDate C r-----
   1: cs:'''Connected ro:Primary/Secondary''' ds:'''UpToDate/UpToDate''' C r-----
     ns:156282168 nr:0 dw:0 dr:156282168 al:8 bm:0 lo:0 pe:0 ua:0 ap:0 ep:1 wo:f oos:0
     ns:156282168 nr:0 dw:0 dr:156282168 al:8 bm:0 lo:0 pe:0 ua:0 ap:0 ep:1 wo:f oos:0
----
----




On peut observer la quantité de données echangée avec la commande:
On peut observer la quantité de données échangée avec la commande:
  ifconfig
  ifconfig
Sur la machine "fo1.home.dom", affichage limité à l'interface réseau "eth2":
Sur la machine "fo1.home.dom", affichage limité à l'interface réseau "eth2" utilisé:
----
----
  eth2: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
  eth2: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
Ligne 246 : Ligne 251 :
         RX packets 11892040  bytes 834317226 (795.6 MiB)
         RX packets 11892040  bytes 834317226 (795.6 MiB)
         RX errors 0  dropped 0  overruns 0  frame 0
         RX errors 0  dropped 0  overruns 0  frame 0
         TX packets 111680341  bytes 167428741104 ('''155.9 GiB''')
         '''TX''' packets 111680341  bytes 167428741104 ('''155.9 GiB''')
         TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0
         TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0
----
----
Ligne 254 : Ligne 259 :
         inet 192.168.2.72  netmask 255.255.255.0  broadcast 192.168.2.255
         inet 192.168.2.72  netmask 255.255.255.0  broadcast 192.168.2.255
         ether 00:1c:c0:2a:c4:25  txqueuelen 1000  (Ethernet)
         ether 00:1c:c0:2a:c4:25  txqueuelen 1000  (Ethernet)
         RX packets 111682659  bytes 167878464532 (156.3 GiB)
         '''RX''' packets 111682659  bytes 167878464532 ('''156.3 GiB''')
         RX errors 0  dropped 0  overruns 0  frame 0
         RX errors 0  dropped 0  overruns 0  frame 0
         TX packets 11892728  bytes 881941130 (841.0 MiB)
         TX packets 11892728  bytes 881941130 (841.0 MiB)
Ligne 260 : Ligne 265 :
         device interrupt 20  memory 0xe0380000-e03a0000
         device interrupt 20  memory 0xe0380000-e03a0000
----
----
On a transféré 156GB.




=Utilisation=
Maintenant que le système est opérationnel, on peut l'utiliser.
Ce device "/dev/drbd1" est à considérer comme une partition normale ou à un Logical Volume que l'on peut formater et monter.


Ces opérations sont à faire sur une seule machine, la "Primary", "fo1.home.dom". Dans notre configuration actuelle, il n'est pas question d'être en double "Primary".




==Formatage==
Sur la machine "Primary", "fo1.home.dom", on va le formater en "xfs":
mkfs.xfs /dev/drbd1




==Montage==
On crée un répertoire pour ce nouveau device:
mkdir /data
Profitons-en pour effectuer cette création de ce répertoire sur les deux machines car par la suite, sous Pacemaker, nous serons amené à pouvoir migrer cette ressource sur l'autre machine en cas de situation de panne.


On le monte:
mount -t xfs /dev/drbd1 /data
On peut dès lors y copier des fichiers.




==Arrêt==
=Choisir l'état=
Pour information, l'arrêt de cette ressource "drbddata" se fait avec cette commande sur les deux machines:
La commande suivante permet de passer sur la machine local, la ressource ("drbddata") à l'état Actif ("primary"):
drbdadm primary drbddata
Et celle-ci de passer sur la machine local, la ressource ("drbddata") à l'état Passif ("Secondary"):
drbdadm secondary drbddata
 
 
=Arrêt=
Considérons l'arrêt de cette ressource.
 
En premier, on démonte ce device sur la machine "Primary", "fo1.home.dom":
umount /data
 
 
Dès lors on peut arrêter cette ressource "drbddata" sur les deux machines:
  drbdadm down drbddata
  drbdadm down drbddata
Il faut que la ressource ne soit pas utilisée. Il faut que le device "/dev/drdb1" soit démonté au préalable.




=Remarques=
Toute cette opération a été faite manuellement. Ne tentez pas de l'automatiser comme une partition classique. Nous verrons dans l'article suivant comment l'intégrer à Pacemaker dans une situation de Failover et ensuite de Loadbalancing.


Autre remarque, le pilote sera chargé automatiquement par Pacemaker.


Les deux interfaces réseaux "eth2" sont réservés à la liaison entre ces deux machines. Il est donc possible de les relier directement sans Switch; soit par un câble réseau croisé (en théorie, c'est nécessaire), soit un câble réseau normal si les cartes réseaux ont la capacité d'effectuer ce croisement automatique de façon logiciel. C'est notre cas.




Ligne 283 : Ligne 320 :


----
----
''&rarr; [[LINUX:Notions de gestion des disques|retour à la gestion des disques]]''
''&rarr; [[LINUX:Haute disponibilité|retour au menu de la Haute disponibilité]]''
''&rarr; [[LINUX:Haute disponibilité|retour au menu de la Haute disponibilité]]''
----
----
__NOEDITSECTION__
__NOEDITSECTION__
[[Category:LINUX]]
[[Category:LINUX]]