• STATISTIQUES
  • Il y a eu un total de 1 membres et 28894 visiteurs sur le site dans les dernières 24h pour un total de 28 895 personnes!


    Membres: 2 604
    Discussions: 3 579
    Messages: 32 816
    Tutoriels: 78
    Téléchargements: 38
    Sites dans l'annuaire: 58


  • ANNUAIRE
  • [FR] Cyber-Hacker
    CH - Cyber Hacker est un jeu par navigateur de simulation de hack, programmez et envoyez vos virus et piratez les aut...
    Hacking
    [FR] apprendre-a-manipuler
    Site d'apprentissage de la manipulation d'autrui.
    Hacking
    [FR] Root-Me
    Notre équipe se base sur un constat : à l'heure actuelle ou l'information tend à devenir...
    Hacking
    [EN] Reddit
    Subreddit dédié à la sécurité informatique.
    Hacking
    [FR] Root-me
    Script: 5, Système: 20, Cracking: 16, Cryptanalyse: 17, Programmation: 8, Réaliste: 11, Réseau: 10, Stéganog...
    Challenges
    [FR] Newbie Contest
    Crackme: 35, Cryptographie: 49, Hacking: 27, Javascript/Java: 17, Logique: 31, Programmation: 23, Stéganographie: 53
    Challenges
    [EN] Listbrain Version 3
    Site proposant 66 challenges présentés dans une liste mélangée.
    Challenges

  • DONATION
  • Si vous avez trouvé ce site internet utile, nous vous invitons à nous faire un don du montant de votre choix via Paypal. Ce don servira à financer notre hébergement.

    MERCI!




Note de ce sujet :
  • Moyenne : 0 (0 vote(s))
  • 1
  • 2
  • 3
  • 4
  • 5
[SYS] DRBD (Distributed Replicated Block Device)
19-09-2014, 00h11
Message : #1
Junky Hors ligne
Snorky Master
*



Messages : 228
Sujets : 35
Points: 203
Inscription : Mar 2013
[SYS] DRBD (Distributed Replicated Block Device)
Bonjour,

Dans un post précédent je vous avais parlé de mdadm. Je vous laisse vous reporter sur le post pour ceux qui ont oubliaient ce qu'est mdadm.

Dans ce post la je vais vous présenter DRBD.

DRBD donc vous permet la réplication de périphériques de bloc tel que:
- disques
- partitions
- volumes logiques
- ect...
entre serveurs.

Je garde mon environnement habituel, c'est à dire nous possédons des serveurs physiques avec un Xen hyperviseur + des LV qui accueillent nos VM.

Nous travaillerons directement sur les dom0. Il est possible de travailler au niveaux des VM aussi.

Il existe deux façons de mettre en place un DRBD. Nous en verrons qu'une seule ici, mais si je vous présenterai succinctement l'autre mais sans rentrer dans les détails pour la simple raison c'est que je ne l'ai jamais testé. Smile

Je ne rentrerai dans les détails, j'estime que si vous arrivez a ce stade c'est a dire mettre un drbd en place, vous avez déjà quelques bonnes connaissances en sys. Si vous avez par contre des questions, n'hésitez pas a me les poser.

Aller c'est tipar.

0x01 Vous avez dit deux façons?

La première celle que nous allons voir par du principe que votre LV + VM sont installés configurés et utilisés. On peut facilement imaginer une machine de prod qui prend de plus en plus d'importance et qu'une réplication devient urgente.

La deuxième serai donc le contraire. Vous devez mettre en place une VM et vous devez monter un DRBD dessus.

Même si les deux manières ont a même finalités il y a cependant des différences lors du montage de ceci que je vous expliquerai dans le post.

0x02 Il y a urgence. Il nous faut une réplication de suite sans coupure...


Dans un premier temps il nous faut l'application:

Code :
#Gentoo
0 ✓ silentd@G3nt00 ~ $ emerge -s drbd
Searching...    
[ Results for search key : drbd ]
[ Applications found : 2 ]

*  sys-cluster/drbd
      Latest version available: 8.4.2
      Latest version installed: [ Not Installed ]
      Size of files: 659 kB
      Homepage:      http://www.drbd.org
      Description:   mirror/replicate block-devices across a network-connection
      License:       GPL-2

