====== DRBD ======
===== Procédure de mise en place =====
==== Mode Primaire/Secondaire ====
* Installation de drbd : apt-get install drbd8-utils
* Créer le fichier de configuration de la ressource : ///etc/drbd.d/r0.res//resource r0 {
protocol C;
handlers {
}
startup {
degr-wfc-timeout 120;
outdated-wfc-timeout 2;
}
disk {
on-io-error detach;
}
net {
after-sb-0pri discard-younger-primary;
after-sb-1pri consensus;
after-sb-2pri disconnect;
rr-conflict disconnect;
cram-hmac-alg "sha1";
shared-secret "mon_sercret";
}
syncer {
rate 90M;
al-extents 257;
}
on srvvirt1 {
device /dev/drbd0;
disk /dev/vg_srv1/drbd0;
address 172.20.0.6:7788;
meta-disk internal;
}
on srvvirt2 {
device /dev/drbd0;
disk /dev/vg_srv2/drbd0;
address 172.20.0.7:7788;
meta-disk internal;
}
}
* Initialiser les devices via la commande : drbdadm create-md r0
* Lancer drbd : /etc/init.d/drbd restart
* Sur une des deux machines, forcer en primary : drbdadm -- --overwrite-data-of-peer primary r0
==== Mode Primaire/Primaire ====
* Installation de drbd : apt-get install drbd8-utils
* Créer le fichier de configuration de la ressource : ///etc/drbd.d/r0.res//resource r0 {
protocol C;
handlers {
}
startup {
degr-wfc-timeout 120;
outdated-wfc-timeout 2;
become-primary-on both;
}
disk {
on-io-error detach;
}
net {
after-sb-0pri discard-younger-primary;
after-sb-1pri consensus;
after-sb-2pri disconnect;
rr-conflict disconnect;
allow-two-primaries;
cram-hmac-alg "sha1";
shared-secret "mon_sercret";
}
syncer {
rate 90M;
al-extents 257;
}
on srvvirt1 {
device /dev/drbd0;
disk /dev/vg_srv1/drbd0;
address 172.20.0.6:7788;
meta-disk internal;
}
on srvvirt2 {
device /dev/drbd0;
disk /dev/vg_srv2/drbd0;
address 172.20.0.7:7788;
meta-disk internal;
}
}
* Initialiser les devices via la commande : drbdadm create-md r0
* Lancer drbd : /etc/init.d/drbd restart
Si vous êtes en prod vous pouvez utiliser la commande drbdadmn up r0
* Sur une des deux machines, forcer en primary : drbdadm -- --overwrite-data-of-peer primary r0
* La synchro commence, elle peut être suivie dans ///proc/drbd//. Une fois terminée, passer l'autre machine en primaire également : drbdadm primary r0
===== Supprimer une ressource =====
drbdadmin remove /dev/drbd0
===== Agrandir une ressource =====
Partons du principe qu'une ressource //myvol// partagé entre les machines //hyp01// et //hyp02// dans un LV //myvol// des VG LVM respectifs //vg_hypXX// :
* On commence par redimensionner les LV LVM sous DRBD (avec **[size]** la taille en //Go//), sur chacune des machines : lvresize -L+[size]G /dev/vg_hypXX/myvol
* Un fois les LV agrandi, il faut que DRBD le prenne en compte. La commande si après ne doit être fait que si **UN SEUL** des noeuds est **PRIMAIRY**, que l'état du volume est **CONNECTED** et les volumes sont **UpToDate** : drbdadm resize myvol
* La machine //secondary// doit alors être en //resync//. Sans forcément attendre la fin de la synchro, il nous reste à redimenssionner le //filesystem// depuis la machine **PRIMARY** : resize2fs /dev/drbd0
===== Trucs et astuces =====
==== Triggers ====
Exemple :
handlers {
pri-on-incon-degr "echo o > /proc/sysrq-trigger ; halt -f";
pri-lost-after-sb "echo o > /proc/sysrq-trigger ; halt -f";
local-io-error "echo o > /proc/sysrq-trigger ; halt -f";
}
==== Reconnecter une ressource après incident ====
Lorsque la communication entre les serveurs a été interrompu et que les périphériques DRBD sont donc désynchronisé, il faut :
* décider quelle machine contient les données valides (à priori la dernière machine ayant été active)
* sur la machine contenant les données invalides, lancer les commandes : drbdadm secondary r0
drbdadm -- --discard-my-data connect r0
* sur la machine contenant les données valides, lancer la commande : drbdadm connect r0
La synchronisation des données démarre alors, on peut suivre son état via la comande : cat /proc/drbd
==== En cas de blocage en état Consistent alors qu'un seul des deux nœuds est présent ====
drbdadm -- --overwrite-data-of-peer primary r0