Pohrana klastera za male web klastere temeljene na drbd+ocfs2

O čemu ćemo pričati:
Kako brzo implementirati dijeljenu pohranu za dva poslužitelja na temelju drbd+ocfs2 rješenja.

Kome će ovo biti korisno:
Vodič će biti koristan administratorima sustava i svima koji odaberu metodu implementacije pohrane ili žele isprobati rješenje.

Koje smo odluke odbili i zašto?

Često smo suočeni sa situacijom u kojoj trebamo implementirati dijeljenu pohranu s dobrim performansama čitanja i pisanja na malom web klasteru. Isprobali smo razne opcije za implementaciju zajedničke pohrane za naše projekte, ali malo nas je uspjelo zadovoljiti po nekoliko pokazatelja odjednom. Sada ćemo vam reći zašto.

  • Glusterfs nas nije zadovoljio učinkom čitanja i pisanja, bilo je problema s simultanim čitanjem velikog broja datoteka i bilo je veliko opterećenje CPU-a. Problem s čitanjem datoteka mogao bi se riješiti izravnim pristupom iz bricka, ali to nije uvijek primjenjivo i općenito je netočno.

  • Cephu se nije svidjela pretjerana složenost, koja može biti štetna na projektima s 2-4 servera, pogotovo ako se projekt naknadno održava. Opet, postoje ozbiljna ograničenja performansi koja nas tjeraju da gradimo zasebne klastere za pohranu, kao kod glusterfova.

  • Korištenje jednog NFS poslužitelja za implementaciju dijeljene pohrane postavlja pitanja u smislu tolerancije grešaka.

  • s3 je odlično popularno rješenje za određeni raspon zadataka, ali nije datotečni sustav, što sužava njegov opseg.

  • lsyncd. Ako smo već počeli govoriti o "ne-datotečnim sustavima", vrijedi proći kroz ovo popularno rješenje. Ne samo da nije pogodan za dvosmjernu razmjenu (ali ako baš želite, onda možete), također ne radi stabilno na velikom broju datoteka. Zgodan dodatak cijeloj stvari je to što je jednonit. Razlog je u arhitekturi programa: koristi inotify za nadzor radnih objekata, koje dodjeljuje pri pokretanju i tijekom ponovnog skeniranja. rsync se koristi kao medij za prijenos.

Vodič: kako implementirati dijeljenu pohranu na temelju drbd+ocfs2

Jedno od najpovoljnijih rješenja bila nam je veza ocfs2+drbd. Sada ćemo vam reći kako možete brzo postaviti zajedničku pohranu za dva poslužitelja na temelju baze podataka rješenja. Ali prvo, malo o komponentama:

DRBD - sustav za pohranu iz standardne distribucije Linuxa koji vam omogućuje repliciranje podataka između poslužitelja u blokovima. Glavna primjena je izgradnja pohrane otporne na greške.

OCFS2 - datotečni sustav koji omogućuje zajedničko korištenje iste pohrane od strane nekoliko sustava. Uključeno u distribuciju Linuxa i predstavlja modul jezgre i alate korisničkog prostora za rad s FS-om. OCFS2 se može koristiti ne samo preko DRBD-a, već i preko iSCSI-ja s višestrukim vezama. U našem primjeru koristimo DRBD.

Sve radnje izvode se na ubuntu poslužitelju 18.04 u minimalnoj konfiguraciji.

Korak 1. Konfigurirajte DRBD:

U datoteci /etc/drbd.d/drbd0.res opisujemo naš virtualni blok uređaj /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-disk interni — koristiti iste blok uređaje za pohranu metapodataka
uređaj /dev/drbd0 — koristite /dev/drbd0 kao stazu do drbd volumena.
disk /dev/vdb1 - koristite /dev/vdb1
syncer { brzina 1000M; } — koristiti gigabitnu propusnost kanala
dopustiti-dva-primarna - važna opcija koja omogućuje prihvaćanje promjena na dva primarna poslužitelja
nakon-sb-0pri, nakon-sb-1pri, nakon-sb-2pri — opcije odgovorne za radnje čvora kada se otkrije splitbrain. Više detalja možete pronaći u dokumentaciji.
postati-primarni-na oba — postavlja oba čvora na primarne.

U našem slučaju imamo dva potpuno identična VM-a, s namjenskom virtualnom mrežom s propusnošću od 10 gigabita.

U našem primjeru, mrežna imena dvaju čvorova klastera su drbd1 i drbd2. Za pravilan rad, trebate uskladiti imena i IP adrese hostova u /etc/hosts.

10.10.10.192 drbd1
10.10.10.193 drbd2

Korak 2. Postavite čvorove:

Na oba poslužitelja izvodimo:

drbdadm create-md drbd0

Pohrana klastera za male web klastere temeljene na drbd+ocfs2

modprobe drbd
drbdadm up drbd0
cat /proc/drbd

Dobivamo sljedeće:

Pohrana klastera za male web klastere temeljene na drbd+ocfs2

Možete započeti sinkronizaciju. Na prvom čvoru trebate izvršiti:

drbdadm primary --force drbd0

Pogledajmo status:

cat /proc/drbd

Pohrana klastera za male web klastere temeljene na drbd+ocfs2

Super, sinkronizacija je počela. Čekamo kraj i vidimo sliku:

Pohrana klastera za male web klastere temeljene na drbd+ocfs2

Korak 3. Pokrenite sinkronizaciju na drugom čvoru:

drbdadm primary --force drbd0

Dobivamo sljedeće:

Pohrana klastera za male web klastere temeljene na drbd+ocfs2

Sada možemo pisati u drbd s dva poslužitelja.

Korak 4. Instalirajte i konfigurirajte ocfs2.

Koristit ćemo prilično trivijalnu konfiguraciju:

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

Treba ga zapisati u /etc/ocfs2/cluster.conf na oba čvora.

Stvaramo FS na drbd0 na bilo kojem čvoru:

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

Ovdje smo stvorili datotečni sustav s oznakom testVol na drbd0, koristeći zadane parametre.

Pohrana klastera za male web klastere temeljene na drbd+ocfs2

U /etc/default/o2cb trebate postaviti (kao u našoj konfiguracijskoj datoteci)

O2CB_ENABLED=true 
O2CB_BOOTCLUSTER=ocfs2cluster 

i izvršiti na svakom čvoru:

o2cb register-cluster ocfs2cluster

Zatim uključujemo i dodajemo sve jedinice koje su nam potrebne za automatsko pokretanje:

systemctl enable drbd o2cb ocfs2
systemctl start drbd o2cb ocfs2

Nešto od toga već će biti pokrenuto tijekom postupka postavljanja.

Korak 5. Dodajte točke montiranja u fstab na oba čvora:

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

Imenik /mediji/dijeljeno mora se stvoriti unaprijed.

Ovdje koristimo opcije noauto, što znači da datoteka neće biti montirana pri pokretanju (radije montiram mrežne datoteke preko systemd) i heartbeat=local, što znači korištenje usluge heartbeat na svakom čvoru. Postoji i globalni otkucaj srca, koji je prikladniji za velike klastere.

Zatim možete montirati /mediji/dijeljeno i provjerite sinkronizaciju sadržaja.

Gotovo! Kao rezultat toga, dobivamo više-manje pohranu otpornu na greške sa skalabilnošću i pristojnim performansama.

Izvor: www.habr.com

Dodajte komentar