LINSTOR krātuve un tās integrācija ar OpenNebula

LINSTOR krātuve un tās integrācija ar OpenNebula

Pirms neilga laika puiÅ”i no LINBIT prezentēja savu jauno SDS risinājumu - Linstor. Å Ä« ir pilnÄ«gi bezmaksas krātuve, kuras pamatā ir pārbaudÄ«tas tehnoloÄ£ijas: DRBD, LVM, ZFS. Linstor apvieno vienkārŔību un labi izstrādātu arhitektÅ«ru, kas ļauj sasniegt stabilitāti un diezgan iespaidÄ«gus rezultātus.

Å odien es vēlētos par to runāt nedaudz sÄ«kāk un parādÄ«t, cik viegli to var integrēt ar OpenNebula, izmantojot linstor_un - jaunu draiveri, kuru es izstrādāju Ä«paÅ”i Å”im nolÅ«kam.

Linstor apvienojumā ar OpenNebula ļauj izveidot ātru un uzticamu mākoni, ko var viegli izvietot savā infrastruktūrā.

Linstor arhitektūra

Linstor pati par sevi nav ne failu sistēma, ne bloku krātuve, Linstor ir orÄ·estrētājs, kas nodroÅ”ina abstrakcijas slāni, kas ļauj automatizēt sējumu izveidi LVM vai ZFS un replicēt tos, izmantojot DRBD9.

Stereotipu lauŔana

Bet pagaidi, DRBD? ā€” Kāpēc to automatizēt un kā tas vispār var darboties?

Atcerēsimies pagātni, kad DRBD8 bija ļoti populārs. Tās standarta izmantoÅ”ana ietvēra vienas lielas bloka ierÄ«ces izveidi un sagrieÅ”anu daudzos mazos gabalos, izmantojot to paÅ”u LVM. Sava veida mdadm RAID-1, bet ar replikāciju tÄ«klā.

Å Ä« pieeja nav bez trÅ«kumiem, un tāpēc lÄ«dz ar DRBD9 parādÄ«Å”anos ir mainÄ«juÅ”ies krātuves dizaina principi, tagad katrai virtuālajai maŔīnai tiek izveidota atseviŔķa DRBD ierÄ«ce.

Pieeja ar neatkarÄ«gām bloku ierÄ«cēm ļauj labāk izmantot vietu klasterÄ«, kā arÄ« pievieno vairākas papildu funkcijas. Piemēram, katrai Ŕādai ierÄ«cei varat noteikt kopiju skaitu, to atraÅ”anās vietu un individuālos iestatÄ«jumus. Tos ir viegli izveidot/dzēst, uzņemt momentuzņēmumus, mainÄ«t izmērus, iespējot Å”ifrÄ“Å”anu un daudz ko citu. Ir vērts atzÄ«mēt, ka DRBD9 atbalsta arÄ« kvorumu, kas ļauj izvairÄ«ties no situācijām, kad smadzenes ir sadalÄ«tas.

Resursi un aizmugursistēmas

Izveidojot jaunu blokierÄ«ci, Linstor izvieto nepiecieÅ”amo kopiju skaitu dažādos klastera mezglos. Katru Ŕādu kopiju mēs sauksim par DRBD resursu.

Ir divu veidu resursi:

  • Datu resurss ā€” ir DRBD ierÄ«ce, kas atrodas LVM vai ZFS pÅ«la mezglā.
    Å obrÄ«d atbalsts tiek nodroÅ”ināts vairākiem backendiem, un to skaits nepārtraukti pieaug. Ir atbalsts LVM, ThinLVM un ZFS. Pēdējie divi ļauj izveidot un izmantot momentuzņēmumus.
  • Bezdiska resurss ā€” ir DRBD ierÄ«ce, kas novietota mezglā bez aizmugursistēmas, bet ļauj to uzskatÄ«t par parastu blokierÄ«ci; visas lasÄ«Å”anas/rakstÄ«Å”anas darbÄ«bas tiks novirzÄ«tas uz datu resursiem. Tuvākais analogs bezdiska resursiem ir iSCSI LUN.

