Imbakan ng LINSTOR at ang pagsasama nito sa OpenNebula

Imbakan ng LINSTOR at ang pagsasama nito sa OpenNebula

Hindi nagtagal, ipinakita ng mga lalaki mula sa LINBIT ang kanilang bagong solusyon sa SDS - Linstor. Ito ay isang ganap na libreng storage batay sa mga napatunayang teknolohiya: DRBD, LVM, ZFS. Pinagsasama ng Linstor ang pagiging simple at mahusay na disenyo ng arkitektura, na nagbibigay-daan sa iyo upang makamit ang katatagan at medyo kahanga-hangang mga resulta.

Ngayon gusto kong pag-usapan ito nang kaunti pa at ipakita kung gaano kadali ito maisama sa OpenNebula gamit ang linstor_un - isang bagong driver na partikular kong binuo para sa layuning ito.

Binibigyang-daan ka ng Linstor kasama ang OpenNebula na bumuo ng mabilis at maaasahang ulap na madaling ma-deploy sa sarili mong imprastraktura.

Arkitektura ng Linstor

Ang Linstor ay hindi isang file system o block storage per se, Linstor ay isang orchestrator na nagbibigay ng abstraction layer na nagbibigay-daan sa iyong i-automate ang paglikha ng mga volume sa LVM o ZFS at kopyahin ang mga ito gamit ang DRBD9.

Paglabag sa mga stereotype

Pero teka, DRBD? β€” Bakit ito i-automate at paano ito gagana?

Alalahanin natin ang nakaraan, noong sikat na sikat ang DRBD8. Kasama sa karaniwang paggamit nito ang paglikha ng isang malaking block device at pagputol ito sa maraming maliliit na piraso, gamit ang parehong LVM. Isang uri ng mdadm RAID-1 ngunit may pagtitiklop sa network.

Ang diskarte na ito ay walang mga kakulangan nito, at samakatuwid, sa pagdating ng DRBD9, ang mga prinsipyo ng disenyo ng imbakan ay nagbago; ngayon ang isang hiwalay na aparato ng DRBD ay nilikha para sa bawat virtual machine.

Ang diskarte na may mga independiyenteng block device ay nagbibigay-daan para sa mas mahusay na paggamit ng espasyo sa cluster, at nagdaragdag din ng ilang karagdagang feature. Halimbawa, para sa bawat ganoong device matutukoy mo ang bilang ng mga replika, ang kanilang lokasyon at mga indibidwal na setting. Madali silang likhain/tanggalin, kumuha ng mga snapshot, baguhin ang laki, paganahin ang pag-encrypt at marami pang iba. Kapansin-pansin na sinusuportahan din ng DRBD9 ang quorum, na nagpapahintulot sa iyo na maiwasan ang mga sitwasyon ng split-brain.

Mga mapagkukunan at backend

Kapag gumagawa ng bagong block device, inilalagay ni Linstor ang kinakailangang bilang ng mga replika sa iba't ibang node sa cluster. Tatawagin namin ang bawat naturang replica bilang isang mapagkukunan ng DRBD.

Mayroong dalawang uri ng mga mapagkukunan:

  • Resource ng data β€” ay isang DRBD device na matatagpuan sa isang node sa isang LVM o ZFS pool.
    Sa ngayon ay mayroong suporta para sa ilang mga backend at ang kanilang bilang ay patuloy na lumalaki. Mayroong suporta para sa LVM, ThinLVM at ZFS. Ang huling dalawa ay nagpapahintulot sa iyo na lumikha at gumamit ng mga snapshot.
  • Diskless na mapagkukunan β€” ay isang DRBD device na inilagay sa isang node na walang backend, ngunit pinapayagan itong ituring bilang isang regular na block device; lahat ng mga read/write operation ay ire-redirect sa mga mapagkukunan ng data. Ang pinakamalapit na analogue sa diskless resources ay iSCSI LUN.

Ang bawat mapagkukunan ng DRBD ay maaaring magkaroon ng hanggang 8 replika, at isa lamang sa mga ito ang maaaring maging aktibo bilang default - Pangunahin, lahat ng iba ay magiging Pangalawa at ang kanilang paggamit ay magiging imposible hangga't mayroong kahit isang Pangunahin, iyon ay, sila ay magre-replicate lang ng data sa pagitan nila.

Sa pamamagitan ng pag-install ng DRBD device sa system, awtomatiko itong nagiging Pangunahin, kaya kahit na ang isang Diskless na mapagkukunan, sa terminolohiya ng DRBD, ay maaaring maging Pangunahin.

