ĂfarĂ« do tĂ« flasim:
Si të shpërndajmë shpejt një magazinë të përbashkët për dy serverë mbi zgjidhjet drbd+ocfs2.
Kujt do t'i shërbejë kjo:
Ky tutorial do të jetë i dobishëm për administratorët e sistemeve dhe për të gjithë ata që kërkojnë një mënyrë për të implementuar një magazinë ose dëshirojnë të provojnë zgjidhjen.
Cilat zgjidhje ne i hodhëm poshtë dhe përse
Shpesh ne pĂ«rballĂ« me situatĂ«n kur duhet tĂ« implementojmĂ« njĂ« magazinĂ« tĂ« pĂ«rbashkĂ«t nĂ« njĂ« web-klustĂ«r tĂ« vogĂ«l me performancĂ« tĂ« mirĂ« nĂ« leximin - shkruajtjen. Ne kemi provuar konfigurime tĂ« ndryshme pĂ«r tĂ« implementuar magazinĂ«n pĂ«r projektet tona, por pak gjĂ«ra ishin nĂ« gjendje tĂ« plotĂ«sonin menjĂ«herĂ« disa tregues. Tani do tâjua tregojmĂ« pse.
- Glusterfs nuk na përmbushi në performancë në lexim dhe shkruarje, pati probleme me leximin e një numri të madh skedareve si dhe kishte ngarkesë të lartë në CPU. Problemi me leximin e skedarëve mund të zgjidhet duke i kërkuar ato direkt në brick-e, por kjo nuk është gjithmonë e aplikueshme dhe përgjithësisht është e gabuar.
- Ceph nuk na pëlqeu për kompleksitetin e tepruar, i cili mund të jetë i dëmshëm në projektet me 2-4 serverë, sidomos nëse projekti më pas administronhet. Përsëri, ka kufizime serioze në performancë, që detyrojnë ndërtimin e klastereve të veçanta të magazinës, ashtu si me glusterfs.
- Përdorimi i një serveri nfs për të implementuar një magazinë të përbashkët i jep pyetje në lidhje me qëndrueshmërinë.
- s3 është një zgjidhje e shkëlqyer dhe e njohur për një rang të caktuar detyrash, por gjithashtu nuk është një sistem skedarësh, që e ngushton fushën e aplikimit.
- lsyncd. Nëse kemi filluar të flasim për "jo-sistemet e skedarëve", është e arsyeshme të kalojmë edicion në këtë zgjidhje të njohur. Jo vetëm që nuk është e përshtatshme për shkëmbim dypërshellesh (por nëse dëshirohet shumë, mund të bëhet), por gjithashtu nuk punon stabilisht me një numër të madh skedarësh. Një shtesë e këndshme është se ajo është njëpërçendrore. Arsyeja është në arkitekturën e programit: ajo përdor inotify për të monitoruar objektet e punës, që vendosen gjatë nisjes dhe gjatë ripërgatitjes. Si mjet transferimi përdoret rsync.
Tutorial: si të implementojmë një magazinë të përbashkët mbi drbd+ocfs2
Një nga zgjidhjet më të përshtatshme për ne ishte lidhja ocfs2+drbd. Tani do t'ju tregojmë si mund të shpërndajmë shpejt një magazinë të përbashkët për dy serverësh në bazën e zgjidhjeve. Por fillimisht disa fjalë për komponentët:
DRBD â njĂ« sistem ruajtjeje i cili vjen standard me Linux, i cili lejon replikimin e tĂ« dhĂ«nave midis serverĂ«ve me blloqe. PĂ«rdorimi kryesor Ă«shtĂ« ndĂ«rtimi i ruajtjeve tĂ« qĂ«ndrueshme.
OCFS2 â njĂ« sistem skedarĂ«sh qĂ« siguron pĂ«rdorimin e pĂ«rbashkĂ«t tĂ« tĂ« njĂ«jtit ruajtje nga disa sisteme. Ai Ă«shtĂ« pjesĂ« e paketĂ«s Linux dhe pĂ«rbĂ«het nga njĂ« modul bĂ«rthamĂ« dhe mjete pĂ«r pĂ«rdoruesit pĂ«r tĂ« punuar me FS. OCFS2 mund tĂ« pĂ«rdoret jo vetĂ«m mbi DRBD, por edhe mbi iSCSI me lidhje tĂ« shumta. NĂ« shembullin tonĂ« ne pĂ«rdorim DRBD.
Të gjitha veprimet kryhen në serverin ubuntu 18.04 në konfigurimin minimal.
Hapi 1. Konfigurojmë DRBD:
Në skedarin /etc/drbd.d/drbd0.res përshkruajmë pajisjen tonë virtuale të bllokut /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 â pĂ«rdorimi i tĂ« njĂ«jtit bllok pĂ«r ruajtjen e tĂ« dhĂ«nave tĂ« metadata
device /dev/drbd0 â pĂ«rdorimi i /dev/drbd0 si rrugĂ« nĂ« drbd.
disk /dev/vdb1 â pĂ«rdorimi i /dev/vdb1
syncer { rate 1000M; } â pĂ«rdorimi i gjigabit tĂ« kapacitetit tĂ« kanaleve
allow-two-primaries â njĂ« opsion i rĂ«ndĂ«sishĂ«m qĂ« lejon pranimin e ndryshimeve nĂ« dy servera kryesorĂ«
after-sb-0pri, after-sb-1pri, after-sb-2pri â opsione qĂ« pĂ«rcaktojnĂ« veprimet e nyjĂ«s kur zbulohet splitbrain. Mund tĂ« shihni mĂ« shumĂ« nĂ« dokumentacion.
become-primary-on both â vendos tĂ« dy nyjat nĂ« kryesor.
Në rastin tonë kemi dy VM të njëjta, me një rrjet virtual me kapacitet prej 10 gigabit.
Në shembullin tonë emrat rrjetësorë të dy nyjave të grupit janë drbd1 dhe drbd2. Për të funksionuar siç duhet, duhet të maponi emrat dhe adresat IP të nyjave në /etc/hosts.
10.10.10.192 drbd1
10.10.10.193 drbd2Hapi 2. Konfigurojmë nyjat:
Në të dy serverët kryejmë:
drbdadm create-md drbd0 
modprobe drbd
drbdadm up drbd0
cat /proc/drbdKemi rezultatet si më poshtë:

Mund të filloni sinkronizimin. Në nyjën e parë, duhet të ekzekutoni:
drbdadm primary --force drbd0Shikoni statusin:
cat /proc/drbd 
Shkëlqyeshëm, filloi sinkronizimi. Presim që të përfundojë dhe shohim pamjen:

Hapi 3. Fillojmë sinkronizimin në nyjën e dytë:
drbdadm primary --force drbd0
Kemi rezultatet si më poshtë:

Tani mund të shkruajmë në drbd nga të dy serverët.
Hapi 4. Instalimi dhe konfigurimi i ocfs2.
Ne do të përdorim një konfigurim mjaft triviale:
kluster:
numri_i_nodit = 2
emri = ocfs2cluster
nodi:
numri = 1
kluster = ocfs2cluster
ip_port = 7777
ip_address = 10.10.10.192
emri = drbd1
nodi:
numri = 2
kluster = ocfs2cluster
ip_port = 7777
ip_address = 10.10.10.193
emri = drbd2
Kjo duhet të shkruhet në /etc/ocfs2/cluster.conf në të dy nodet.
Krijojmë FS në drbd0 në çdo nod:
mkfs.ocfs2 -L "testVol" /dev/drbd0
Këtu krijuam FS me etiketën testVol në drbd0, duke përdorur parametrat e parazgjedhur.

Në /etc/default/o2cb duhet të vendoset (si në skedarin tonë të konfigurimit)
O2CB_ENABLED=true
O2CB_BOOTCLUSTER=ocfs2cluster dhe të ekzekutohet në çdo nod:
o2cb register-cluster ocfs2clusterPas kësaj aktivizojmë dhe shtojmë në nisjen automatike të gjithë unit-et që na duhen:
systemctl enable drbd o2cb ocfs2
systemctl start drbd o2cb ocfs2Pjesa më e madhe e kësaj do të jetë e aktivizuar gjatë procesit të konfigurimit.
Hapi 5. Shtojmë pikat e montimit në fstab në të dy nodet:
/dev/drbd0 /media/shared ocfs2 defaults,noauto,heartbeat=local 0 0Direktorinë /media/shared duhet të krijohet më parë.
Këtu përdorim opsionet noauto, që do të thotë se FS nuk do të montojë në nisje (preferoj të montojë FS të rrjetit përmes systemd) dhe heartbeat=local, që do të thotë përdorimi i shërbimit heartbeat në çdo nod. Ekziston gjithashtu global heartbeat, i cili është më i përshtatshëm për klastere të mëdha.
Më pas mund të montohet /media/shared dhe të verifikohet sinkronizimi i përmbajtjeve.
Gati! Si rezultat, ne marrim një ruajtje më të qëndrueshme me mundësi për shkallëzim dhe një performancë të konsiderueshme.
Burimi: habr.com
