Ruajtja e grupeve për grupe të vogla ueb bazuar në drbd+ocfs2

Për çfarë do të flasim:
Si të vendosni shpejt hapësirën ruajtëse të përbashkët për dy serverë bazuar në zgjidhjet drbd+ocfs2.

Për kë do të jetë e dobishme kjo:
Tutoriali do të jetë i dobishëm për administratorët e sistemit dhe këdo që zgjedh një metodë zbatimi të ruajtjes ose dëshiron të provojë zgjidhjen.

Çfarë vendimesh refuzuam dhe pse?

Shpesh ballafaqohemi me një situatë ku na duhet të zbatojmë hapësirën ruajtëse të përbashkët me performancë të mirë leximi-shkrimi në një grup të vogël ueb. Ne provuam opsione të ndryshme për zbatimin e ruajtjes së përbashkët për projektet tona, por pak ishin në gjendje të na kënaqnin në disa tregues njëherësh. Tani do t'ju tregojmë pse.

  • Glusterfs nuk na kënaqi me performancën e leximit dhe shkrimit; kishte probleme me leximin e njëkohshëm të një numri të madh skedarësh dhe kishte një ngarkesë të lartë në CPU. Problemi me leximin e skedarëve mund të zgjidhet duke iu qasur atyre drejtpërdrejt nga tulla, por kjo nuk është gjithmonë e zbatueshme dhe në përgjithësi është e pasaktë.

  • Ceph nuk i pëlqeu kompleksiteti i tepërt, i cili mund të jetë i dëmshëm në projektet me 2-4 serverë, veçanërisht nëse projekti mbahet më pas. Përsëri, ka kufizime serioze të performancës që na detyrojnë të ndërtojmë grupe të veçanta ruajtjeje, si me glusterf-at.

  • Përdorimi i një serveri NFS për të zbatuar ruajtjen e përbashkët ngre pyetje për sa i përket tolerancës së gabimeve.

  • s3 është një zgjidhje e shkëlqyer popullore për një gamë të caktuar detyrash, por nuk është një sistem skedari që e ngushton fushën e tij.

  • lsyncd. Nëse tashmë kemi filluar të flasim për "sistemet jo-skedar", atëherë ia vlen të shqyrtojmë këtë zgjidhje popullore. Jo vetëm që nuk është i përshtatshëm për shkëmbim të dyanshëm (por nëse vërtet dëshironi, atëherë mundeni), ai gjithashtu nuk funksionon në mënyrë të qëndrueshme në një numër të madh skedarësh. Një shtesë e këndshme për të gjithë gjë është se është me një fije të vetme. Arsyeja është në arkitekturën e programit: përdor inotify për të monitoruar objektet e punës, të cilat i cakton në fillim dhe gjatë skanimit. rsync përdoret si mjet transferimi.

Tutorial: si të vendosni hapësirën ruajtëse të përbashkët bazuar në drbd+ocfs2

Një nga zgjidhjet më të përshtatshme për ne ishte lidhja ocfs2+drbd. Tani do t'ju tregojmë se si mund të vendosni shpejt hapësirën e ruajtjes së përbashkët për dy serverë bazuar në një bazë të dhënash zgjidhjeje. Por së pari, pak për përbërësit:

DRBD - një sistem ruajtjeje nga shpërndarja standarde Linux që ju lejon të riprodhoni të dhëna midis serverëve në blloqe. Aplikacioni kryesor është ndërtimi i ruajtjes tolerante ndaj gabimeve.

OCFS2 - një sistem skedari që siguron përdorim të përbashkët të të njëjtit ruajtje nga disa sisteme. Përfshihet në shpërndarjen Linux dhe është një modul kernel dhe mjete të hapësirës së 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ë një konfigurim minimal.

Hapi 1. Konfiguro DRBD:

