Stocare în cluster pentru clustere web mici bazate pe drbd+ocfs2

Despre ce vom vorbi:
Cum să implementați rapid spațiul de stocare partajat pentru două servere pe baza soluțiilor drbd+ocfs2.

Cui îi va fi util:
Tutorialul va fi util administratorilor de sistem și oricui alege o metodă de implementare a stocării sau dorește să încerce soluția.

Ce decizii am refuzat și de ce?

Adesea ne confruntăm cu o situație în care trebuie să implementăm stocarea partajată cu performanțe bune de citire-scriere pe un cluster web mic. Am încercat diverse opțiuni de implementare a stocării partajate pentru proiectele noastre, dar puțini au reușit să ne mulțumească pe mai mulți indicatori deodată. Acum vă vom spune de ce.

  • Glusterfs nu ne-a mulțumit cu performanța de citire și scriere; au existat probleme cu citirea simultană a unui număr mare de fișiere și a existat o sarcină mare a procesorului. Problema citirii fișierelor ar putea fi rezolvată prin accesarea lor direct din cărămidă, dar acest lucru nu este întotdeauna aplicabil și este în general incorect.

  • Ceph nu i-a plăcut complexitatea excesivă, care poate fi dăunătoare pe proiecte cu 2-4 servere, mai ales dacă proiectul este menținut ulterior. Din nou, există limitări serioase de performanță care ne obligă să construim clustere de stocare separate, ca și în cazul glusterfs.

  • Utilizarea unui server NFS pentru a implementa stocarea partajată ridică întrebări în ceea ce privește toleranța la erori.

  • s3 este o soluție populară excelentă pentru o anumită gamă de sarcini, dar nu este un sistem de fișiere, ceea ce își restrânge domeniul de aplicare.

  • lsyncd. Dacă am început deja să vorbim despre „sisteme fără fișiere”, atunci merită să trecem peste această soluție populară. Nu numai că nu este potrivit pentru schimbul bidirecțional (dar dacă chiar doriți, atunci puteți), nici nu funcționează stabil pe un număr mare de fișiere. Un plus frumos la întreaga chestie este că este cu un singur fir. Motivul se află în arhitectura programului: folosește inotify pentru a monitoriza obiectele de lucru, pe care le atribuie la pornire și în timpul rescanării. rsync este folosit ca mediu de transfer.

Tutorial: cum să implementați spațiul de stocare partajat bazat pe drbd+ocfs2

Una dintre cele mai convenabile soluții pentru noi a fost linkul ocfs2+drbd. Acum vă vom spune cum puteți implementa rapid stocarea partajată pentru două servere pe baza unei baze de date de soluții. Dar mai întâi, puțin despre componente:

DRBD - un sistem de stocare din distribuția standard Linux care vă permite să replicați datele între servere în blocuri. Aplicația principală este de a construi stocare tolerantă la erori.

OCFS2 - un sistem de fișiere care oferă utilizarea în comun a aceleiași stocări de către mai multe sisteme. Inclus în distribuția Linux și este un modul kernel și instrumente de spațiu de utilizator pentru lucrul cu FS. OCFS2 poate fi folosit nu numai prin DRBD, ci și prin iSCSI cu conexiuni multiple. În exemplul nostru folosim DRBD.

Toate acțiunile sunt efectuate pe serverul ubuntu 18.04 într-o configurație minimă.

Pasul 1. Configurați DRBD:

În fișierul /etc/drbd.d/drbd0.res descriem dispozitivul nostru virtual bloc /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-disc intern — utilizați aceleași dispozitive bloc pentru a stoca metadate
dispozitiv /dev/drbd0 — utilizați /dev/drbd0 ca cale către volumul drbd.
disc /dev/vdb1 - utilizați /dev/vdb1
syncer { rate 1000M; } — utilizați lățimea de bandă a canalului gigabit
permite-două-primare - o opțiune importantă care permite acceptarea modificărilor pe două servere primare
după-sb-0pri, după-sb-1pri, după-sb-2pri — opțiuni responsabile pentru acțiunile nodului atunci când este detectat splitbrain. Mai multe detalii găsiți în documentație.
deveni-primar-pe ambele — setează ambele noduri la primar.

În cazul nostru, avem două VM-uri absolut identice, cu o rețea virtuală dedicată cu un throughput de 10 gigabiți.

În exemplul nostru, numele de rețea a două noduri de cluster sunt drbd1 și drbd2. Pentru o funcționare corectă, trebuie să potriviți numele și adresele IP ale gazdelor din /etc/hosts.

10.10.10.192 drbd1
10.10.10.193 drbd2

Pasul 2. Configurați nodurile:

Pe ambele servere rulăm:

drbdadm create-md drbd0

Stocare în cluster pentru clustere web mici bazate pe drbd+ocfs2

modprobe drbd
drbdadm up drbd0
cat /proc/drbd

Obținem următoarele:

Stocare în cluster pentru clustere web mici bazate pe drbd+ocfs2

Puteți începe sincronizarea. Pe primul nod trebuie să executați:

drbdadm primary --force drbd0

Să ne uităm la starea:

cat /proc/drbd

Stocare în cluster pentru clustere web mici bazate pe drbd+ocfs2

Super, sincronizarea a început. Așteptăm până la sfârșit și vedem poza:

Stocare în cluster pentru clustere web mici bazate pe drbd+ocfs2

Pasul 3. Începeți sincronizarea pe al doilea nod:

drbdadm primary --force drbd0

Obținem următoarele:

Stocare în cluster pentru clustere web mici bazate pe drbd+ocfs2

Acum putem scrie pe drbd de pe două servere.

Pasul 4. Instalați și configurați ocfs2.

Vom folosi o configurație destul de banală:

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

Trebuie notat în /etc/ocfs2/cluster.conf pe ambele noduri.

Creăm un FS pe drbd0 pe orice nod:

mkfs.ocfs2 -L "testVol" /dev/drbd0

Aici am creat un sistem de fișiere cu eticheta testVol pe drbd0, folosind parametrii impliciti.

Stocare în cluster pentru clustere web mici bazate pe drbd+ocfs2

În /etc/default/o2cb trebuie să setați (ca în fișierul nostru de configurare)

O2CB_ENABLED=true 
O2CB_BOOTCLUSTER=ocfs2cluster 

și executați pe fiecare nod:

o2cb register-cluster ocfs2cluster

Apoi pornim și adăugăm toate unitățile de care avem nevoie pentru a rula automat:

systemctl enable drbd o2cb ocfs2
systemctl start drbd o2cb ocfs2

Unele dintre acestea vor rula deja în timpul procesului de configurare.

Pasul 5. Adăugați puncte de montare la fstab pe ambele noduri:

/dev/drbd0 /media/shared ocfs2 defaults,noauto,heartbeat=local 0 0

Director /media/shared trebuie creat în prealabil.

Aici folosim opțiunile noauto, ceea ce înseamnă că fișierul nu va fi montat la pornire (prefer să montez fișiere de rețea prin systemd) și heartbeat=local, ceea ce înseamnă utilizarea serviciului heartbeat pe fiecare nod. Există, de asemenea, bătăile inimii globale, care sunt mai potrivite pentru grupuri mari.

În continuare, puteți monta /media/shared și verificați sincronizarea conținutului.

Gata! Ca rezultat, obținem stocare mai mult sau mai puțin tolerantă la erori, cu scalabilitate și performanță decentă.

Sursa: www.habr.com

Adauga un comentariu