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.

  • Cephu ni bila všeč pretirana kompleksnost, ki je lahko škodljiva pri projektih z 2-4 strežniki, sploh če se projekt naknadno vzdržuje. Spet obstajajo resne omejitve zmogljivosti, ki nas prisilijo, da zgradimo ločene gruče za shranjevanje, kot pri glusterfih.

  • 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+drbd. Zdaj vam bomo povedali, kako lahko hitro uvedete skupno shrambo za dva strežnika na podlagi podatkovne baze rešitev. Toda najprej nekaj o komponentah:

DRBD - sistem za shranjevanje iz standardne distribucije Linuxa, ki omogoča podvajanje podatkov med strežniki v blokih. Glavna uporaba je izdelava pomnilnika, odpornega na napake.

OCFS2 - datotečni sistem, ki omogoča skupno uporabo istega pomnilnika za več sistemov. Vključeno v distribucijo Linuxa in je modul jedra ter orodja uporabniškega prostora za delo s FS. OCFS2 je mogoče uporabljati ne samo prek DRBD, ampak tudi prek iSCSI z več povezavami. V našem primeru uporabljamo DRBD.

Vsa dejanja se izvajajo na strežniku ubuntu 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

Dodaj komentar