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