Hifadhi ya nguzo kwa vikundi vidogo vya wavuti kulingana na drbd+ocfs2

Tutazungumza nini:
Jinsi ya kupeleka haraka hifadhi iliyoshirikiwa kwa seva mbili kulingana na suluhu za drbd+ocfs2.

Hii itakuwa muhimu kwa nani:
Mafunzo yatakuwa muhimu kwa wasimamizi wa mfumo na mtu yeyote anayechagua mbinu ya utekelezaji wa uhifadhi au anataka kujaribu suluhisho.

Tumekataa maamuzi gani na kwanini?

Mara nyingi tunakabiliwa na hali ambapo tunahitaji kutekeleza hifadhi iliyoshirikiwa na utendaji mzuri wa kusoma-kuandika kwenye nguzo ndogo ya wavuti. Tulijaribu chaguo mbalimbali za kutekeleza hifadhi ya pamoja ya miradi yetu, lakini wachache waliweza kuturidhisha kwa viashiria kadhaa mara moja. Sasa tutakuambia kwa nini.

  • Glusterfs haikuturidhisha na utendaji wa kusoma na kuandika; kulikuwa na shida na usomaji wa wakati huo huo wa idadi kubwa ya faili, na kulikuwa na mzigo mkubwa kwenye CPU. Tatizo la kusoma faili linaweza kutatuliwa kwa kuzifikia moja kwa moja kutoka kwa matofali, lakini hii haitumiki kila wakati na kwa ujumla sio sahihi.

  • Ceph hakupenda ugumu mwingi, ambao unaweza kuwa na madhara kwa miradi iliyo na seva 2-4, haswa ikiwa mradi huo utadumishwa baadaye. Tena, kuna mapungufu makubwa ya utendakazi ambayo yanatulazimisha kujenga vikundi tofauti vya uhifadhi, kama vile glusterfs.

  • Kutumia seva moja ya NFS kutekeleza uhifadhi wa pamoja huibua maswali kuhusu uvumilivu wa makosa.

  • s3 ni suluhisho bora maarufu kwa anuwai ya kazi, lakini sio mfumo wa faili, ambao unapunguza wigo wake.

  • lsyncd. Ikiwa tayari tumeanza kuzungumza juu ya "mifumo isiyo ya faili," basi ni thamani ya kwenda juu ya ufumbuzi huu maarufu. Sio tu kwamba haifai kwa kubadilishana kwa njia mbili (lakini ikiwa unataka kweli, basi unaweza), pia haifanyi kazi kwa utulivu kwenye idadi kubwa ya faili. Aidha nzuri kwa jambo zima ni kwamba ni moja-threaded. Sababu iko katika usanifu wa programu: hutumia inotify kufuatilia vitu vya kazi, ambayo inapeana wakati wa kuanza na wakati wa kuchambua tena. rsync hutumiwa kama njia ya uhamishaji.

Mafunzo: jinsi ya kupeleka hifadhi iliyoshirikiwa kulingana na drbd+ocfs2

Mojawapo ya suluhisho rahisi zaidi kwetu ilikuwa kiunga ocfs2+drbd. Sasa tutakuambia jinsi unaweza haraka kupeleka hifadhi ya pamoja kwa seva mbili kulingana na hifadhidata ya suluhisho. Lakini kwanza, kidogo kuhusu vipengele:

DRBD - mfumo wa uhifadhi kutoka kwa usambazaji wa kawaida wa Linux ambao hukuruhusu kuiga data kati ya seva kwenye vizuizi. Maombi kuu ni kujenga uhifadhi unaostahimili makosa.

OCFS2 - mfumo wa faili ambao hutoa matumizi ya pamoja ya hifadhi sawa na mifumo kadhaa. Imejumuishwa katika usambazaji wa Linux na ni moduli ya kernel na zana za nafasi ya mtumiaji za kufanya kazi na FS. OCFS2 inaweza kutumika sio tu juu ya DRBD, lakini pia juu ya iSCSI yenye viunganisho vingi. Katika mfano wetu tunatumia DRBD.

Vitendo vyote vinafanywa kwenye seva ya ubuntu 18.04 kwa usanidi mdogo.

Hatua ya 1. Sanidi DRBD:

Katika faili /etc/drbd.d/drbd0.res tunaelezea kifaa chetu cha kuzuia /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-diski ya ndani β€” tumia vifaa sawa vya kuzuia kuhifadhi metadata
kifaa /dev/drbd0 - tumia /dev/drbd0 kama njia ya kiasi cha drbd.
diski /dev/vdb1 - tumia /dev/vdb1
syncer { kiwango cha 1000M; } β€” tumia kipimo data cha chaneli ya gigabit
kuruhusu-mbili-mchujo - chaguo muhimu ambayo inaruhusu mabadiliko kukubalika kwenye seva mbili za msingi
after-sb-0pri, after-sb-1pri, after-sb-2pri - Chaguzi zinazohusika na vitendo vya nodi wakati mgawanyiko wa ubongo umegunduliwa. Maelezo zaidi yanaweza kupatikana katika nyaraka.
kuwa-msingi-kwa zote mbili - huweka nodi zote mbili hadi za msingi.

Kwa upande wetu, tuna VM mbili zinazofanana kabisa, na mtandao maalum uliojitolea na upitishaji wa gigabiti 10.

Katika mfano wetu, majina ya mtandao ya nodi mbili za nguzo ni drbd1 na drbd2. Kwa uendeshaji sahihi, unahitaji kufanana na majina na anwani za IP za majeshi katika /etc/hosts.

10.10.10.192 drbd1
10.10.10.193 drbd2

Hatua ya 2. Sanidi nodi:

Kwenye seva zote mbili tunaendesha:

drbdadm create-md drbd0

Hifadhi ya nguzo kwa vikundi vidogo vya wavuti kulingana na drbd+ocfs2

modprobe drbd
drbdadm up drbd0
cat /proc/drbd

Tunapata zifuatazo:

Hifadhi ya nguzo kwa vikundi vidogo vya wavuti kulingana na drbd+ocfs2

Unaweza kuanza maingiliano. Kwenye nodi ya kwanza unahitaji kutekeleza:

drbdadm primary --force drbd0

Wacha tuangalie hali:

cat /proc/drbd

Hifadhi ya nguzo kwa vikundi vidogo vya wavuti kulingana na drbd+ocfs2

Sawa, usawazishaji umeanza. Tunasubiri hadi mwisho na kuona picha:

Hifadhi ya nguzo kwa vikundi vidogo vya wavuti kulingana na drbd+ocfs2

Hatua ya 3. Anza ulandanishi kwenye nodi ya pili:

drbdadm primary --force drbd0

Tunapata zifuatazo:

Hifadhi ya nguzo kwa vikundi vidogo vya wavuti kulingana na drbd+ocfs2

Sasa tunaweza kuandika kwa drbd kutoka kwa seva mbili.

Hatua ya 4. Sakinisha na usanidi ocfs2.

Tutatumia usanidi mdogo sana:

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

Inahitaji kuandikwa ndani /etc/ocfs2/cluster.conf kwenye nodi zote mbili.

Tunaunda FS kwenye drbd0 kwenye nodi yoyote:

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

Hapa tuliunda mfumo wa faili na lebo testVol kwenye drbd0, kwa kutumia vigezo chaguo-msingi.

Hifadhi ya nguzo kwa vikundi vidogo vya wavuti kulingana na drbd+ocfs2

Katika /etc/default/o2cb unahitaji kuweka (kama kwenye faili yetu ya usanidi)

O2CB_ENABLED=true 
O2CB_BOOTCLUSTER=ocfs2cluster 

na utekeleze kwenye kila nodi:

o2cb register-cluster ocfs2cluster

Kisha tunawasha na kuongeza vitengo vyote tunahitaji kujiendesha:

systemctl enable drbd o2cb ocfs2
systemctl start drbd o2cb ocfs2

Baadhi ya haya tayari yatakuwa yakiendeshwa wakati wa mchakato wa kusanidi.

Hatua ya 5. Ongeza sehemu za kupachika ili kufstab kwenye nodi zote mbili:

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

Orodha /media/iliyoshirikiwa lazima iundwe mapema.

Hapa tunatumia chaguzi za noauto, ambayo inamaanisha kuwa faili haitawekwa wakati wa kuanza (napendelea kuweka faili za mtandao kupitia systemd) na heartbeat=local, ambayo inamaanisha kutumia huduma ya mapigo ya moyo kwenye kila nodi. Pia kuna mpigo wa moyo wa kimataifa, ambao unafaa zaidi kwa makundi makubwa.

Ifuatayo unaweza kuweka /media/iliyoshirikiwa na uangalie usawazishaji wa maudhui.

Imefanyika! Kwa hivyo, tunapata hifadhi inayostahimili hitilafu zaidi au kidogo na yenye uwezo mkubwa na utendakazi mzuri.

Chanzo: mapenzi.com

Kuongeza maoni