Storage cluster per i picculi clusters web basatu nantu à drbd + ocfs2

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

Storage cluster per i picculi clusters web basatu nantu à drbd + ocfs2

modprobe drbd
drbdadm up drbd0
cat /proc/drbd

Avemu u seguente:

Storage cluster per i picculi clusters web basatu nantu à drbd + ocfs2

Pudete principià a sincronizazione. Nantu à u primu node, avete bisognu di eseguisce:

drbdadm primary --force drbd0

Fighjemu u statutu:

cat /proc/drbd

Storage cluster per i picculi clusters web basatu nantu à drbd + ocfs2

Grande, a sincronizazione hè cuminciata. Aspittemu finu à a fine è vedemu a stampa:

Storage cluster per i picculi clusters web basatu nantu à drbd + ocfs2

Passu 3. Cumincià a sincronizazione nantu à u sicondu node:

drbdadm primary --force drbd0

Avemu u seguente:

Storage cluster per i picculi clusters web basatu nantu à drbd + ocfs2

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.

Storage cluster per i picculi clusters web basatu nantu à drbd + ocfs2

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

Add a comment