Shranjevanje gruče za majhne spletne gruče, ki temeljijo na drbd+ocfs2

O čem bomo govorili:
Kako hitro razmestiti skupno shrambo za dva strežnika na podlagi rešitev drbd+ocfs2.

Za koga bo to koristno:
Vadnica bo uporabna za sistemske skrbnike in vse, ki se odločijo za način implementacije pomnilnika ali želijo preizkusiti rešitev.

Katere odločitve smo zavrnili in zakaj?

Pogosto se soočamo s situacijo, ko moramo implementirati skupno shranjevanje z dobro zmogljivostjo branja in pisanja na majhni spletni gruči. Preizkusili smo različne možnosti za implementacijo skupnega shranjevanja za naše projekte, vendar nas je le malo uspelo zadovoljiti po več kazalnikih hkrati. Zdaj vam bomo povedali, zakaj.

  • Glusterfs nas ni zadovoljil z zmogljivostjo branja in pisanja, težave so bile pri hkratnem branju velikega števila datotek, CPE je bil visoko obremenjen. Težavo z branjem datotek bi lahko rešili z dostopom do njih neposredno iz opeke, vendar to ni vedno uporabno in je na splošno napačno.

  • Ceph ni bil priljubljen zaradi svoje pretirane kompleksnosti, ki je lahko škodljiva pri projektih z 2-4 strežniki, še posebej, če se projekt pozneje vzdržuje. Tudi tukaj obstajajo znatne omejitve zmogljivosti, zaradi česar je treba ustvariti ločene gruče za shranjevanje, kot pri glusterfs.

  • Uporaba enega strežnika NFS za implementacijo skupnega pomnilnika postavlja vprašanja v smislu tolerance napak.

  • s3 je odlična priljubljena rešitev za določeno vrsto nalog, vendar ni datotečni sistem, kar zožuje njegov obseg.

  • lsyncd. Če smo že začeli govoriti o "nedatotečnih sistemih", potem je vredno preučiti to priljubljeno rešitev. Ne samo, da ni primeren za dvosmerno izmenjavo (če pa res želite, potem lahko), tudi ne deluje stabilno na velikem številu datotek. Lep dodatek k vsej stvari je, da je enoniten. Razlog je v arhitekturi programa: uporablja inotify za spremljanje delovnih objektov, ki jih dodeli ob zagonu in med ponovnim skeniranjem. rsync se uporablja kot prenosni medij.

Vadnica: kako razmestiti skupno shrambo na podlagi drbd+ocfs2

Ena najbolj priročnih rešitev za nas je bila povezava ocfs2+drbdZdaj vam bomo povedali, kako lahko hitro namestite skupno shrambo za dva strežniki na podlagi teh rešitev. Najprej pa nekaj o komponentah:

DRBD - sistem za shranjevanje iz standardne dobave Linux, ki omogoča replikacijo podatkov med strežniki na osnovi blokov. Njegova glavna uporaba je pri gradnji shramb, odpornih na napake.

OCFS2 — datotečni sistem, ki omogoča skupno uporabo istega pomnilnika s strani več sistemov. Vključeno v distribucijo Linux Sestavljen je iz modula jedra in orodij uporabniškega prostora za delo z datotečnimi sistemi. OCFS2 se lahko uporablja ne le prek DRBD, temveč tudi prek iSCSI z več povezavami. V našem primeru uporabljamo DRBD.

Vsa dejanja se izvajajo na ubuntu Strežnik 18.04 v minimalni konfiguraciji.

1. korak. Konfigurirajte DRBD:

V datoteki /etc/drbd.d/drbd0.res opisujemo našo virtualno blokovno napravo /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;
}
}

