Chì avemu da parlà:
Cumu implementà rapidamente u almacenamentu spartutu per dui servitori basati nantu à e soluzioni drbd + ocfs2.
Per quale serà utile:
U tutoriale serà utile à l'amministratori di u sistema è à tutti quelli chì sceglienu un metudu di implementazione di almacenamiento o volenu pruvà a suluzione.
Chì decisioni avemu ricusatu è perchè ?
Spessu avemu affruntatu una situazione induve avemu bisognu di implementà l'almacenamiento spartutu cù una bona prestazione di lettura-scrittura in un picculu cluster web. Avemu pruvatu diverse opzioni per implementà l'almacenamiento spartutu per i nostri prughjetti, ma pochi sò stati capaci di suddisfà in parechji indicatori à una volta. Avà vi diceremu perchè.
- Glusterfs ùn ci hà micca soddisfatu cù u rendiment di lettura è scrittura, ci era prublemi cù a lettura simultanea di un gran numaru di schedari, è ci era una carica alta nantu à u CPU. U prublema cù i schedari di lettura puderia esse risolta accedendu direttamente da u mattone, ma questu ùn hè micca sempre applicabile è in generale hè sbagliatu.
- Ceph ùn hà micca piaciutu a cumplessità eccessiva, chì pò esse preghjudiziu nantu à i prughjetti cù i servitori 2-4, soprattuttu se u prugettu hè sussegwentemente mantinutu. In novu, ci sò serii limitazioni di rendiment chì ci forzanu à custruisce clusters di almacenamento separati, cum'è cù glusterfs.
- Utilizà un servitore NFS per implementà l'almacenamiento spartutu suscite dumande in termini di tolleranza di difetti.
- s3 hè una suluzione populari eccellenti per una certa gamma di tarei, ma ùn hè micca un sistema di fugliale, chì restringe u so scopu.
- lsyncd. Sè avemu digià cuminciatu à parlà di "sistemi non-file", allora vale a pena passà sta suluzione populari. Micca solu ùn hè micca adattatu per u scambiu bidirezionale (ma s'è vo vulete veramente, allora pudete), ùn funziona micca stabilmente in un gran numaru di schedari. Un bonu aghjuntu à tuttu hè chì hè unicu filatu. U mutivu hè in l'architettura di u prugramma: usa inotify per monitorà l'ogetti di travagliu chì assigna à l'iniziu è durante a scanning. rsync hè adupratu cum'è u mediu di trasferimentu.
Tutorial: cumu implementà u almacenamentu spartutu basatu annantu à drbd + ocfs2
Una di e soluzioni più convenienti per noi era u ligame ocfs2+drbd. Avà vi diceremu cumu pudete implementà rapidamente un almacenamentu spartutu per dui servitori basati nantu à una basa di dati di suluzione. Ma prima, un pocu nantu à i cumpunenti:
DRBD - un sistema di almacenamentu da a distribuzione standard Linux chì permette di riplicà e dati trà i servitori in blocchi. L'applicazione principale hè di custruisce un almacenamentu tolerante à i difetti.
OCFS 2 - un sistema di fugliale chì furnisce l'usu cumunu di u stessu almacenamentu da parechji sistemi. Inclusu in a distribuzione Linux è hè un modulu di kernel è arnesi d'usu d'utilizatori per travaglià cù FS. OCFS2 pò esse usatu micca solu nantu à DRBD, ma ancu nantu à iSCSI cù parechje cunnessione. In u nostru esempiu usemu DRBD.
Tutte l'azzioni sò realizate nantu à u servitore ubuntu 18.04 in una cunfigurazione minima.
Passu 1. Configure DRBD:
In u schedariu /etc/drbd.d/drbd0.res descrivimu u nostru dispositivu di bloccu virtuale /dev/drbd0:
resource drbd0 {
syncer { rate 1000M; }
net {
allow-two-primaries;
after-sb-0pri discard-zero-changes;
after-sb-1pri discard-secondary;
after-sb-2pri disconnect;
}
startup { become-primary-on both; }
on drbd1 {
meta-disk internal;
device /dev/drbd0;
disk /dev/vdb1;
address 10.10.10.192:7789;
}
on drbd2 {
meta-disk internal;
device /dev/drbd0;
disk /dev/vdb1;
address 10.10.10.193:7789;
}
}
meta-discu internu - Aduprate i stessi dispositi di bloccu per almacenà metadati
dispusitivu /dev/drbd0 - utilizate /dev/drbd0 cum'è a strada per u voluminu drbd.
discu /dev/vdb1 - utilizate /dev/vdb1
syncer { rate 1000M; } - aduprà a larghezza di banda di u canali gigabit
permette-dui-primarii - una opzione impurtante chì permette di accettà i cambiamenti nantu à dui servitori primari
dopu-sb-0pri, dopu-sb-1pri, dopu-sb-2pri - opzioni rispunsevuli di l'azzioni di u node quandu u splitbrain hè rilevatu. Più dettagli ponu esse truvati in a documentazione.
diventà-primariu-su dui - stabilisce i dui nodi primariu.
In u nostru casu, avemu duie VM assolutamente identiche, cù una reta virtuale dedicata cù un throughput di 10 gigabits.
In u nostru esempiu, i nomi di rete di dui nodi di cluster sò drbd1 è drbd2. Per u funziunamentu propiu, avete bisognu di currisponde à i nomi è l'indirizzi IP di l'ospiti in /etc/hosts.
10.10.10.192 drbd1
10.10.10.193 drbd2
Passu 2. Stallà i nodi:
In i dui servitori eseguimu:
drbdadm create-md drbd0
modprobe drbd
drbdadm up drbd0
cat /proc/drbd
Avemu u seguente:
Pudete principià a sincronizazione. Nantu à u primu node, avete bisognu di eseguisce:
drbdadm primary --force drbd0
Fighjemu u statutu:
cat /proc/drbd
Grande, a sincronizazione hè cuminciata. Aspittemu finu à a fine è vedemu a stampa:
Passu 3. Cumincià a sincronizazione nantu à u sicondu node:
drbdadm primary --force drbd0
Avemu u seguente:
Avà pudemu scrive à drbd da dui servitori.
Step 4. Stallà è cunfigurà ocfs2.
Avemu aduprà una cunfigurazione abbastanza triviale:
cluster:
node_count = 2
name = ocfs2cluster
node:
number = 1
cluster = ocfs2cluster
ip_port = 7777
ip_address = 10.10.10.192
name = drbd1
node:
number = 2
cluster = ocfs2cluster
ip_port = 7777
ip_address = 10.10.10.193
name = drbd2
Hè bisognu à esse scrittu in /etc/ocfs2/cluster.conf nantu à i dui nodi.
Creemu un FS in drbd0 nantu à qualsiasi nodu:
mkfs.ocfs2 -L "testVol" /dev/drbd0
Quì avemu creatu un sistema di schedari cù l'etichetta testVol in drbd0, utilizendu i paràmetri predeterminati.
In /etc/default/o2cb avete bisognu di stabilisce (cum'è in u nostru schedariu di cunfigurazione)
O2CB_ENABLED=true
O2CB_BOOTCLUSTER=ocfs2cluster
è eseguite nantu à ogni nodu:
o2cb register-cluster ocfs2cluster
Allora accendemu è aghjunghje tutte l'unità chì avemu bisognu di autorun:
systemctl enable drbd o2cb ocfs2
systemctl start drbd o2cb ocfs2
Alcune di questu serà digià in esecuzione durante u prucessu di stallazione.
Passu 5. Aghjunghjite punti di muntagna à fstab nantu à i dui nodi:
/dev/drbd0 /media/shared ocfs2 defaults,noauto,heartbeat=local 0 0
annuariu /media/shared deve esse creatu in anticipu.
Quì avemu aduprà l'opzioni noauto, chì significa chì u schedariu ùn serà micca muntatu à l'iniziu (preferite muntà i schedarii di rete via systemd) è heartbeat=local, chì significa aduprà u serviziu di heartbeat in ogni node. Ci hè ancu un battitu di u core globale, chì hè più adattatu per i grandi clusters.
Dopu pudete muntà /media/shared è verificate a sincronizazione di u cuntenutu.
Fattu! In u risultatu, avemu un almacenamentu più o menu tolerante à i difetti cù scalabilità è prestazione decente.
Source: www.habr.com