Guida completa: installare e configurare 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
- Pre-produzione: testa la procedura in un ambiente isolato identico.
- Backup: esegui backup completo dei dati prima di qualsiasi operazione distruttiva.
- Pianificazione della finestra d’intervento: orari a basso carico per formattazioni e sincronizzazioni iniziali.
- Monitoraggio: imposta log/alert su latenza e stato DRBD.
- Esecuzione: segui i passaggi della guida e verifica ogni step.
- 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.
Materiali simili

Smartcard in IPFire: pcsc-lite, CCID e OpenSC

Installare OTRS 5 su CentOS 7

Scaricare serie e film da Netflix

Rimuovere Continua a guardare su Amazon Prime Video

Potenziare il segnale Wi‑Fi: guida pratica