Kaya bakit kailangan mo ng Linstor?

Sa pamamagitan ng pagtitiwala sa lahat ng mga resource-intensive na gawain sa kernel, ang Linstor ay mahalagang regular na Java application na nagbibigay-daan sa iyong madaling i-automate ang paglikha ng DRBD resources.
Higit pa rito, ang bawat mapagkukunang nilikha niya ay magiging isang independiyenteng DRBD cluster na gumagana nang hiwalay, anuman ang estado ng control-plane at iba pang mapagkukunan ng DRBD.

Binubuo lamang ng dalawang bahagi ang Linstor:

  • Linstor-controller - Ang pangunahing controller, na nagbibigay ng API para sa paglikha at pamamahala ng mga mapagkukunan. Nakikipag-ugnayan din ito sa mga satellite, sinusuri ang libreng espasyo sa mga ito, at nagpapadala ng mga gawain upang lumikha at magtanggal ng mga bagong mapagkukunan. Tumatakbo ito sa isang pagkakataon at gumagamit ng isang database, na maaaring maging panloob (H2) o panlabas (PostgreSQL, MySQL, MariaDB)
  • Linstor-satellite β€” Naka-install sa lahat ng storage node at nagbibigay sa controller ng impormasyon tungkol sa libreng espasyo, at nagsasagawa rin ng mga gawaing natanggap mula sa controller upang lumikha at magtanggal ng mga bagong volume at DRBD device sa ibabaw ng mga ito.

Gumagana ang Linstor sa mga sumusunod na pangunahing konsepto:

  • Node β€” isang pisikal na server kung saan lilikha at gagamitin ang mga mapagkukunan ng DRBD.
  • Pool ng Imbakan β€” LVM o ZFS pool na nilikha sa node kung saan matatagpuan ang mga mapagkukunan ng DRBD. Posible rin ang diskless pool - ito ay isang pool kung saan ang diskless resources lang ang makikita.
  • Kahulugan ng Mapagkukunan β€” Ang kahulugan ng isang mapagkukunan ay mahalagang isang prototype na naglalarawan sa pangalan at lahat ng mga katangian nito.
  • Kahulugan ng Dami β€” Kahulugan ng volume. Ang bawat mapagkukunan ay maaaring binubuo ng maraming volume, ang bawat volume ay dapat may sukat.
  • Mapagkukunan β€” Isang nilikhang instance ng block device, dapat ilagay ang bawat resource sa isang partikular na node at sa ilang storage pool.

Pag-install ng Linstor

Inirerekomenda ko ang paggamit ng Ubuntu bilang isang sistema, dahil... umiiral para sa kanya handa na ang PPA:

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

O Debian, kung saan maaaring mai-install ang Linstor mula sa opisyal na imbakan para sa Proxmox:

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

Magsusupil

Ang lahat ay simple dito:

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

Mga node ng imbakan

Ang Linux kernel ay kasalukuyang nagpapadala ng isang in-tree kernel module DRBD8, sa kasamaang-palad ay hindi ito angkop sa amin at kailangan naming i-install DRBD9:

apt-get install drbd-dkms

Tulad ng ipinapakita sa pagsasanay, ang karamihan sa mga paghihirap ay lumitaw nang tumpak dahil ang DRBD8 module ay na-load sa system, at hindi DRBD9. Sa kabutihang palad, ito ay madaling suriin sa pamamagitan ng pagpapatakbo:

modprobe drbd
cat /proc/drbd

Kung nakikita mo bersyon: 9 - ibig sabihin ay maayos ang lahat kung bersyon: 8 - nangangahulugan ito na may nangyaring mali at kailangan mong gumawa ng mga karagdagang hakbang upang malaman ang mga dahilan.

Ngayon ay i-install natin linstor-satellite ΠΈ drbd-utils:

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

Gumawa ng cluster

Mga storage pool at node

Bilang backend ang kukunin natin ThinLVM, dahil ito ang pinakasimple at sumusuporta sa mga snapshot.
Itakda lvm2, kung hindi mo pa nagagawa, gumawa tayo ng ThinLVM pool sa lahat ng aming mga storage node:

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

Ang lahat ng karagdagang aksyon ay maaaring isagawa nang direkta sa controller:

Idagdag natin ang ating mga node:

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

Gumawa tayo ng mga storage pool:

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

Ngayon suriin natin ang mga nilikhang pool:

linstor storage-pool list

Kung ang lahat ay tapos na nang tama, dapat nating makita ang isang bagay tulad ng:

+------------------------------------------------- ------------------------------------------------- ----+ | StoragePool | Node | Driver | PoolName | LibrengKakayahang | TotalCapacity | Sinusuportahan ang MgaSnapshot | |------------------------------------------------ - ------------------------------------------------- - ---| | data | node1 | LVM_THIN | drbdpool/thinpool | 64 GiB | 64 GiB | totoo | | data | node2 | LVM_THIN | drbdpool/thinpool | 64 GiB | 64 GiB | totoo | | data | node3 | LVM_THIN | drbdpool/thinpool | 64 GiB | 64 GiB | totoo | +------------------------------------------------- ------------------------------------------------- ----+

Mga mapagkukunan ng DRBD

Ngayon subukan nating lumikha ng aming bagong mapagkukunan ng DRBD:

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

Suriin natin ang mga nilikhang mapagkukunan:

linstor resource list 

+------------------------------------------------- ------------------------------------------------- ---+ | Node | Mapagkukunan | StoragePool | VolumeNr | MinorNr | Pangalan ng Device | Inilaan | InUse | Estado | |------------------------------------------------ - ------------------------------------------------- - --| | node1 | myres | data | 0 | 1084 | /dev/drbd1084 | 52 KiB | Hindi nagamit | UpToDate | | node2 | myres | data | 0 | 1084 | /dev/drbd1084 | 52 KiB | Hindi nagamit | UpToDate | +------------------------------------------------- ------------------------------------------------- ---+

Malaki! β€” nakita namin na ang mapagkukunan ay nilikha sa unang dalawang node, maaari rin naming subukang lumikha ng isang diskless na mapagkukunan sa pangatlo:

linstor resource create --diskless node3 myres

Sa mga node palagi mong makikita ang device na ito bilang /dev/drbd1084 o /dev/drbd/by-res/myres/0

Ito ay kung paano gumagana ang Linstor, maaari kang makakuha ng higit pang impormasyon mula sa opisyal na dokumentasyon.

Ngayon sasabihin ko sa iyo kung paano isama ito sa OpenNebula

Pagse-set up ng OpenNebula

Hindi ako lalalim sa proseso ng pag-setup ng OpenNebula, dahil... lahat ng mga hakbang ay inilarawan nang detalyado sa opisyal na dokumentasyon, na inirerekomenda kong makipag-ugnayan ka, sasabihin ko lang sa iyo ang tungkol sa pagsasama ng OpenNebula sa Linstor.

linstor_un

Upang malutas ang problemang ito, sumulat ako ng sarili kong driver - linstor_un, ito ay kasalukuyang magagamit bilang isang plugin at dapat na naka-install nang hiwalay.

Ang buong pag-install ay isinasagawa sa mga frontend na OpenNebula node at hindi nangangailangan ng mga karagdagang aksyon sa mga compute node.

Una sa lahat, kailangan nating tiyakin na mayroon tayo jq ΠΈ linstor-kliyente:

apt-get install jq linstor-client

Koponan linstor node list dapat magpakita ng listahan ng mga node. Ang lahat ng OpenNebula compute node ay dapat idagdag sa Linstor cluster.

I-download at i-install ang plugin:

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

Ngayon ay kailangan nating idagdag ito sa OpenNebula config, para gawin ito, sinusunod natin ang mga simpleng hakbang na inilarawan dito.

Pagkatapos ay i-restart ang OpenNebula:

systemctl restart opennebula

At idagdag ang aming mga datastore, system:

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

At ang tindahan ng imahe:

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

  • Parametro AUTO_PLACE ipinapakita ang bilang ng mga replika ng data na gagawin para sa bawat bagong larawan sa OpenNebula.
  • Parametro CLONE_MODE eksaktong nagpapahiwatig kung paano i-clone ang mga imahe kapag lumilikha ng mga bagong virtual machine, snapshot β€” gagawa ng snapshot ng imahe at magde-deploy ng virtual machine mula sa snapshot, copy β€” gagawa ng kumpletong kopya ng imahe para sa bawat virtual machine.
  • Π’ BRIDGE_LIST Inirerekomenda na tukuyin ang lahat ng mga node na gagamitin upang magsagawa ng mga operasyon sa pag-clone ng imahe.

Para sa kumpletong listahan ng mga sinusuportahang parameter, tingnan README proyekto.

Nakumpleto nito ang pag-setup, maaari ka na ngayong mag-download ng ilang appliance mula sa opisyal OpenNebula Marketplace at lumikha ng mga virtual machine mula dito.

Link ng proyekto:
https://github.com/OpenNebula/addon-linstor_un

Pinagmulan: www.habr.com

Magdagdag ng komento