Katram DRBD resursam var bÅ«t lÄ«dz 8 replikām, un tikai viena no tām var bÅ«t aktÄ«va pēc noklusējuma - Galvenais, visi pārējie bÅ«s Sekundārs un to izmantoÅ”ana nebÅ«s iespējama, ja vien bÅ«s vismaz viens primārais, tas ir, viņi vienkārÅ”i replicēs datus savā starpā.

Instalējot DRBD ierīci sistēmā, tā automātiski kļūst Galvenais, tādējādi pat bezdiska resurss DRBD terminoloģijā var būt primārais.

Tātad, kāpēc jums ir nepiecieÅ”ams Linstor?

Uzticot kodolam visus resursietilpīgos uzdevumus, Linstor būtībā ir parasta Java lietojumprogramma, kas ļauj viegli automatizēt DRBD resursu izveidi.
Turklāt katrs viņa radītais resurss būs neatkarīgs DRBD klasteris, kas darbojas neatkarīgi, neatkarīgi no vadības plaknes un citu DRBD resursu stāvokļa.

Linstor sastāv tikai no divām sastāvdaļām:

  • Linstor-kontrolieris - Galvenais kontrolieris, kas nodroÅ”ina API resursu izveidei un pārvaldÄ«bai. Tas arÄ« sazinās ar satelÄ«tiem, pārbaudot tajos esoÅ”o brÄ«vo vietu un nosÅ«ta uzdevumus jaunu resursu izveidei un dzÄ“Å”anai. Tas darbojas vienā instancē un izmanto datu bāzi, kas var bÅ«t iekŔēja (H2) vai ārēja (PostgreSQL, MySQL, MariaDB).
  • Linstor-satelÄ«ts ā€” Instalēts visos krātuves mezglos un nodroÅ”ina kontrolierim informāciju par brÄ«vo vietu, kā arÄ« veic no kontrollera saņemtos uzdevumus, lai izveidotu un dzēstu jaunus sējumus un DRBD ierÄ«ces virs tiem.

Linstor darbojas ar Ŕādiem galvenajiem jēdzieniem:

  • mezgls ā€” fizisks serveris, kurā tiks izveidoti un izmantoti DRBD resursi.
  • UzglabāŔanas baseins ā€” LVM vai ZFS pÅ«ls, kas izveidots mezglā, kurā atradÄ«sies DRBD resursi. Ir iespējams arÄ« bezdisku pÅ«ls - tas ir pÅ«ls, kurā atradÄ«sies tikai bezdiska resursi.
  • Resursa definÄ«cija ā€” Resursa definÄ«cija bÅ«tÄ«bā ir prototips, kas apraksta nosaukumu un visas tā Ä«paŔības.
  • Skaļuma definÄ«cija ā€” apjoma definÄ«cija. Katrs resurss var sastāvēt no vairākiem sējumiem, katram sējumam ir jābÅ«t noteiktam izmēram.
  • Resursi ā€” Izveidots blokierÄ«ces gadÄ«jums, katrs resurss ir jānovieto noteiktā mezglā un kādā krātuves pÅ«lā.

Linstor uzstādīŔana

Iesaku izmantot Ubuntu kā sistēmu, jo... viņai pastāv gatavs PPA:

add-apt-repository ppa:linbit/linbit-drbd9-stack
apt-get update

Vai Debian, kur Linstor var instalēt no oficiālās Proxmox repozitorija:

wget -O- https://packages.linbit.com/package-signing-pubkey.asc | apt-key add -
PVERS=5 && echo "deb http://packages.linbit.com/proxmox/ proxmox-$PVERS drbd-9.0" > 
    /etc/apt/sources.list.d/linbit.list
apt-get update

kontrolieris

Viss Ŕeit ir vienkārŔs:

apt-get install linstor-controller linstor-client
systemctl enable linstor-controller
systemctl start linstor-controller

UzglabāŔanas mezgli

Linux kodols paÅ”laik tiek piegādāts ar kokā iebÅ«vētu kodola moduli DRBD8, diemžēl tas mums neder un mums ir jāinstalē DRBD9:

apt-get install drbd-dkms

