Cluster storage para sa maliliit na web cluster batay sa drbd+ocfs2

Ang pag-uusapan natin:
Paano mabilis na mag-deploy ng shared storage para sa dalawang server batay sa drbd+ocfs2 solutions.

Kanino ito magiging kapaki-pakinabang para sa:
Magiging kapaki-pakinabang ang tutorial sa mga administrator ng system at sinumang pipili ng paraan ng pagpapatupad ng storage o gustong subukan ang solusyon.

Anong mga desisyon ang tinanggihan natin at bakit?

Kadalasan ay nahaharap tayo sa isang sitwasyon kung saan kailangan nating ipatupad ang nakabahaging storage na may mahusay na pagganap ng read-write sa isang maliit na web cluster. Sinubukan namin ang iba't ibang mga opsyon para sa pagpapatupad ng shared storage para sa aming mga proyekto, ngunit kakaunti ang nakapagbigay sa amin ng kasiyahan sa ilang mga indicator nang sabay-sabay. Ngayon sasabihin namin sa iyo kung bakit.

  • Hindi kami nasiyahan ng Glusterfs sa pagganap ng pagbabasa at pagsulat; may mga problema sa sabay-sabay na pagbabasa ng malaking bilang ng mga file, at nagkaroon ng mataas na pagkarga sa CPU. Ang problema sa pagbabasa ng mga file ay maaaring malutas sa pamamagitan ng pag-access sa mga ito nang direkta mula sa ladrilyo, ngunit ito ay hindi palaging naaangkop at sa pangkalahatan ay hindi tama.

  • Hindi nagustuhan ni Ceph ang labis na pagiging kumplikado, na maaaring makasama sa mga proyekto na may 2-4 na server, lalo na kung ang proyekto ay kasunod na pinananatili. Muli, may mga seryosong limitasyon sa pagganap na pumipilit sa amin na bumuo ng hiwalay na mga kumpol ng imbakan, tulad ng sa mga glusterf.

  • Ang paggamit ng isang server ng NFS upang ipatupad ang nakabahaging imbakan ay nagtataas ng mga katanungan sa mga tuntunin ng pagpapahintulot sa kasalanan.

  • Ang s3 ay isang mahusay na tanyag na solusyon para sa isang tiyak na hanay ng mga gawain, ngunit hindi ito isang file system, na nagpapaliit sa saklaw nito.

  • lsyncd. Kung nasimulan na nating pag-usapan ang tungkol sa "mga non-file system," sulit na pag-usapan ang sikat na solusyong ito. Hindi lamang ito angkop para sa dalawang-daan na palitan (ngunit kung talagang gusto mo, maaari mo), hindi rin ito gumagana nang matatag sa isang malaking bilang ng mga file. Ang isang magandang karagdagan sa buong bagay ay na ito ay single-threaded. Ang dahilan ay nasa arkitektura ng programa: gumagamit ito ng inotify upang subaybayan ang mga bagay sa trabaho, na itinalaga nito sa pagsisimula at sa panahon ng muling pag-scan. rsync ay ginagamit bilang daluyan ng paglipat.

Tutorial: paano mag-deploy ng shared storage batay sa drbd+ocfs2

Isa sa mga pinaka-maginhawang solusyon para sa amin ay ang link ocfs2+drbd. Ngayon ay sasabihin namin sa iyo kung paano mo mabilis na mai-deploy ang nakabahaging storage para sa dalawang server batay sa database ng solusyon. Ngunit una, kaunti tungkol sa mga sangkap:

DRBD - isang sistema ng imbakan mula sa karaniwang pamamahagi ng Linux na nagbibigay-daan sa iyong kopyahin ang data sa pagitan ng mga server sa mga bloke. Ang pangunahing aplikasyon ay upang bumuo ng fault-tolerant na imbakan.

OCFS2 - isang file system na nagbibigay ng nakabahaging paggamit ng parehong storage ng ilang system. Kasama sa pamamahagi ng Linux at isang kernel module at mga tool sa userspace para sa pagtatrabaho sa FS. Maaaring gamitin ang OCFS2 hindi lamang sa DRBD, kundi pati na rin sa iSCSI na may maraming koneksyon. Sa aming halimbawa ginagamit namin ang DRBD.

Ang lahat ng mga aksyon ay ginagawa sa ubuntu server 18.04 sa isang minimal na configuration.

Hakbang 1. I-configure ang DRBD:

Sa file /etc/drbd.d/drbd0.res inilalarawan namin ang aming virtual block device /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;
}
}

