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 drbd2Korak 2. Konfiguriramo čvorove:
Na oba poslužitelja izvršavamo:
drbdadm create-md drbd0 
modprobe drbd
drbdadm up drbd0
cat /proc/drbdDobivamo sljedeće:

Možete pokrenuti sinkronizaciju. Na prvom čvoru potrebno je izvršiti:
drbdadm primary --force drbd0Provjeravamo status:
cat /proc/drbd 
Odlično, započela je sinkronizacija. Čekamo završetak i vidimo sliku:

Korak 3. Pokrećemo sinkronizaciju na drugom čvoru:
drbdadm primary --force drbd0
Dobivamo sljedeće:

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.

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 ocfs2clusterNakon toga uključujemo i dodajemo u automatsko pokretanje sve potrebne jedinice:
systemctl enable drbd o2cb ocfs2
systemctl start drbd o2cb ocfs2Dio 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 0Direktorij /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