Kā liecina prakse, lielākā daļa grÅ«tÄ«bu rodas tieÅ”i tāpēc, ka sistēmā tiek ielādēts DRBD8 modulis, nevis DRBD9. Par laimi to ir viegli pārbaudÄ«t, palaižot:

modprobe drbd
cat /proc/drbd

Ja redzat versija: 9 - tas nozīmē, ka viss ir kārtībā, ja versija: 8 - tas nozīmē, ka kaut kas nogāja greizi, un jums ir jāveic papildu darbības, lai noskaidrotu iemeslus.

Tagad instalēsim linstor-satelÄ«ts Šø drbd-utils:

apt-get install linstor-satellite drbd-utils
systemctl enable linstor-satellite
systemctl start linstor-satellite

Izveidojiet kopu

UzglabāŔanas baseini un mezgli

Kā aizmuguri mēs ņemsim ThinLVM, jo tas ir vienkārŔākais un atbalsta momentuzņēmumus.
Komplekts lvm2, ja vēl neesat to izdarījis, izveidosim ThinLVM pūlu visos mūsu krātuves mezglos:

sudo vgcreate drbdpool /dev/sdb
sudo lvcreate -L 800G -T drbdpool/thinpool

Visas turpmākās darbības var veikt tieŔi uz kontroliera:

Pievienosim savus mezglus:

linstor node create node1 127.0.0.11
linstor node create node2 127.0.0.12
linstor node create node3 127.0.0.13

Izveidosim krātuves baseinus:

linstor storage-pool create lvmthin node1 data drbdpool/thinpool
linstor storage-pool create lvmthin node2 data drbdpool/thinpool
linstor storage-pool create lvmthin node3 data drbdpool/thinpool

Tagad pārbaudīsim izveidotos baseinus:

linstor storage-pool list

Ja viss ir izdarīts pareizi, mums vajadzētu redzēt kaut ko līdzīgu:

+-------------------------------------------------- -------------------------------------------------- ----+ | StoragePool | Mezgls | Šoferis | PoolName | FreeCapacity | Kopējā jauda | Atbalsta momentuzņēmumus | |------------------------------------------------- - -------------------------------------------------- ---| | dati | mezgls1 | LVM_THIN | drbdpool/thinpool | 64 GiB | 64 GiB | taisnība | | dati | mezgls2 | LVM_THIN | drbdpool/thinpool | 64 GiB | 64 GiB | taisnība | | dati | mezgls3 | LVM_THIN | drbdpool/thinpool | 64 GiB | 64 GiB | taisnība | +-------------------------------------------------- -------------------------------------------------- ----+

DRBD resursi

Tagad mēģināsim izveidot mūsu jauno DRBD resursu:

linstor resource-definition create myres
linstor volume-definition create myres 1G
linstor resource create myres --auto-place 2

Pārbaudīsim izveidotos resursus:

linstor resource list 

+-------------------------------------------------- -------------------------------------------------- ---+ | Mezgls | Resurss | StoragePool | TilpumsNr | MinorNr | Ierīces nosaukums | PieŔķirts | InUse | valsts | |------------------------------------------------- - -------------------------------------------------- --| | mezgls1 | miras | dati | 0 | 1084 | /dev/drbd1084 | 52 KiB | Nelietots | Atjaunināts | | mezgls2 | miras | dati | 0 | 1084 | /dev/drbd1084 | 52 KiB | Nelietots | Atjaunināts | +-------------------------------------------------- -------------------------------------------------- ---+

Lieliski! ā€” mēs redzam, ka resurss tika izveidots pirmajos divos mezglos, mēs varam arÄ« mēģināt izveidot bezdiska resursu treÅ”ajā:

linstor resource create --diskless node3 myres

Uz mezgliem jÅ«s vienmēr atradÄ«sit Å”o ierÄ«ci kā /dev/drbd1084 vai /dev/drbd/by-res/myres/0

Linstor darbojas Ŕādi, vairāk informācijas varat iegūt no oficiālā dokumentācija.

Tagad es jums pastāstÄ«Å”u, kā to integrēt ar OpenNebula

OpenNebula iestatīŔana

