Guida alle tecnologie

Guida completa: installare e configurare DRBD su CentOS/Oracle Linux 6

8 min read Guide tecniche Aggiornato 19 Oct 2025
Installare DRBD su CentOS/Oracle Linux 6
Installare DRBD su CentOS/Oracle Linux 6

DRBD (Distributed Replicated Block Device) replica dispositivi a blocchi tra due server per alta disponibilità e disaster recovery. Questa guida spiega passo dopo passo l’installazione, la compilazione dei pacchetti, la configurazione, la verifica e i test pratici usando /dev/sdb1 come dispositivo di esempio su due nodi (OEL641 e OEL642). Segui le sezioni in ordine, esegui i comandi come root e ripeti i passaggi su entrambi i server quando indicato.

Obiettivo e varianti di intento

Obiettivo principale: installare e configurare DRBD per replicare un dispositivo a blocchi tra due server su CentOS/Red Hat/Oracle Linux 6. Varianti correlate: configurare DRBD per High Availability, sincronizzazione block-level, migrazione dati tra nodi, integrazione con Pacemaker, uso con LVM/RAID.

1. Nota preliminare

DRBD significa Distributed Replicated Block Device. È una soluzione software per replicazione a livello di blocco che crea una copia speculare del contenuto di dispositivi a blocchi (dischi, partizioni, volumi logici). È pensato per scenari di High Availability (failover) e Disaster Recovery. Questa guida usa due server con indirizzi di rete privati 192.168.43.101 (OEL641) e 192.168.43.102 (OEL642) e un dispositivo libero /dev/sdb1 su ciascun nodo.

Schema di esempio della topologia:

+———————————–+ +—————————–+ | [ DRBD Server A ] | 192.168.43.101 | 192.168.43.102 | [ DRBD Server B ] | | OEL641 +———————-+———————–+ OEL642 | | folderA | | folderB | +———————————–+ +—————————–+

Requisiti principali:

  • Due server raggiungibili via rete privata.
  • Un dispositivo a blocchi libero su ciascun server (es. /dev/sdb1).
  • Accesso root su entrambi i server.
  • Pacchetti di sviluppo e kernel-headers compatibili per compilare i moduli DRBD.

Nota: questa guida è scritta per CentOS/Red Hat/Oracle Linux 6 (x86 32-bit nell’esempio). Adatta i comandi al tuo ambiente (architettura, nomi dispositivi, policy di sicurezza).

2. Fase di installazione delle dipendenze

Aggiorna il sistema e installa i pacchetti necessari per compilare DRBD. Esegui questi comandi su entrambi i server:

yum -y update   
yum -y install gcc make automake autoconf libxslt libxslt-devel flex rpm-build kernel-devel

Esempio di output (incluso come riferimento):

Setting up Install Process  
Package gcc-4.4.7-3.el6.i686 already installed and latest version  
Package 1:make-3.81-20.el6.i686 already installed and latest version  
Package automake-1.11.1-4.el6.noarch already installed and latest version  
Package autoconf-2.63-5.1.el6.noarch already installed and latest version  
Package libxslt-1.1.26-2.0.2.el6_3.1.i686 already installed and latest version  
Package libxslt-devel-1.1.26-2.0.2.el6_3.1.i686 already installed and latest version  
Package flex-2.5.35-8.el6.i686 already installed and latest version  
Package rpm-build-4.8.0-32.el6.i686 already installed and latest version  
Package kernel-devel-2.6.32-358.el6.i686 already installed and latest version

Esegui questi passaggi su entrambi i nodi prima di procedere alla compilazione dei pacchetti DRBD.

Important: assicurati che la versione del pacchetto kernel-devel corrisponda al kernel in uso. Se il kernel è diverso, aggiorna il kernel e riavvia, oppure installa i sorgenti compatibili.

3. Compilazione e installazione dei pacchetti DRBD

Creiamo la struttura rpmbuild per compilare i pacchetti RPM e scarichiamo i sorgenti DRBD.

mkdir -p /root/rpmbuild/{BUILD,BUILDROOT,RPMS,SOURCES,SPECS,SRPMS}

Scarica i sorgenti (gli URL di esempio provengono da linbit):

wget http://oss.linbit.com/drbd/drbd-utils-latest.tar.gz http://oss.linbit.com/drbd/8.4/drbd-8.4.7-1.tar.gz

Estrai gli archivi:

tar -zxvf drbd-8.4.7-1.tar.gz  
tar -zxvf drbd-utils-latest.tar.gz

Compila il kernel module in RPM per la versione DRBD indicata:

cd drbd-8.4.7-1   
drbd-8.4.7-1]# make km-rpm

Output di esempio che indica i pacchetti generati:

...  
...  
You have now:  
/root/rpmbuild/RPMS/i686/drbd-km-debuginfo-8.4.7-1.i686.rpm  
/root/rpmbuild/RPMS/i686/drbd-km-2.6.32_358.el6.i686-8.4.7-1.i686.rpm

Poi compiliamo e generiamo l’RPM per drbd-utils:

cd ..  
cd drbd-utils-8.9.6   
./configure   
make rpm

Output di esempio con tutti i RPM prodotti:

...  
...  
You have now:  
/root/rpmbuild/RPMS/i686/drbd-utils-8.9.6-1.el6.i686.rpm  
/root/rpmbuild/RPMS/i686/drbd-debuginfo-8.9.6-1.el6.i686.rpm  
/root/rpmbuild/RPMS/i686/drbd-heartbeat-8.9.6-1.el6.i686.rpm  
/root/rpmbuild/RPMS/i686/drbd-xen-8.9.6-1.el6.i686.rpm  
/root/rpmbuild/RPMS/i686/drbd-km-debuginfo-8.4.7-1.i686.rpm  
/root/rpmbuild/RPMS/i686/drbd-pacemaker-8.9.6-1.el6.i686.rpm  
/root/rpmbuild/RPMS/i686/drbd-bash-completion-8.9.6-1.el6.i686.rpm  
/root/rpmbuild/RPMS/i686/drbd-km-2.6.32_358.el6.i686-8.4.7-1.i686.rpm  
/root/rpmbuild/RPMS/i686/drbd-8.9.6-1.el6.i686.rpm  
/root/rpmbuild/RPMS/i686/drbd-udev-8.9.6-1.el6.i686.rpm

Installa gli RPM generati (sulla macchina dove hai compilato) dal percorso /root/rpmbuild/RPMS/i686:

cd /root/rpmbuild/RPMS/i686  
rpm -Uvh drbd-xen* drbd-udev* drbd-pacemaker* drbd-bash-completion* drbd-utils-*.rpm drbd-km-*.rpm drbd-8*

Esempio di output di installazione:

Preparing... ########################################### [100%]  
1:drbd-utils ########################################### [ 13%]  
2:drbd-xen ########################################### [ 25%]  
3:drbd-udev ########################################### [ 38%]  
4:drbd-pacemaker ########################################### [ 50%]  
5:drbd-bash-completion ########################################### [ 63%]  
6:drbd ########################################### [ 75%]  
7:drbd-km-2.6.32_358.el6.########################################### [ 88%]  
8:drbd-km-debuginfo ########################################### [100%]

Ripeti gli stessi passaggi (scaricare, compilare, installare) sull’altro server OEL642 oppure trasferisci gli RPM e installali con rpm -Uvh.

Note di sicurezza: se il server è connesso a Internet, limita l’accesso alla porta DRBD (es. firewall, network private). DRBD di default usa la porta TCP 7799 nell’esempio.

4. Verifica iniziale e preparazione del dispositivo

Su OEL641, verifica il nome host: il file di configurazione DRBD userà i nomi host così come sono.

uname -n
OEL641

Carica il modulo DRBD e verifica che sia presente:

modprobe drbd  
lsmod |grep drbd
drbd 341783 0  
libcrc32c 841 1 drbd

A questo punto crea la partizione fisica che userai come backend DRBD. Nell’esempio abbiamo un disco nuovo /dev/sdb; creiamo /dev/sdb1 con fdisk.

fdisk -l
Disk /dev/sdb: 1073 MB, 1073741824 bytes  
255 heads, 63 sectors/track, 130 cylinders  
Units = cylinders of 16065 * 512 = 8225280 bytes  
Sector size (logical/physical): 512 bytes / 512 bytes  
I/O size (minimum/optimal): 512 bytes / 512 bytes  
Disk identifier: 0x00000000
fdisk /dev/sdb
Command (m for help): n  
Command action  
e extended  
p primary partition (1-4)  
p  
Partition number (1-4): 1  
First cylinder (1-130, default 1):  
Using default value 1  
Last cylinder, +cylinders or +size{K,M,G} (1-130, default 130):  
Using default value 130
Command (m for help): p
Device Boot Start End Blocks Id System  
/dev/sdb1 1 130 1044193+ 83 Linux
Command (m for help): w  
The partition table has been altered!
Calling ioctl() to re-read partition table.  
Syncing disks.

Esegui gli stessi passaggi su OEL642 per avere /dev/sdb1 anche su quel nodo.

