Klastrite salvestus väikeste veebiklastrite jaoks, mis põhinevad drbd+ocfs2

Millest räägime:
Kuidas kiiresti seadistada jagatud salvestust kahe serveri jaoks drbd+ocfs2 lahenduste põhjal.

Kellele see on kasulik:
Selle juhendi kasuks rääkivad süsteemiadministraatorid ja kõik, kes valivad salvestuslahendust või soovivad proovida antud lahendust.

Millistest lahendustest loobusime ja miks:

Sageli seisame silmitsi olukorraga, kus peame väikse veebiklusteri peale rakendama jagatud salvestuse, mis pakub head lugemise ja kirjutamise jõudlust. Oleme proovinud erinevaid järjepidevuse lahendusi meie projektide jaoks, kuid vähesed suudavad rahuldada meid mitmesugustes aspektides. Nüüd räägime, miks.

  • Glusterfs ei rahuldanud meid lugemise ja kirjutamise jõudlust, tekkis probleeme suurte hulga failide samaaegsel lugemisel ning CPU koormus oli kõrge. Failide lugemise probleem oleks olnud võimalik lahendada, minnes otse brick-idesse, kuid see ei ole alati rakendatav ja üldiselt vale.

  • Ceph ei meeldinud liialt suurte keerukustega, mis võivad olla kahjulikud projektide puhul, kus on 2-4 serveritega, eriti kui projekti hiljem hallatakse. Samuti on tõsised jõudluse piirangud, mis sunnivad ehitama eraldi storage-klastreid, nagu glusterfs-i puhul.

  • Ühe nfs-serveri kasutamine ühise salvestusruumi rakendamiseks tekitab küsimusi usaldusväärsuse osas.

  • S3 on suurepärane populaarne lahendus teatud ülesannete jaoks, kuid see ei ole ka failisüsteem, mis piirab selle rakendamise valdkonda.

  • Lsyncd. Kui me juba räägime „mitte-failisüsteemidest”, siis tasub tutvuda ka selle populaarse lahendusega. Mitte ainult, et see ei sobi kahepoolseks suhtlemiseks (kuigi kui väga soovida, siis on võimalik), vaid see ei tööta ka suures hulgas faile usaldusväärselt. Positiivne on see, et see on ühetasandiline. Selle põhjuseks on programmi arhitektuur: see kasutab inotify objektide jälgimiseks, mida see käivitamise ja uuesti skaneerimise ajal üles riputab. Edastamiseks kasutatakse rsync'i.

Tutorial: kuidas seadistada ühendatud salvestusruumi DRBD+OCFS2 baasil.

Üks mugavamaid lahendusi meie jaoks on osutunud paari kombinatsiooniks OCFS2+DRBD. Nüüd räägime, kuidas kiiresti üles seada ühine ladustamine kahe jaoks serverite lahenduste andmebaasi. Aga kõigepealt natuke komponentidest:

DRBD on Linuxi standardne salvestussüsteem, mis võimaldab replikeerida andmeid serverite vahel plokkide kaupa. Selle põhikasutuseks on usaldusväärsete ladustamiste ehitamine.

OCFS2 on failisüsteem, mis võimaldab mitmete süsteemide jagada sama ladustamist. See kuulub Linuxi käitlemise paketisse ja sisaldab nii tuumamoodulit kui ka userspace tööriistu failisüsteemi haldamiseks. OCFS2 võib kasutada mitte ainult DRBD üle, vaid ka iSCSI mitmekordse ühendusega. Meie näites kasutame DRBD-d.

Kõik toimingud viiakse läbi Ubuntu serveris 18.04 minimaalkonfigureerituna.

Samm 1. Seadistame DRBD:

Failis /etc/drbd.d/drbd0.res kirjeldame meie virtuaalset plokiseadet /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 — kasutada samu plokkseadmisi metaandmete hoidmiseks
device /dev/drbd0 — kasutada /dev/drbd0 drbd-i teena.
disk /dev/vdb1 — kasutada /dev/vdb1
syncer { rate 1000M; } — kasutada gigabit kanalit
allow-two-primaries — oluline valik, mis lubab muudatusi kahe peamise serveri puhul
after-sb-0pri, after-sb-1pri, after-sb-2pri — valikud, mis määravad sõlme toimingud splitbrain'i tuvastamisel. Lisainfot leiate dokumentatsioonist.
become-primary-on both — määrab mõlemad sõlmed peamiseks.

Meil on kaks täiesti identsed VM-d, millel on eraldatud 10 gigabitise ribalaiusega virtuaalne võrk.

Meie näites on kahe klastrisõlme võrgunimed drbd1 ja drbd2. Õige töö tagamiseks tuleb /etc/hosts-s seondada nimed ja IP-aadressid.

10.10.10.192 drbd1
10.10.10.193 drbd2

Samm 2. Seame sõlmed:

Kaks serverit täidame:

drbdadm create-md drbd0

Klastrite salvestus väikeste veebiklastrite jaoks, mis põhinevad drbd+ocfs2

modprobe drbd
drbdadm up drbd0
cat /proc/drbd

Saame järgneva:

Klastrite salvestus väikeste veebiklastrite jaoks, mis põhinevad drbd+ocfs2

Sünkroniseerimise käivitamine on lubatud. Esimesel sõlmel tuleb täita:

drbdadm primary --force drbd0

K vaatame olekut:

cat /proc/drbd

Klastrite salvestus väikeste veebiklastrite jaoks, mis põhinevad drbd+ocfs2

Suurepärane, sünkroniseerimine on alanud. Ootame lõpuleviimist ning näeme olukorda:

Klastrite salvestus väikeste veebiklastrite jaoks, mis põhinevad drbd+ocfs2

Samm 3. Käivitame sünkroniseerimise teisel sõlmel:

drbdadm primary --force drbd0

Saame järgneva:

Klastrite salvestus väikeste veebiklastrite jaoks, mis põhinevad drbd+ocfs2

Nüüd saame drbd-sse kirjutada kahest serverist.

Samm 4. OCFS2 paigaldamine ja seadistamine.

Kasutame piisavalt lihtsat konfiguratsiooni:

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

Seda tuleb salvestada /etc/ocfs2/cluster.conf mõlemale sõlmele.

Loome FS drbd0-l mistahes sõlmel:

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

Siin loome FS sildiga testVol drbd0-l, kasutades vaikeseadeid.

Klastrite salvestus väikeste veebiklastrite jaoks, mis põhinevad drbd+ocfs2

Failis /etc/default/o2cb peab olema määratud (nagu meie konfiguratsioonifailis)

O2CB_ENABLED=true 
O2CB_BOOTCLUSTER=ocfs2cluster 

ja täitma igas sõlmes:

o2cb register-cluster ocfs2cluster

Seejärel lubame ja lisame automaatkäivitusse kõik vajalikud üksused:

systemctl enable drbd o2cb ocfs2
systemctl start drbd o2cb ocfs2

Osa sellest käivitatakse juba seadistamise käigus.

Samm 5. Lisame montaažikohtade fstab mõlemas sõlmes:

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

Kataloog /media/shared sel juhul tuleb see eelnevalt luua.

Siin kasutame valikuid noauto, mis tähendab, et FS ei mountita käivitamisel (eelistan mountida võrgu failisüsteeme läbi systemd) ja heartbeat=local, mis tähendab, et iga sõlme kasutab heartbeat teenust. On ka globaalne heartbeat, mis sobib paremini suuremate klastrite jaoks.

Seejärel saame mountida /media/shared ja kontrollida sisu sünkroonimist.

Valmis! Tulemusena saame enam-vähem veatut failisüsteemi, mis on skaleeritav ja omab head jõudlust.

Allikas: habr.com

Osta usaldusväärne veebihosting DDoS kaitsega, VPS VDS serverid 🔥 Osta usaldusväärne veebihosting DDoS kaitsega, VPS VDS serverid | ProHoster