Aretostokado por malgrandaj retgrupoj bazitaj sur drbd+ocfs2

Pri kio ni parolos:
Kiel rapide deploji komunan stokadon por du serviloj bazitaj sur drbd+ocfs2-solvoj.

Por kiu ĉi tio estos utila:
La lernilo estos utila al sistemaj administrantoj kaj al ĉiuj, kiuj elektas konservan efektivigmetodon aŭ volas provi la solvon.

Kiajn decidojn ni rifuzis kaj kial?

Ofte ni alfrontas situacion, kie ni devas efektivigi komunan stokadon kun bona legado-skriba rendimento sur malgranda retejo. Ni provis diversajn eblojn por efektivigi komunan stokadon por niaj projektoj, sed malmultaj povis kontentigi nin pri pluraj indikiloj samtempe. Nun ni diros al vi kial.

  • Glusterfs ne kontentigis nin pri legado kaj skribado; estis problemoj kun samtempa legado de granda nombro da dosieroj, kaj estis alta ŝarĝo sur la CPU. La problemo pri legado de dosieroj povus esti solvita per aliro al ili rekte de briko, sed ĉi tio ne ĉiam aplikeblas kaj estas ĝenerale malĝusta.

  • Ceph ne ŝatis la troan kompleksecon, kiu povas esti malutila en projektoj kun 2-4 serviloj, precipe se la projekto estas poste konservita. Denove, estas gravaj agado-limigoj, kiuj devigas nin konstrui apartajn stokadajn aretojn, kiel ĉe glusterfs.

  • Uzi unu NFS-servilon por efektivigi komunan stokadon levas demandojn pri misfunkciado.

  • s3 estas bonega populara solvo por certa gamo da taskoj, sed ĝi ne estas dosiersistemo, kiu malvastigas ĝian amplekson.

  • lsyncd. Se ni jam komencis paroli pri "ne-dosiersistemoj", tiam indas trarigardi ĉi tiun popularan solvon. Ne nur ĝi ne taŭgas por dudirekta interŝanĝo (sed se vi vere volas, tiam vi povas), ĝi ankaŭ ne funkcias stabile sur granda nombro da dosieroj. Bela aldono al la tuta afero estas, ke ĝi estas unufadena. La kialo estas en la arkitekturo de la programo: ĝi uzas inotify por monitori laborobjektojn, kiujn ĝi asignas ĉe ekfunkciigo kaj dum reskanado. rsync estas uzata kiel la transiga medio.

Lernilo: kiel disfaldi komunan stokadon bazitan sur drbd+ocfs2

Unu el la plej oportunaj solvoj por ni estis la ligilo ocfs2+drbd. Nun ni diros al vi kiel vi povas rapide disfaldi komunan stokadon por du serviloj bazitaj sur solva datumbazo. Sed unue, iomete pri la komponantoj:

DRBD - konserva sistemo de la norma Linuksa distribuo, kiu ebligas al vi reprodukti datumojn inter serviloj en blokoj. La ĉefa aplikaĵo estas konstrui mistoleran stokadon.

OCFS2 - dosiersistemo kiu disponigas komunan uzon de la sama stokado de pluraj sistemoj. Inkludita en la Linukso-distribuo kaj estas kernomodulo kaj uzantspacaj iloj por labori kun la FS. OCFS2 povas esti uzata ne nur super DRBD, sed ankaŭ super iSCSI kun multoblaj ligoj. En nia ekzemplo ni uzas DRBD.

Ĉiuj agoj estas faritaj sur ubuntu-servilo 18.04 en minimuma agordo.

Paŝo 1. Agordi DRBD:

En la dosiero /etc/drbd.d/drbd0.res ni priskribas nian virtualan blokan aparaton /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-disko interna — uzu la samajn blokajn aparatojn por stoki metadatenojn
aparato /dev/drbd0 — uzu /dev/drbd0 kiel la vojon al la drbd-volumo.
disko /dev/vdb1 - uzu /dev/vdb1
syncer { rate 1000M; } — uzu gigabit-kanalan bendolarĝon
permesi-du-primaraj - grava opcio, kiu ebligas akcepti ŝanĝojn sur du ĉefaj serviloj
post-sb-0pri, post-sb-1pri, post-sb-2pri - opcioj respondecaj pri la agoj de la nodo kiam splitbrain estas detektita. Pliaj detaloj troveblas en la dokumentado.
fariĝi-ĉefa-sur ambaŭ — metas ambaŭ nodojn al primaraj.

En nia kazo, ni havas du absolute identajn VM-ojn, kun dediĉita virtuala reto kun trafluo de 10 gigabitoj.

En nia ekzemplo, la retnomoj de du clusternodoj estas drbd1 kaj drbd2. Por ĝusta funkciado, vi devas kongrui kun la nomoj kaj IP-adresoj de gastigantoj en /etc/hosts.

10.10.10.192 drbd1
10.10.10.193 drbd2

Paŝo 2. Agordu nodojn:

Sur ambaŭ serviloj ni kuras:

drbdadm create-md drbd0

Aretostokado por malgrandaj retgrupoj bazitaj sur drbd+ocfs2

modprobe drbd
drbdadm up drbd0
cat /proc/drbd

Ni ricevas la jenon:

Aretostokado por malgrandaj retgrupoj bazitaj sur drbd+ocfs2

Vi povas komenci sinkronigon. Sur la unua nodo vi devas ekzekuti:

drbdadm primary --force drbd0

Ni rigardu la staton:

cat /proc/drbd

Aretostokado por malgrandaj retgrupoj bazitaj sur drbd+ocfs2

Bonege, sinkronigo komenciĝis. Ni atendas ĝis la fino kaj vidu la bildon:

Aretostokado por malgrandaj retgrupoj bazitaj sur drbd+ocfs2

Paŝo 3. Komencu sinkronigon sur la dua nodo:

drbdadm primary --force drbd0

Ni ricevas la jenon:

Aretostokado por malgrandaj retgrupoj bazitaj sur drbd+ocfs2

Nun ni povas skribi al drbd de du serviloj.

Paŝo 4. Instali kaj agordi ocfs2.

Ni uzos sufiĉe bagatelan agordon:

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

Ĝi devas esti skribita enen /etc/ocfs2/cluster.conf sur ambaŭ nodoj.

Ni kreas FS sur drbd0 sur iu ajn nodo:

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

Ĉi tie ni kreis dosiersistemon kun la etikedo testVol sur drbd0, uzante la defaŭltajn parametrojn.

Aretostokado por malgrandaj retgrupoj bazitaj sur drbd+ocfs2

En /etc/default/o2cb vi devas agordi (kiel en nia agorda dosiero)

O2CB_ENABLED=true 
O2CB_BOOTCLUSTER=ocfs2cluster 

kaj ekzekutu sur ĉiu nodo:

o2cb register-cluster ocfs2cluster

Poste ni ŝaltas kaj aldonas ĉiujn unuojn, kiujn ni bezonas por aŭtomate:

systemctl enable drbd o2cb ocfs2
systemctl start drbd o2cb ocfs2

Iuj el ĉi tio jam funkcios dum la agorda procezo.

Paŝo 5. Aldonu muntajn punktojn al fstab sur ambaŭ nodoj:

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

Dosierujo /media/dividita ĝi devas esti kreita anticipe.

Ĉi tie ni uzas la noauto-opciojn, kio signifas, ke la dosiero ne estos muntita ĉe ekfunkciigo (mi preferas munti retajn dosierojn per systemd) kaj heartbeat=local, kio signifas uzi la korbatservon sur ĉiu nodo. Ekzistas ankaŭ tutmonda korbato, kiu pli taŭgas por grandaj aretoj.

Poste vi povas munti /media/dividita kaj kontrolu enhavan sinkronigon.

Farita! Kiel rezulto, ni ricevas pli-malpli mistoleran stokadon kun skaleblo kaj deca agado.

fonto: www.habr.com

Aldoni komenton