Es pārāk neiedziļināŔos OpenNebula iestatīŔanas procesā, jo... Visas darbības ir sīki aprakstītas oficiālā dokumentācija, ar kuru iesaku sazināties, pastāstīŔu tikai par OpenNebula integrāciju ar Linstor.

linstor_un

Lai atrisinātu Å”o problēmu, es uzrakstÄ«ju savu draiveri - linstor_un, tas paÅ”laik ir pieejams kā spraudnis un ir jāinstalē atseviŔķi.

Visa instalÄ“Å”ana tiek veikta priekÅ”gala OpenNebula mezglos, un tai nav nepiecieÅ”amas papildu darbÄ«bas skaitļoÅ”anas mezglos.

Pirmkārt, mums ir jāpārliecinās, ka mums ir jq Šø linstor-klients:

apt-get install jq linstor-client

Komanda linstor node list jāparāda mezglu saraksts. Visi OpenNebula skaitļoŔanas mezgli ir jāpievieno Linstor klasterim.

Lejupielādējiet un instalējiet spraudni:

curl -L https://github.com/OpenNebula/addon-linstor_un/archive/master.tar.gz | tar -xzvf - -C /tmp

mv /tmp/addon-linstor_un-master/vmm/kvm/* /var/lib/one/remotes/vmm/kvm/

mkdir -p /var/lib/one/remotes/etc/datastore/linstor_un
mv /tmp/addon-linstor_un-master/datastore/linstor_un/linstor_un.conf /var/lib/one/remotes/etc/datastore/linstor_un/linstor_un.conf

mv /tmp/addon-linstor_un-master/datastore/linstor_un /var/lib/one/remotes/datastore/linstor_un
mv /tmp/addon-linstor_un-master/tm/linstor_un /var/lib/one/remotes/tm/linstor_un

rm -rf /tmp/addon-linstor_un-master

Tagad mums tas jāpievieno OpenNebula konfigurācijai, lai to izdarītu, izpildām aprakstītās vienkārŔās darbības Ŕeit.

Pēc tam restartējiet OpenNebula:

systemctl restart opennebula

Un pievienojiet mūsu datu krātuves, sistēmu:

cat > system-ds.conf <<EOT
NAME="linstor-system"
TYPE="SYSTEM_DS"
STORAGE_POOL="data"
AUTO_PLACE="2"
CLONE_MODE="snapshot"
CHECKPOINT_AUTO_PLACE="1"
BRIDGE_LIST="node1 node2 node3"
TM_MAD="linstor_un"
EOT

onedatastore create system-ds.conf

Un attēlu veikals:

cat > images-ds.conf <<EOT
NAME="linstor-images"
TYPE="IMAGE_DS"
STORAGE_POOL="data"
AUTO_PLACE="2"
BRIDGE_LIST="node1 node2 node3"
DISK_TYPE="BLOCK"
DS_MAD="linstor_un"
TM_MAD="linstor_un"
EOT

onedatastore create images-ds.conf

  • Parametrs AUTO_PLACE parāda datu repliku skaitu, kas tiks izveidots katram jaunam attēlam programmā OpenNebula.
  • Parametrs CLONE_MODE precÄ«zi norāda, kā attēli tiks klonēti, veidojot jaunas virtuālās maŔīnas, snapshot ā€” izveidos attēla momentuzņēmumu un izvietos virtuālo maŔīnu no momentuzņēmuma, copy ā€” izveidos pilnu attēla kopiju katrai virtuālajai maŔīnai.
  • Š’ BRIDGE_LIST Ieteicams norādÄ«t visus mezglus, kas tiks izmantoti attēlu klonÄ“Å”anas darbÄ«bu veikÅ”anai.

Pilnu atbalstīto parametru sarakstu skatiet sadaļā README projektu.

Tas pabeidz iestatÄ«Å”anu, tagad varat lejupielādēt kādu ierÄ«ci no oficiālā OpenNebula tirgus laukums un izveidojiet no tā virtuālās maŔīnas.

Projekta saite:
https://github.com/OpenNebula/addon-linstor_un

Avots: www.habr.com

Pievieno komentāru