Important: se usi LVM o dispositivi mappati, assicurati che i nomi dei dispositivi siano coerenti su entrambi i nodi o usa UUID/udev rules per mantenere la consistenza.

5. Configurazione DRBD

La configurazione DRBD si trova tipicamente in /etc/drbd.d/. Creiamo un file di risorsa s1.res che definisce il device, il disco, gli indirizzi di rete e la meta-disk.

cd /etc/drbd.d/  
vi s1.res

Inserisci il contenuto seguente (sostituisci nomi host e indirizzi con i tuoi valori se necessari):

resource s1 {  
on OEL641 {  
device /dev/drbd1;  
disk /dev/sdb1;  
address 192.168.43.101:7799;  
meta-disk internal;  
}  
on OEL642 {  
device /dev/drbd1;  
disk /dev/sdb1;  
address 192.168.43.102:7799;  
meta-disk internal;  
}  
}

Copia il file di configurazione su OEL642 con scp:

scp /etc/drbd.d/s1.res root@OEL642:/etc/drbd.d/s1.res

Inizializza i metadati DRBD su entrambi i nodi (esegui sul primo nodo, poi sull’altro):

drbdadm create-md s1

Output di esempio:

initializing activity log  
NOT initializing bitmap  
Writing meta data...  
New drbd meta data block successfully created.  
success

Ripeti su OEL642.

Poi verifica e avvia il servizio DRBD. Sul primo server controlla lo stato e poi avvia:

/etc/init.d/drbd status
drbd driver loaded OK; device status:  
version: 8.4.7-1 (api:1/proto:86-101)  
GIT-hash: 3a6a769340ef93b1ba2792c6461250790795db49 build by root@OEL641, 2016-08-20 01:23:44  
m:res cs ro ds p mounted fstype  
[root@OEL641 ~]# /etc/init.d/drbd start  
Starting DRBD resources: [  
create res: s1  
prepare disk: s1  
adjust disk: s1  
adjust net: s1  
]  
..........  
***************************************************************  
DRBD's startup script waits for the peer node(s) to appear.  
- If this node was already a degraded cluster before the  
reboot, the timeout is 0 seconds. [degr-wfc-timeout]  
- If the peer was available before the reboot, the timeout  
is 0 seconds. [wfc-timeout]  
(These values are for resource 's1'; 0 sec -> wait forever)  
To abort waiting enter 'yes' [ 26]:  
.

Il servizio attenderà il peer: a questo punto avvia DRBD anche su OEL642 con lo stesso comando /etc/init.d/drbd start. Quando il peer si connette, entrambi i servizi completeranno l’avvio.

Uscita di stato tipica (entrambi i nodi connessi):

/etc/init.d/drbd status
drbd driver loaded OK; device status:  
version: 8.4.7-1 (api:1/proto:86-101)  
GIT-hash: 3a6a769340ef93b1ba2792c6461250790795db49 build by root@OEL641, 2016-08-20 01:23:44  
m:res cs ro ds p mounted fstype  
1:s1 Connected Secondary/Secondary Inconsistent/Inconsistent C

Determiniamo ora quale nodo sarà Primary iniziale. Scegli OEL641 e forza l’overwrite dei dati del peer:

drbdadm -- --overwrite-data-of-peer primary s1  
/etc/init.d/drbd status

Esempio di sincronizzazione in corso:

drbd driver loaded OK; device status:  
version: 8.4.7-1 (api:1/proto:86-101)  
GIT-hash: 3a6a769340ef93b1ba2792c6461250790795db49 build by root@OEL641, 2016-08-20 01:23:44  
m:res cs ro ds p mounted fstype  
... sync'ed: 0.8% (1037872/1044124)K  
1:s1 SyncSource Primary/Secondary UpToDate/Inconsistent C

Controlla OEL642 per vedere la controparte (SyncTarget):

/etc/init.d/drbd status
drbd driver loaded OK; device status:  
version: 8.4.7-1 (api:1/proto:86-101)  
GIT-hash: 3a6a769340ef93b1ba2792c6461250790795db49 build by root@OEL641, 2016-08-20 01:23:44  
m:res cs ro ds p mounted fstype  
... sync'ed: 12.2% (921244/1044124)K  
1:s1 SyncTarget Secondary/Primary Inconsistent/UpToDate C

Ora OEL641 è Primary e OEL642 è Secondary. Ogni scrittura sul device montato del Primary sarà replicata al Secondary.

6. Fase di test DRBD

Esegui i test solo sul Primary (nel nostro esempio OEL641).

Formatta il device DRBD e monta:

mkfs.ext3 /dev/drbd1