notranji metadisk — uporabite iste blokovne naprave za shranjevanje metapodatkov
naprava /dev/drbd0 — uporabite /dev/drbd0 kot pot do nosilca drbd.
disk /dev/vdb1 - uporabite /dev/vdb1
syncer { hitrost 1000M; } — uporabite gigabitno pasovno širino kanala
dovoli-dve-primarnosti - pomembna možnost, ki omogoča sprejemanje sprememb na dveh primarnih strežnikih
po-sb-0pri, po-sb-1pri, po-sb-2pri — možnosti, odgovorne za dejanja vozlišča, ko je zaznan splitbrain. Več podrobnosti najdete v dokumentaciji.
postati-primarni-na obeh — nastavi obe vozlišči na primarni.

V našem primeru imamo dva popolnoma enaka VM z namenskim virtualnim omrežjem s prepustnostjo 10 gigabitov.

V našem primeru sta omrežni imeni dveh vozlišč gruče drbd1 in drbd2. Za pravilno delovanje se morate ujemati z imeni in naslovi IP gostiteljev v /etc/hosts.

10.10.10.192 drbd1
10.10.10.193 drbd2

2. korak. Nastavite vozlišča:

Na obeh strežnikih izvajamo:

drbdadm create-md drbd0

Shranjevanje gruče za majhne spletne gruče, ki temeljijo na drbd+ocfs2

modprobe drbd
drbdadm up drbd0
cat /proc/drbd

Dobimo naslednje:

Shranjevanje gruče za majhne spletne gruče, ki temeljijo na drbd+ocfs2

Lahko začnete sinhronizacijo. Na prvem vozlišču morate izvesti:

drbdadm primary --force drbd0

Poglejmo stanje:

cat /proc/drbd

Shranjevanje gruče za majhne spletne gruče, ki temeljijo na drbd+ocfs2

Super, sinhronizacija se je začela. Počakamo do konca in vidimo sliko:

Shranjevanje gruče za majhne spletne gruče, ki temeljijo na drbd+ocfs2

3. korak. Začnite sinhronizacijo na drugem vozlišču:

drbdadm primary --force drbd0

Dobimo naslednje:

Shranjevanje gruče za majhne spletne gruče, ki temeljijo na drbd+ocfs2

Zdaj lahko pišemo v drbd iz dveh strežnikov.

4. korak. Namestite in konfigurirajte ocfs2.

Uporabili bomo dokaj trivialno konfiguracijo:

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

Treba ga je zapisati v /etc/ocfs2/cluster.conf na obeh vozliščih.

Ustvarimo FS na drbd0 na katerem koli vozlišču:

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

Tukaj smo ustvarili datotečni sistem z oznako testVol na drbd0 z uporabo privzetih parametrov.

Shranjevanje gruče za majhne spletne gruče, ki temeljijo na drbd+ocfs2

V /etc/default/o2cb morate nastaviti (kot v naši konfiguracijski datoteki)

O2CB_ENABLED=true 
O2CB_BOOTCLUSTER=ocfs2cluster 

in izvedite na vsakem vozlišču:

o2cb register-cluster ocfs2cluster

Nato vklopimo in dodamo vse enote, ki jih potrebujemo za samodejni zagon:

systemctl enable drbd o2cb ocfs2
systemctl start drbd o2cb ocfs2

Nekaj ​​od tega se bo že izvajalo med postopkom namestitve.

5. korak. Dodajte točke priklopa v fstab na obeh vozliščih:

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

Imenik /media/shared ustvariti ga je treba vnaprej.

Tukaj uporabljamo možnosti noauto, kar pomeni, da datoteka ne bo nameščena ob zagonu (omrežne datoteke raje montiram prek systemd) in heartbeat=local, kar pomeni uporabo storitve heartbeat na vsakem vozlišču. Obstaja tudi globalni srčni utrip, ki je bolj primeren za velike grozde.

Nato lahko montirate /media/shared in preverite sinhronizacijo vsebine.

Končano! Posledično dobimo bolj ali manj odporno shrambo z razširljivostjo in spodobno zmogljivostjo.

Vir: www.habr.com

Kupite zanesljivo gostovanje za strani z DDoS zaščito, VPS VDS strežniki 🔥 Kupite zanesljivo spletno gostovanje z zaščito DDoS, VPS VDS strežniki | ProHoster