panloob na meta-disk β€” gamitin ang parehong mga block device upang mag-imbak ng metadata
device /dev/drbd0 β€” gamitin ang /dev/drbd0 bilang landas patungo sa dami ng drbd.
disk /dev/vdb1 - gamitin ang /dev/vdb1
syncer { rate 1000M; } β€” gumamit ng bandwidth ng gigabit channel
payagan-dalawang-primaries - isang mahalagang opsyon na nagpapahintulot sa mga pagbabago na tanggapin sa dalawang pangunahing server
pagkatapos-sb-0pri, pagkatapos-sb-1pri, pagkatapos-sb-2pri β€” mga opsyon na responsable para sa mga aksyon ng node kapag natukoy ang splitbrain. Higit pang mga detalye ay matatagpuan sa dokumentasyon.
maging-pangunahin-sa pareho β€” itinatakda ang parehong mga node sa pangunahin.

Sa aming kaso, mayroon kaming dalawang ganap na magkaparehong VM, na may nakalaang virtual network na may bandwidth na 10 gigabits.

Sa aming halimbawa, ang mga pangalan ng network ng dalawang cluster node ay drbd1 at drbd2. Para sa tamang operasyon, kailangan mong itugma ang mga pangalan at IP address ng mga host sa /etc/hosts.

10.10.10.192 drbd1
10.10.10.193 drbd2

Hakbang 2. I-set up ang mga node:

Sa parehong mga server kami ay tumatakbo:

drbdadm create-md drbd0

Cluster storage para sa maliliit na web cluster batay sa drbd+ocfs2

modprobe drbd
drbdadm up drbd0
cat /proc/drbd

Nakukuha namin ang sumusunod:

Cluster storage para sa maliliit na web cluster batay sa drbd+ocfs2

Maaari mong simulan ang pag-synchronize. Sa unang node kailangan mong isagawa:

drbdadm primary --force drbd0

Tingnan natin ang status:

cat /proc/drbd

Cluster storage para sa maliliit na web cluster batay sa drbd+ocfs2

Mahusay, nagsimula na ang pag-synchronize. Naghihintay kami hanggang sa katapusan at tingnan ang larawan:

Cluster storage para sa maliliit na web cluster batay sa drbd+ocfs2

Hakbang 3. Simulan ang pag-synchronize sa pangalawang node:

drbdadm primary --force drbd0

Nakukuha namin ang sumusunod:

Cluster storage para sa maliliit na web cluster batay sa drbd+ocfs2

Ngayon ay maaari na tayong sumulat sa drbd mula sa dalawang server.

Hakbang 4. I-install at i-configure ang ocfs2.

Gagamit kami ng medyo maliit na configuration:

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

Kailangan itong isulat sa /etc/ocfs2/cluster.conf sa magkabilang node.

Lumilikha kami ng FS sa drbd0 sa anumang node:

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

Dito lumikha kami ng isang file system na may label na testVol sa drbd0, gamit ang mga default na parameter.

Cluster storage para sa maliliit na web cluster batay sa drbd+ocfs2

Sa /etc/default/o2cb kailangan mong itakda (tulad ng sa aming configuration file)

O2CB_ENABLED=true 
O2CB_BOOTCLUSTER=ocfs2cluster 

at isagawa sa bawat node:

o2cb register-cluster ocfs2cluster

Pagkatapos ay i-on namin at idagdag ang lahat ng mga unit na kailangan naming i-autorun:

systemctl enable drbd o2cb ocfs2
systemctl start drbd o2cb ocfs2

Ang ilan sa mga ito ay tatakbo na sa panahon ng proseso ng pag-setup.

Hakbang 5. Magdagdag ng mga mount point sa fstab sa parehong mga node:

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

Direktoryo /media/shared dapat itong malikha nang maaga.

Dito ginagamit namin ang mga pagpipilian sa noauto, na nangangahulugan na ang file ay hindi mai-mount sa pagsisimula (mas gusto kong i-mount ang mga file ng network sa pamamagitan ng systemd) at heartbeat=local, na nangangahulugang paggamit ng serbisyo ng heartbeat sa bawat node. Mayroon ding pandaigdigang tibok ng puso, na mas angkop para sa malalaking kumpol.

Susunod na maaari mong i-mount /media/shared at suriin ang pag-synchronize ng nilalaman.

Tapos na! Bilang resulta, nakakakuha kami ng mas marami o mas kaunting fault-tolerant na storage na may scalability at disenteng performance.

Pinagmulan: www.habr.com

Magdagdag ng komento