Esempio di output:

...  
...  
Writing inode tables: done  
Creating journal (4096 blocks): done  
Writing superblocks and filesystem accounting information: done

Crea la directory di mount e monta il filesystem:

mkdir /folderA  
mount /dev/drbd1 /folderA  
df -h
Filesystem Size Used Avail Use% Mounted on  
/dev/drbd1 1004M 18M 936M 2% /folderA

Controlla il contenuto e crea un file di test da 30 MB:

cd /folderA/  
ls -h
lost+found
dd if=/dev/zero of=/folderA/testfile bs=1M count=30
30+0 records in  
30+0 records out  
31457280 bytes (31 MB) copied, 0.178448 s, 176 MB/s
ls -lh
total 31M  
drwx------. 2 root root 16K Aug 21 08:55 lost+found  
-rw-r--r--. 1 root root 30M Aug 21 09:09 testfile

A questo punto puoi smontare il filesystem sul Primary e passare lo stato a Secondary (operazione non distruttiva se fatta correttamente):

/etc/init.d/drbd status
drbd driver loaded OK; device status:  
version: 8.4.7-1 (api:1/proto:86-101)  
GIT-hash: 3a6a769340ef93b1ba2792c6461250790795db49 build by root@OEL641, 2016-08-20 01:23:44  
m:res cs ro ds p mounted fstype  
1:s1 Connected Primary/Secondary UpToDate/UpToDate C /folderA ext3
umount /folderA  
drbdadm secondary s1

Verifica che entrambi i nodi siano in stato Secondary/Secondary:

/etc/init.d/drbd status
drbd driver loaded OK; device status:  
version: 8.4.7-1 (api:1/proto:86-101)  
GIT-hash: 3a6a769340ef93b1ba2792c6461250790795db49 build by root@OEL641, 2016-08-20 01:23:44  
m:res cs ro ds p mounted fstype  
1:s1 Connected Secondary/Secondary UpToDate/UpToDate C

Adesso su OEL642 promuovi a Primary, monta e verifica che il file testfile sia presente:

mkdir /folderB  
cd /folderB  
ls -lh
total 0
/etc/init.d/drbd status
drbd driver loaded OK; device status:  
version: 8.4.7-1 (api:1/proto:86-101)  
GIT-hash: 3a6a769340ef93b1ba2792c6461250790795db49 build by root@OEL641, 2016-08-20 01:23:44  
m:res cs ro ds p mounted fstype  
1:s1 Connected Secondary/Secondary UpToDate/UpToDate C
drbdadm primary s1  
/etc/init.d/drbd status
drbd driver loaded OK; device status:  
version: 8.4.7-1 (api:1/proto:86-101)  
GIT-hash: 3a6a769340ef93b1ba2792c6461250790795db49 build by root@OEL641, 2016-08-20 01:23:44  
m:res cs ro ds p mounted fstype  
1:s1 Connected Primary/Secondary UpToDate/UpToDate C
mount /dev/drbd1 /folderB  
df -h
Filesystem Size Used Avail Use% Mounted on  
/dev/mapper/vg_oel641-lv_root  
96G 3.5G 88G 4% /  
tmpfs 640M 80K 640M 1% /dev/shm  
/dev/sda1 485M 32M 428M 7% /boot  
/dev/drbd1 1004M 48M 906M 5% /folderB  
ls -lh /folderB/
total 31M  
drwx------. 2 root root 16K Aug 21 08:55 lost+found  
-rw-r--r--. 1 root root 30M Aug 21 09:09 testfile

Il file creato su OEL641 è ora visibile su OEL642: la replica a livello di blocco ha funzionato correttamente.

Quando DRBD può fallire

  • Rete instabile o alta latenza: la replica può rallentare o fallire se la rete è instabile. Mitigazione: rete privata dedicata, QoS, controllo MTU e test di latenza.
  • Disallineamento dei dispositivi: se i nomi dei dispositivi cambiano tra riavvii, DRBD non troverà il disco. Mitigazione: usa regole udev o assegna device-mapper persistenti.
  • Versioni kernel incompatibili: moduli compilati per un kernel diverso non si caricano. Mitigazione: assicurati di compilare drbd-km per la versione esatta del kernel o usa pacchetti precompilati compatibili.
  • Uso improprio dei comandi primary/secondary: montare il device su due nodi contemporaneamente senza clustered filesystem può corrompere i dati. Mitigazione: usa filesystem cluster-aware (GFS2/OCFS2) per mount simultanei, oppure mantieni un solo Primary attivo.