*  sys-cluster/drbd-kernel
      Latest version available: 8.0.16
      Latest version installed: [ Not Installed ]
      Size of files: 315 kB
      Homepage:      http://www.drbd.org
      Description:   mirror/replicate block-devices across a network-connection
      License:       GPL-2

#Debian
apt-cache policy drbd8-utils
drbd8-utils:
  Installed: 2:8.3.13-2
  Candidate: 2:8.3.13-2
  Version table:
     2:8.4.4-1~bpo70+1 0
        100 http://ftp2.fr.debian.org/debian/ wheezy-backports/main amd64 Packages
*** 2:8.3.13-2 0
        500 http://ftp2.fr.debian.org/debian/ wheezy/main amd64 Packages
        100 /var/lib/dpkg/status

Une fois l'installation faite, il faut vérifier que le module est bien chargé:

Code :
lsmod |grep drbd

Si celui-ci ne l'est pas, chargez le avec 'modprobe'

Une fois tout ceci ok, nous pouvons passer à la configuration.

0x03 Configuration.


Comme je vous le dis plus haut, nous allons travailler sur des LV + VM donc directement sur nos dom0. Nous aurons donc 2 dom0 à disposition. Nous les nommerons dom1 et dom2 (pas super original hein... )

Notre VM est présente sur dom1 et elle répond au doux nom de VM (moaurfff mais stop l'originalité srx!!! Smile )

Comme nous désirons répliquer de dom1 sur dom2 il nous faut créer un LV de même taille sur sur dom2. Je ne vous expliue pas comment faire pour le créer mais vous pouvez vous reporter sur un de mes posts qui en parle.

Une fois le LV sur dom2 en place il faut créer un fichier de configuration sur les 2 dom0 dans le dossier '/etc/drbd.d/file.res'

Voici un exemple:

Code :
resource mon_drbd {
  protocol C;
  #handlers {
    # what should be done in case the node is primary, degraded
    # (=no connection) and has inconsistent data.
    #pri-on-incon-degr "echo o > /proc/sysrq-trigger ; halt -f";
    # The node is currently primary, but lost the after split brain
    # auto recovery procedure. As as consequence it should go away.
    #pri-lost-after-sb "echo o > /proc/sysrq-trigger ; halt -f";
    # In case you have set the on-io-error option to "call-local-io-error",
    # this script will get executed in case of a local IO error. It is
    # expected that this script will case a immediate failover in the
    # cluster.
    #local-io-error "echo o > /proc/sysrq-trigger ; halt -f";
    # The node is currently primary, but should become sync target
    # after the negotiating phase. Alert someone about this incident.
    #pri-lost "echo pri-lost. Have a look at the log files. | mail -s 'DRBD Alert' root";
    # Notify someone in case DRBD split brained.
    #split-brain "echo split-brain. drbdadm -- --discard-my-data connect $DRBD_RESOURCE ? | mail -s 'DRBD Alert' root";
  #}
  startup {
    become-primary-on dom1;
    # Wait for connection timeout, to avoid blocking the machine at boot
    wfc-timeout  1;
    # Wait for connection timeout if this node was a degraded cluster.
    # In case a degraded cluster (= cluster with only one node left)
    # is rebooted, this timeout value is used.
    #
    degr-wfc-timeout 120;    # 2 minutes.
  }
  disk {
    on-io-error   detach;
  }
  syncer { rate 10M; }
  net {
    # timeout       60;    #  6 seconds  (unit = 0.1 seconds)
    # connect-int   10;    # 10 seconds  (unit = 1 second)
    # ping-int      10;    # 10 seconds  (unit = 1 second)
    # ping-timeout   5;    # 500 ms (unit = 0.1 seconds)

    # Maximal number of requests (4K) to be allocated by DRBD.
    # max-buffers     2048;
    after-sb-0pri disconnect;
    after-sb-1pri disconnect;
    after-sb-2pri disconnect;
    rr-conflict disconnect;
  }
  on dom1 {
    device  /dev/drbd1;
    disk  /dev/vg/VM-disk;
    address  X.X.X.X:9001;
    flexible-meta-disk /dev/vg/VM-meta;
  }
  on dom2 {
    device  /dev/drbd1;
    disk  /dev/vg/VM-disk;
    address  X.X.X.X:9001;
    flexible-meta-disk /dev/vg/VM-meta;
  }
}

C'est le fichier que j'utilise par défaut depuis que je me sers de DRBD. Il faut bien entendu l'adapter a nos besoins.

On va expliquez un peu tout ca:

- resource mon_drbd => le "nom" du drbd
- become-primary-on dom1 => notre dom0 primaire
- syncer { rate 10M; } => la vitesse de synchro entre les 2 dom0.
- on dom1 => le nom premier node
- on dom2 => le nom du deuxième node

Pour les options qui vont suivrent, ce sont les mêmes explications pour les deux nodes:
- device /dev/drbd1 => Le device du drbd
- disk /dev/vg/VM-disk => le LV a répliquer
- address X.X.X.X:9001 => l'IP + port du dom0
- flexible-meta-disk /dev/vg/VM-meta => ici on utilise un lv pour les métas données.

Alors voici la différence entre les deux manières. Il faut faire EXTRÊMEMENT attention ici. En effet il existe deux options. Une 'flexible-meta-disk LV' de meta et une 'meta-disk interne'

La première utilisera donc un LV de méta et ne touchera pas au device, contrairement a la seconde qui fera 'transiter' les méta en interne cad sur le '/dev/drbd1' ce qui peut corrompre votre LV et empecher de faire booter votre VM par la suite. Utilisez interne si vous avez créer le DRBD avant la VM et non l'inverse.

Comme nous allons utiliser un LV pour les métas, il nous faut donc en créer un. Alors attention aussi. Il faut calculer la valeur MINIMUM pour la taille du LV. Je vous laisse vous reporter a la superbe équation a réaliser pour le calculer.

0x04 Lancement du drbd

DRBD possède plusieurs commandes comme 'drbdadm'. Nous allons nous en servir pour le lancer.

Code :
drbdadm create-md mon_drbd
drbdadm attach mon_drbd
drbdadm up

Il faut exécuter ces commandes sur les 2 dom0.

Vous pouvez constater que le drbd est en place via un 'cat /proc/drbd'
Code :
cat /proc/drbd
version: 8.2.6 (api:88/proto:86-88)

1: cs:WFConnection st:Secondary/Secondary ds:Inconsistent/DUnknown C r---
    ns:0 nr:0 dw:0 dr:0 al:0 bm:0 lo:0 pe:0 ua:0 ap:0 oos:2523020

Il nous reste plus qu'a lancer la commande pour lancer la synchro
Code :
drbdadm -- --overwrite-data-of-peer primary mon_drbd

Refaite un cat sur le /proc/drbd et admirez:
Code :
1: cs:SyncSource ro:Primary/Secondary ds:UpToDate/Inconsistent C r-----
     ns:2966480 nr:0 dw:3024 dr:3011413 al:27 bm:180 lo:0 pe:0 ua:0 ap:0 ep:1 wo:f oos:7519680
  [====>...............] sync'ed: 28.4% (7340/10240)Mfinish: 0:11:46 speed: 10,624 (10,120) K/sec

0x05 Conclusion

La mise en place est assez rapide est ""simple"". Le LV répliqué, n'est pas "up" c'est a dire la VM ne tourne pas, mais si un problème arrive sur la Primary, il vous suffira de la shutdown et de create la secondary. Vous n'aurez que quelques secondes de coupures.
Il est quand même nécessaire de réaliser quelque recherche, car une mauvaise manipulation peu engendrer la perte d'une VM, ce qui finalement créera le contraire de ce nous voulions. Smile

Voilà.

Junky,
Pour la sécurité, sous linux, le principal soucis est l'interface chaise/clavier

+1 (3) -1 (0) Répondre


Atteindre :


Utilisateur(s) parcourant ce sujet : 2 visiteur(s)
N-PN
Accueil | Challenges | Tutoriels | Téléchargements | Forum | Retourner en haut