apr 142011
 

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…

Articoli simili

 Leave a Reply

(required)

(required)

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>