Në skedarin /etc/drbd.d/drbd0.res ne përshkruajmë pajisjen tonë të bllokut virtual /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-disku i brendshëm — përdorni të njëjtat pajisje blloku për të ruajtur meta të dhënat
pajisja /dev/drbd0 — përdorni /dev/drbd0 si shtegun për në volumin drbd.
disku /dev/vdb1 - përdorni /dev/vdb1
sinkronizuesi { norma 1000M; } — përdorni gjerësinë e brezit të kanalit gigabit
lejoj-dy-primare - një opsion i rëndësishëm që lejon që ndryshimet të pranohen në dy serverë kryesorë
pas-sb-0pri, pas-sb-1pri, pas-sb-2pri — opsionet përgjegjëse për veprimet e nyjës kur zbulohet truri i ndarë. Më shumë detaje mund të gjenden në dokumentacion.
bëhet-primar-në të dyja — vendos të dy nyjet në primare.

Në rastin tonë, ne kemi dy VM absolutisht identike, me një rrjet virtual të dedikuar me një gjerësi bande prej 10 gigabit.

Në shembullin tonë, emrat e rrjetit të dy nyjeve të grupimeve janë drbd1 dhe drbd2. Për funksionimin e duhur, ju duhet të përputhni emrat dhe adresat IP të hosteve në /etc/hosts.

10.10.10.192 drbd1
10.10.10.193 drbd2

Hapi 2. Vendosni nyjet:

Në të dy serverët ne ekzekutojmë:

drbdadm create-md drbd0

Ruajtja e grupeve për grupe të vogla ueb bazuar në drbd+ocfs2

modprobe drbd
drbdadm up drbd0
cat /proc/drbd

Ne marrim sa vijon:

Ruajtja e grupeve për grupe të vogla ueb bazuar në drbd+ocfs2

Mund të filloni sinkronizimin. Në nyjen e parë duhet të ekzekutoni:

drbdadm primary --force drbd0

Le të shohim statusin:

cat /proc/drbd

Ruajtja e grupeve për grupe të vogla ueb bazuar në drbd+ocfs2

Shumë mirë, sinkronizimi ka filluar. Presim deri në fund dhe shohim foton:

Ruajtja e grupeve për grupe të vogla ueb bazuar në drbd+ocfs2

Hapi 3. Filloni sinkronizimin në nyjen e dytë:

drbdadm primary --force drbd0

Ne marrim sa vijon:

Ruajtja e grupeve për grupe të vogla ueb bazuar në drbd+ocfs2

Tani mund të shkruajmë në drbd nga dy serverë.

Hapi 4. Instaloni dhe konfiguroni ocfs2.

Ne do të përdorim një konfigurim mjaft të parëndësishëm:

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

Duhet të shkruhet në /etc/ocfs2/cluster.conf në të dy nyjet.

Ne krijojmë një FS në drbd0 në çdo nyje:

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

Këtu kemi krijuar një sistem skedari me etiketën testVol në drbd0, duke përdorur parametrat e paracaktuar.

Ruajtja e grupeve për grupe të vogla ueb bazuar në drbd+ocfs2

Në /etc/default/o2cb ju duhet të vendosni (si në skedarin tonë të konfigurimit)

O2CB_ENABLED=true 
O2CB_BOOTCLUSTER=ocfs2cluster 

dhe ekzekutoni në secilën nyje:

o2cb register-cluster ocfs2cluster

Pastaj ndezim dhe shtojmë të gjitha njësitë që na duhen për të aktivizuar automatikisht:

systemctl enable drbd o2cb ocfs2
systemctl start drbd o2cb ocfs2

Disa nga këto do të ekzekutohen tashmë gjatë procesit të konfigurimit.

Hapi 5. Shtoni pikat e montimit në fstab në të dy nyjet:

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

Drejtoria /media/shpërndarë duhet të krijohet paraprakisht.

Këtu përdorim opsionet noauto, që do të thotë se skedari nuk do të montohet në fillim (preferoj të montoj skedarët e rrjetit nëpërmjet systemd) dhe heartbeat=local, që do të thotë të përdorim shërbimin e rrahjeve të zemrës në çdo nyje. Ekziston edhe rrahje zemre globale, e cila është më e përshtatshme për grupime të mëdha.

Më pas mund të montoni /media/shpërndarë dhe kontrolloni sinkronizimin e përmbajtjes.

Done! Si rezultat, ne kemi pak a shumë ruajtje tolerante ndaj gabimeve me shkallëzim dhe performancë të mirë.

Burimi: www.habr.com

Shto një koment