Klasterastor za male web klastere temeljen na drbd+ocfs2

O čemu ćemo govoriti:
Kako brzo postaviti zajedničko pohranu za dva poslužitelja temeljenu na rješenjima drbd+ocfs2.

Za koga će to biti korisno:
Ovaj vodič bit će koristan sustavnim administratorima i svima koji biraju metodu implementacije pohrane ili žele isprobati rješenje.

Od kojih rješenja smo odustali i zašto

Često se susrećemo s situacijom kada trebamo implementirati zajedničku pohranu s dobrom učinkovitošću čitanja i pisanja na malom web klasteru. Isprobali smo različite opcije implementacije zajedničke pohrane za naše projekte, ali malo toga nas je moglo zadovoljiti prema nekoliko kriterija. Sada ćemo objasniti zašto.

  • Glusterfs nam nije bio zadovoljavajući zbog performansi pri čitanju i pisanju, pojavili su se problemi s istovremenim čitanjem velikog broja datoteka, a CPU je imao veliku opterećenost. Problem s čitanjem datoteka mogao se riješiti izravnim pristupom brickovima, ali to nije uvijek primjenjivo i općenito nije ispravno.

  • Ceph nam se nije svidio zbog prekomjerne složenosti, koja može biti štetna u projektima s 2-4 poslužiteljima, osobito kada projekte kasnije održavaju. Također, postoje ozbiljna ograničenja u performansama koja prisiljavaju na izgradnju posebnih storage klastera, kao i kod glusterfs.

  • Korištenje jednog nfs poslužitelja za implementaciju zajedničke pohrane postavlja pitanja u vezi s otpornosti na kvarove.

  • s3 — izvrsno popularno rješenje za određeni spektar zadataka, ali to također nije datotečni sustav, što sužava područje primjene.

  • lsyncd. Ako već govorimo o "ne-datotečnim sustavima", vrijedi spomenuti i ovo popularno rješenje. Osim toga, ne može se koristiti za dvosmjernu razmjenu (iako ako baš želite, može se), a također ne radi stabilno s velikim brojem datoteka. Dodatna pogodnost je što je jednostrano. Razlog leži u arhitekturi programa: koristi inotify za nadzor objekata rada, koje postavlja prilikom pokretanja i prilikom ponovnog skeniranja. Kao sredstvo prijenosa koristi rsync.

Vodič: kako postaviti zajedničku pohranu temeljenu na drbd+ocfs2

Jedno od najprikladnijih rješenja za nas postala je kombinacija ocfs2+drbd. Sada ćemo objasniti kako brzo postaviti zajedničko skladište za dva poslužitelja na temelju rješenja s bazama podataka. No prvo malo o komponentama:

DRBD — sustav pohrane iz standardne LX distribucije, koji omogućava repliciranje podataka između poslužitelja u blokovima. Njegova glavna primjena je u izgradnji skladišta otpornih na kvar.

OCFS2 — datotečni sustav koji omogućuje dijeljeno korištenje istog skladišta od strane više sustava. Uključuje se u Linux distribuciju i predstavlja modul jezgre te userspace alat za rad s FS-om. OCFS2 se može koristiti ne samo iznad DRBD-a, već i iznad iSCSI s višestrukim vezama. U našem primjeru koristimo DRBD.

Sve radnje se izvode na ubuntu serveru 18.04 u minimalnoj konfiguraciji.

Korak 1. Konfiguriramo DRBD:

U datoteci /etc/drbd.d/drbd0.res opisujemo naše virtualno blok uređaje /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 internal — koristiti iste blok uređaje za pohranu metapodataka
device /dev/drbd0 — koristiti /dev/drbd0 kao put do drbd-a.
disk /dev/vdb1 — koristiti /dev/vdb1
syncer { rate 1000M; } — koristiti gigabit propusnost veze
allow-two-primaries — važna opcija koja dopušta prihvaćanje izmjena na dva primarna poslužitelja
after-sb-0pri, after-sb-1pri, after-sb-2pri — opcije koje određuju rad čvora pri otkrivanju split-brain. Više informacija možete pronaći u dokumentaciji.
become-primary-on both — postavlja oba čvora u primarni.

U našem slučaju imamo dvije potpuno identične VM-ove, s dodijeljenom virtualnom mrežom propusnosti od 10 gigabita.

U našem primjeru mrežna imena dva čvora klastera su drbd1 i drbd2. Za pravilno funkcioniranje potrebno je uskladiti u /etc/hosts imena i IP adrese čvorova.

10.10.10.192 drbd1
10.10.10.193 drbd2

Korak 2. Konfiguriramo čvorove:

Na oba poslužitelja izvršavamo:

drbdadm create-md drbd0

Klasterastor za male web klastere temeljen na drbd+ocfs2

modprobe drbd
drbdadm up drbd0
cat /proc/drbd

Dobivamo sljedeće:

Klasterastor za male web klastere temeljen na drbd+ocfs2

Možete pokrenuti sinkronizaciju. Na prvom čvoru potrebno je izvršiti:

drbdadm primary --force drbd0

Provjeravamo status:

cat /proc/drbd

Klasterastor za male web klastere temeljen na drbd+ocfs2

Odlično, započela je sinkronizacija. Čekamo završetak i vidimo sliku:

Klasterastor za male web klastere temeljen na drbd+ocfs2

Korak 3. Pokrećemo sinkronizaciju na drugom čvoru:

drbdadm primary --force drbd0

Dobivamo sljedeće:

Klasterastor za male web klastere temeljen na drbd+ocfs2

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

Korak 4. Instalacija i postavljanje 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

To treba zapisati u /etc/ocfs2/cluster.conf na oba čvora.

Stvaramo FS na drbd0 na bilo kojem čvoru:

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

Ovde smo stvorili FS s oznakom testVol na drbd0, koristeći zadane postavke.

Klasterastor za male web klastere temeljen na drbd+ocfs2

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

O2CB_ENABLED=true 
O2CB_BOOTCLUSTER=ocfs2cluster 

i izvršiti na svakom čvoru:

o2cb register-cluster ocfs2cluster

Nakon toga uključujemo i dodajemo u automatsko pokretanje sve potrebne jedinice:

systemctl enable drbd o2cb ocfs2
systemctl start drbd o2cb ocfs2

Dio toga će već biti pokrenut tijekom postavljanja.

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

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

Direktorij /media/shared pritom treba biti unaprijed stvorena.

Ovdje koristimo opcije noauto, što znači da se FS neće montirati pri pokretanju (preferiram montirati mrežne fs putem systemd) i heartbeat=local, što označava korištenje usluge heartbeat na svakom čvoru. Postoji i global heartbeat, koja bolje odgovara većim klasterima.

Nakon toga se može montirati /media/shared i provjeriti sinkronizaciju sadržaja.

Gotovo! Kao rezultat dobijamo više-manje otpornu pohranu s mogućnošću skaliranja i zadovoljavajućom učinkovitošću.

Izvor: habr.com

Kupite pouzdan hosting za web stranice s DDoS zaštitom, VPS VDS servere 🔥 Kupite pouzdan hosting za web stranice s DDoS zaštitom, VPS VDS servere | ProHoster