Sincronizzare device di blocco

INTRO

sono 3 programmi con 3 approcci diversi che conosco per sincronizzare device di blocco in modo efficiente tra nodi diversi.

DD va bene ma ogni volta che viene invocato passa una quantità dati parti alla dimensione del device, anche se sono stati modificati pochi o nessun blocco.

dd if=/dev/sdxy bs=1M | ssh root@server | dd of=/dev/sdxy bs=1M

PRIMA SINCRONIZZAZIONE

La prima sincronizzazione va fatta con il classico dd.
Dobbiamo partire con due device uguali su due host differenti.
Fa eccezione blocksync.py.

DESCRIZIONE

blocksync.py

blocksync fa una cosa analoga al check di un file torrent.
“Divide” il device sorgente in blocchi da 1M (predefinito, configurabile);
calcola l’hash (sha1), fa la stessa cosa sull’altro nodo sul device di destinazione;
se l’hash non corrisponde, copia il blocco.

lvmsync

L’idea di base è questa:
faccio uno snapshot del volume logico;
tot bloochi vengono modificati;
lo snapshot contiene già le informazioni di quali blocchi sono stati modificati;
fermo le scritture sul device;
copio i blochi che sono stati modificati;
rimuovo lo snapshot;
ricreo lo snapshot;
sono pronto a ripartire e tenere tracce delle nuove modifiche.

dsync

come approccio è simile ad lvmsync.
Si tratta di una patch del kernel (device mapper) in grado di “tenere a mente” quali blocchi sono stati cambiati da un certo momento in poi.
“Track modifications instead of computing checksum”.
Si accompagna con dei tool in user space per l’utilizzo di queste informazioni ed esguire quindi la sincronizzazione.
Video introduttivo.

SINTASSI

blocksync.py

python blocksync.py /dev/source user@remotehost /dev/dest

lvmsync

lvmsync <snapshot LV device> <destserver>:<destblock>

dsync

dmextract srcdev | ssh remote 'dmmerge targetdev'

PRO E CONTRO

blocksync.py

Pro:
Funziona con qualsiasi device di blocco.
Non usa copy on write, quindi non rallenta il device nel normale utilizzo.
Se usato su uno snapshot lvm, mi permette di sincronizzare un device senza interrompere le scritture sullo stesso.

Contro:
cpu intensive
maggiore è l adimensione del device, più tempo impega.

lvmsync

Pro:
Trasferimento dati ridotto al minimo
Non è cpu intensive.
Aumentando la dimensione del device non aumenta il tempo di sincronizzazione.

Contro:
Funziona solo con device lvm.
Rallenta il device durante la normale operatività perchè il copy on write è sempre attivo.

dsync

Pro:
Non usa copy on write, quindi non rallenta il device nel normale utilizzo.
Non è cpu intensive.
Non usa copy on write, quindi non rallenta il device nel normale utilizzo.
Funziona con qualsiasi device di blocco.

Contro:
Il modulo non è ancora nel kernel e va compilato a parte.
L’indice dei blocchi modificati (vectors) è tenuto in memoria.
Se la macchina crasha non sarà possibile sincronizzare il device remoto tramite dsync.
Non l’ho ancora testato personalmente.

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *

*