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 drbd2Samm 2. Seame sõlmed:
Kaks serverit täidame:
drbdadm create-md drbd0 
modprobe drbd
drbdadm up drbd0
cat /proc/drbdSaame järgneva:

Sünkroniseerimise käivitamine on lubatud. Esimesel sõlmel tuleb täita:
drbdadm primary --force drbd0K vaatame olekut:
cat /proc/drbd 
Suurepärane, sünkroniseerimine on alanud. Ootame lõpuleviimist ning näeme olukorda:

Samm 3. Käivitame sünkroniseerimise teisel sõlmel:
drbdadm primary --force drbd0
Saame järgneva:

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.

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 ocfs2clusterSeejärel lubame ja lisame automaatkäivitusse kõik vajalikud üksused:
systemctl enable drbd o2cb ocfs2
systemctl start drbd o2cb ocfs2Osa 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 0Kataloog /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
