DRBD è un pacchetto che permette di creare un mirror utilizzando i dischi di due server diversi.
La versione 8 introduce la possibilità di avere volumi attivi contemporaneamente sui due server (e non quindi la classica funzionalità attivo/passivo), anche se resta bene inteso che per poter sfruttare una simile funzionalità è necessario utilizzare un filesystem cluster (ocfs2 oppure gfs).
Ammettiamo di avere il “solito” server Ubuntu: per installare drbd lanciamo:
apt-get install drbd8-utils modprobe drbd
A questo punto passiamo alla configurazione. I file di configurazione risiedono nella directory /etc/drbd.d: il file global_common.conf contiene i parametri generali:+
/etc/drbd.d/global_common.conf
global {
usage-count yes;
# minor-count dialog-refresh disable-ip-verification
}
common {
protocol C;
handlers {
# pri-on-incon-degr "/usr/lib/drbd/notify-pri-on-incon-degr.sh; /usr/lib/drbd/notify-emergency-reboot.sh; echo b > /proc/sysrq-trigger ; reboot -f";
# pri-lost-after-sb "/usr/lib/drbd/notify-pri-lost-after-sb.sh; /usr/lib/drbd/notify-emergency-reboot.sh; echo b > /proc/sysrq-trigger ; reboot -f";
# local-io-error "/usr/lib/drbd/notify-io-error.sh; /usr/lib/drbd/notify-emergency-shutdown.sh; echo o > /proc/sysrq-trigger ; halt -f";
# fence-peer "/usr/lib/drbd/crm-fence-peer.sh";
# split-brain "/usr/lib/drbd/notify-split-brain.sh root";
# out-of-sync "/usr/lib/drbd/notify-out-of-sync.sh root";
# before-resync-target "/usr/lib/drbd/snapshot-resync-target-lvm.sh -p 15 -- -c 16k";
# after-resync-target /usr/lib/drbd/unsnapshot-resync-target-lvm.sh;
}
startup {
# wfc-timeout degr-wfc-timeout outdated-wfc-timeout wait-after-sb
wfc-timeout 120; ## 2 min
degr-wfc-timeout 120; ## 2 minutes.
}
disk {
# on-io-error fencing use-bmbv no-disk-barrier no-disk-flushes
# no-disk-drain no-md-flushes max-bio-bvecs
on-io-error detach;
}
net {
# sndbuf-size rcvbuf-size timeout connect-int ping-int ping-timeout max-buffers
# max-epoch-size ko-count allow-two-primaries cram-hmac-alg shared-secret
# after-sb-0pri after-sb-1pri after-sb-2pri data-integrity-alg no-tcp-cork
allow-two-primaries;
after-sb-0pri discard-zero-changes;
after-sb-1pri discard-secondary;
timeout 60;
connect-int 10;
ping-int 10;
max-buffers 2048;
max-epoch-size 2048;
}
syncer {
# rate after al-extents use-rle cpu-mask verify-alg csums-alg
rate 500M;
}
}
La configurazione di ciascun disco, invece risiederà in un file separato:
/etc/drbd.d/drbd1.res
resource one-disk {
on server01 {
address 172.17.0.251:7791;
device /dev/drbd1;
disk /dev/sda5;
meta-disk /dev/sda3[0];
}
on server02 {
address 172.17.0.252:7791;
device /dev/drbd1;
disk /dev/sda5;
meta-disk /dev/sda3[0];
}
}
Nel mio caso /dev/sda5 è la partizione dati sulla quale eseguire il mirror, mentre in /dev/sda3 saranno contenuti i metadischi. Per ogni partizione, sono necessari 128MB di spazio nel metadisco, attenzione quindi ad avere spazio sufficiente nella partizione; ciascuna partizione avrà il suo metadisco, identificato da un valore progressivo (0 in questo caso). Attenzione, infine anche alle porte di comunicazione (in questo caso 7791): devono essere univoche per ciascuna risorsa drbd.
A questo punto creiamo il metadisco e ricarichiamo la configurazione su entrambi i server:
drbdadm create-md one-disk /etc/init.d/drbd reload
Ora sul server principale facciamo partire la sincronizzazione della risorsa:
drbdadm -- --overwrite-data-of-peer primary one-disk /etc/init.d/drbd status
Ora non vi resta che attendere che la sincronizzazione sia completata.
A questo punto potete rendere primario anche il secondo nodo e formattare la partizione con un filesystem cluster.
drbdadm primary one-disk (sul server2) sudo mkfs.ocfs2 /dev/drbd1
Provate a montare il disco su entrambi i server e scrivere file contemporaneamente…