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
modprobe drbd
drbdadm up drbd0
cat /proc/drbd
Dobijamo sljedeće:
Možete započeti sinhronizaciju. Na prvom čvoru treba da uradite:
drbdadm primary --force drbd0
Pogledajmo status:
cat /proc/drbd
Odlično, sinhronizacija je počela. Čekamo kraj i vidimo sliku:
Korak 3. Pokrenite sinhronizaciju na drugom čvoru:
drbdadm primary --force drbd0
Dobijamo sljedeće:
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.
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