Approcci alternativi

  • Replica a livello di blocco gestita da storage hardware o SAN: meno overhead CPU ma più costose.
  • GlusterFS o Ceph per replica a livello di file/object e scaling orizzontale: utili per storage distribuito e scalabilità.
  • Soluzioni basate su rsync o DR (replica a livello di file): più semplici ma non block-level e non adatte a database con alte IO.
  • Integrazione con Pacemaker/Corosync per orchestrare failover automatico del servizio insieme alla promozione DRBD.

Mini-metodologia per roll-out in produzione

  1. Pre-produzione: testa la procedura in un ambiente isolato identico.
  2. Backup: esegui backup completo dei dati prima di qualsiasi operazione distruttiva.
  3. Pianificazione della finestra d’intervento: orari a basso carico per formattazioni e sincronizzazioni iniziali.
  4. Monitoraggio: imposta log/alert su latenza e stato DRBD.
  5. Esecuzione: segui i passaggi della guida e verifica ogni step.
  6. Post-check: validazione consistenza dati e verifica mount/failover.

Checklist per ruoli

Amministratore di sistema:

  • Verificare la compatibilità kernel-devel.
  • Compilare o ottenere RPM DRBD compatibili.
  • Configurare firewall e rete privata.

SRE/DevOps:

  • Testare la sincronizzazione e i failover.
  • Integrare controlli in automatismi di monitoraggio.

DBA/Applicazioni:

  • Validare che l’applicazione non monti lo stesso filesystem in scrittura su due nodi contemporaneamente.
  • Considerare filesystem cluster-aware se mount multi-primary necessario.

Diagramma decisionale per scelta della strategia

flowchart TD
  A[Hai bisogno di replica block-level?] -->|Sì| B{Vuoi mount multi-primary?}
  A -->|No| Z[Usa replica a livello file/object]
  B -->|Sì| C[Usa filesystem cluster-aware + DRBD in dual-primary]
  B -->|No| D[Usa DRBD in single-primary + Pacemaker per failover]
  C --> E[Valuta GFS2/OCFS2 + fencing]
  D --> F[Configura monitoraggio, test failover periodici]

Piccolo glossario

  • DRBD: replica a blocchi in tempo reale tra due nodi.
  • Primary: nodo che può montare e scrivere sul device DRBD.
  • Secondary: nodo che riceve replica ma non può montare in scrittura.
  • meta-disk internal: metadata DRBD memorizzati all’interno dell’area dati del device.

Suggerimenti operativi e troubleshooting

  • Se drbdadm create-md fallisce, verifica che /dev/sdb1 sia il device corretto e non contenga LVM attivi.
  • Se il modulo non si carica, ricompila il drbd-km per il kernel attuale o installa kernel-devel corrispondente.
  • Per controllare lo stato di sincronizzazione usa watch -n 2 “/etc/init.d/drbd status”.
  • Per forzare la promozione usa drbdadm – –overwrite-data-of-peer primary s1 (attenzione: distruttivo sul peer se usato impropriamente).

Notes

  • Non montare lo stesso device su due nodi in scrittura senza usare un filesystem cluster-aware.
  • Salva sempre una copia del file di configurazione /etc/drbd.d/s1.res in un controllo versione interno.

Riepilogo finale

Questa guida mostra come preparare il sistema, compilare e installare i pacchetti DRBD, configurare una risorsa s1, inizializzare i metadati, promuovere un nodo a Primary, testare la replica e verificare che i file creati sul Primary siano visibili dopo il failover sul Secondary. DRBD è potente per soluzioni HA ma richiede attenzione alla rete, alla coerenza dei dispositivi e alla gestione dei kernel/moduli.

Grazie: se ti serve, posso fornire uno script di automazione per le operazioni ripetitive (creazione RPM, copia dei file di configurazione e avvio/fermo servizi) o una versione aggiornata per CentOS 7/8 o RHEL 8 con pacchetti precompilati.

Autore
Redazione

Materiali simili

Smartcard in IPFire: pcsc-lite, CCID e OpenSC
Networking

Smartcard in IPFire: pcsc-lite, CCID e OpenSC

Installare OTRS 5 su CentOS 7
Guide tecniche

Installare OTRS 5 su CentOS 7

Scaricare serie e film da Netflix
Streaming

Scaricare serie e film da Netflix

Rimuovere Continua a guardare su Amazon Prime Video
Streaming

Rimuovere Continua a guardare su Amazon Prime Video

Potenziare il segnale Wi‑Fi: guida pratica
Networking

Potenziare il segnale Wi‑Fi: guida pratica

Come usare Miracast su Windows 10
Guida Windows

Come usare Miracast su Windows 10