Klasterska pohrana za male web klastere zasnovana na drbd+ocfs2

O čemu ćemo pričati:
Kako brzo implementirati zajedničku pohranu za dva servera na osnovu drbd+ocfs2 rješenja.

Kome će biti od koristi:
Vodič će biti koristan za sistemske administratore i sve koji odaberu metodu implementacije pohrane ili žele isprobati rješenje.

Koje smo odluke odustali i zašto?

Često se susrećemo sa situacijom u kojoj moramo implementirati zajedničku pohranu s dobrim performansama čitanja i pisanja na malom web klasteru. Isprobali smo razne implementacije dijeljene pohrane za naše projekte, ali malo nas je uspjelo zadovoljiti na nekoliko načina odjednom. Sada ćemo vam reći zašto.

  • Glusterfs nam nije odgovarao performansama čitanja i pisanja, bilo je problema s istovremenim čitanjem velikog broja datoteka, bilo je veliko opterećenje CPU-a. Problem sa čitanjem datoteka mogao bi se riješiti postavljanjem direktno u cigle, ali to nije uvijek primjenjivo i općenito je pogrešno.

  • Ceph-u se nije svidjela dodatna složenost, koja može biti štetna za projekte sa 2-4 servera, posebno ako se projekat naknadno održava. Opet, postoje ozbiljna ograničenja performansi, koja vas prisiljavaju da gradite odvojene klastere za skladištenje, baš kao i kod glusterf-ova.

  • Upotreba jednog nfs servera za implementaciju dijeljene memorije postavlja probleme u smislu tolerancije grešaka.

  • s3 je odlično popularno rješenje za određeni raspon zadataka, ali nije sistem datoteka, koji sužava opseg.

  • lsyncd. Ako smo već počeli da pričamo o „sistemima bez datoteka“, onda je vredno proći kroz ovo popularno rešenje. Ne samo da nije pogodan za dvosmjernu razmjenu (ali ako zaista želite, možete), također ne radi stabilno na velikom broju datoteka. Lijep dodatak svemu je to što je jednonit. Razlog je u arhitekturi programa: on koristi inotify za praćenje radnih objekata koje visi pri pokretanju i prilikom ponovnog skeniranja. Medij za prijenos je rsync.

Vodič: Kako implementirati zajedničku pohranu zasnovanu na drbd+ocfs2

Jedno od najpovoljnijih rješenja za nas je bio paket ocfs2+drbd. Sada ćemo vam pokazati kako možete brzo primijeniti dijeljenu pohranu za dva poslužitelja baze podataka rješenja. Ali prvo, malo o komponentama:

DRBD - sistem za skladištenje iz standardne distribucije Linuxa, koji vam omogućava da replicirate podatke između blokova servera. Glavna primjena je izgradnja skladišta otpornih na greške.

OCFS2 - sistem datoteka koji omogućava zajedničko korištenje iste memorije od strane više sistema. Uključen je u distribuciju Linuxa i predstavlja modul kernela i alata korisničkog prostora za rad sa FS-om. OCFS2 se može koristiti ne samo preko DRBD-a, već i preko iSCSI-ja sa više konekcija. U našem primjeru koristimo DRBD.

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

Korak 1. Postavite DRBD:

U datoteci /etc/drbd.d/drbd0.res opisujemo naš virtuelni 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;
}
}

interni meta-disk - koristiti iste blok uređaje za pohranjivanje metapodataka
uređaj /dev/drbd0 - koristite /dev/drbd0 kao putanju do drbd volumena.
disk /dev/vdb1 - koristite /dev/vdb1
syncer { rate 1000M; } - koristite gigabitni propusni opseg
dozvoli-dva-primarna - važna opcija koja omogućava prihvatanje promjena na dva primarna servera
poslije-sb-0pri, poslije-sb-1pri, poslije-sb-2pri — opcije odgovorne za radnje čvora kada se otkrije podijeljeni mozak. Više detalja možete pronaći u dokumentaciji.
postati-primarni-na oba - postavlja oba čvora na primarni.

U našem slučaju imamo dva apsolutno identična VM-a, sa namjenskom virtuelnom mrežom sa propusnim opsegom od 10 gigabita.

U našem primjeru, nazivi mreže dvaju čvorova klastera su drbd1 i drbd2. Za pravilan rad potrebno je 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 servera pokrenite:

drbdadm create-md drbd0

Klasterska pohrana za male web klastere zasnovana na drbd+ocfs2

modprobe drbd
drbdadm up drbd0
cat /proc/drbd

Dobijamo sljedeće:

Klasterska pohrana za male web klastere zasnovana na drbd+ocfs2

Možete započeti sinhronizaciju. Na prvom čvoru treba da uradite:

drbdadm primary --force drbd0

Pogledajmo status:

cat /proc/drbd

Klasterska pohrana za male web klastere zasnovana na drbd+ocfs2

Odlično, sinhronizacija je počela. Čekamo kraj i vidimo sliku:

Klasterska pohrana za male web klastere zasnovana na drbd+ocfs2

Korak 3. Pokrenite sinhronizaciju na drugom čvoru:

drbdadm primary --force drbd0

Dobijamo sljedeće:

Klasterska pohrana za male web klastere zasnovana na drbd+ocfs2

Sada možemo pisati u drbd sa dva servera.

Korak 4. Instaliranje i konfiguriranje ocfs2.

Koristić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

Mora biti upisano /etc/ocfs2/cluster.conf na oba čvora.

Kreirajte FS na drbd0 na bilo kojem čvoru:

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

Ovdje smo kreirali sistem datoteka s oznakom testVol na drbd0 koristeći zadane parametre.

Klasterska pohrana za male web klastere zasnovana na drbd+ocfs2

U /etc/default/o2cb se mora 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 u autopogon sve jedinice koje su nam potrebne:

systemctl enable drbd o2cb ocfs2
systemctl start drbd o2cb ocfs2

Nešto od ovoga će se već pokrenuti u procesu postavljanja.

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

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

Imenik /media/shared i mora se kreirati unaprijed.

Ovdje koristimo opcije noauto, što znači da se sistem datoteka neće montirati pri pokretanju (ja radije montiram mrežne datoteke preko systemd) i heartbeat=local, što znači da se usluga heartbeat koristi na svakom čvoru. Postoji i globalni otkucaj srca, koji je pogodniji za velike klastere.

Zatim možete montirati /media/shared i provjerite sinhronizaciju sadržaja.

Gotovo! Kao rezultat, dobijamo manje-više skladište otporno na greške sa skalabilnošću i pristojnim performansama.

izvor: www.habr.com

Dodajte komentar