LINSTOR-stokado kaj ĝia integriĝo kun OpenNebula

LINSTOR-stokado kaj ĝia integriĝo kun OpenNebula

Antaŭ nelonge, la uloj de LINBIT prezentis sian novan SDS-solvon - Linstor. Ĉi tio estas tute senpaga stokado bazita sur pruvitaj teknologioj: DRBD, LVM, ZFS. Linstor kombinas simplecon kaj bone desegnitan arkitekturon, kio ebligas al vi atingi stabilecon kaj sufiĉe impresajn rezultojn.

Hodiaŭ mi ŝatus paroli pri ĝi iom pli detale kaj montri kiel facile ĝi povas esti integrita kun OpenNebula uzante linstor_un - nova pelilo, kiun mi evoluigis specife por tiu celo.

Linstor en kombinaĵo kun OpenNebula ebligas al vi konstrui rapidan kaj fidindan nubon, kiu povas esti facile deplojita sur via propra infrastrukturo.

Linstor-arkitekturo

Linstor estas nek dosiersistemo nek bloka stokado en si mem, Linstor estas orkestranto, kiu provizas abstraktan tavolon, kiu ebligas vin aŭtomatigi la kreadon de volumoj en LVM aŭ ZFS kaj reprodukti ilin per DRBD9.

Rompante stereotipojn

Sed atendu, DRBD? — Kial aŭtomatigi ĝin kaj kiel ĝi eĉ povas funkcii?

Ni memoru la pasintecon, kiam DRBD8 estis tre populara. Ĝia norma uzo implikis krei unu grandan blokaparaton kaj tranĉi ĝin en multajn malgrandajn pecojn, uzante la saman LVM. Ia mdadm RAID-1 sed kun reproduktado tra la reto.

Tiu aliro ne estas sen siaj malavantaĝoj, kaj tial, kun la apero de DRBD9, la principoj de stokaddezajno ŝanĝiĝis; nun aparta DRBD-aparato estas kreita por ĉiu virtuala maŝino.

La aliro kun sendependaj blokaj aparatoj permesas pli bonan utiligon de spaco en la areto, kaj ankaŭ aldonas kelkajn pliajn funkciojn. Ekzemple, por ĉiu tia aparato vi povas determini la nombron da kopioj, ilia loko kaj individuaj agordoj. Ili estas facile krei/forigi, preni momentfotojn, regrandigi, ebligi ĉifradon kaj multe pli. Indas noti, ke DRBD9 ankaŭ subtenas kvorumon, kiu ebligas al vi eviti discerbajn situaciojn.

Rimedoj kaj backends

Kreante novan blokan aparaton, Linstor metas la postulatan nombron da kopioj sur malsamaj nodoj en la areto. Ni nomos ĉiun tian kopion DRBD-rimedo.

Estas du specoj de rimedoj:

  • Rimedo de datumoj — estas DRBD-aparato situanta sur nodo en LVM aŭ ZFS-naĝejo.
    Nuntempe ekzistas subteno por pluraj backends kaj ilia nombro konstante kreskas. Estas subteno por LVM, ThinLVM kaj ZFS. La lastaj du permesas krei kaj uzi momentfotojn.
  • Sendiska rimedo — estas DRBD-aparato metita sur nodon sen backend, sed permesanta al ĝi esti traktita kiel regula blokaparato; ĉiuj legado/skribaj operacioj estos redirektitaj al datumresursoj. La plej proksima analogo al sendiskaj rimedoj estas iSCSI LUN.

Ĉiu DRBD-rimedo povas havi ĝis 8 kopiojn, kaj nur unu el ili povas esti aktiva defaŭlte - primaraj, ĉiuj aliaj estos malĉefa kaj ilia uzo estos neebla kondiĉe ke ekzistas almenaŭ unu Primara, tio estas, ili simple reproduktos datumojn inter si.

Instalante DRBD-aparaton en la sistemon, ĝi aŭtomate fariĝas primaraj, tiel eĉ Sendiska rimedo, en DRBD-terminologio, povas esti Ĉefa.

Do kial vi bezonas Linstor?

Fidante ĉiujn resursintensajn taskojn al la kerno, Linstor estas esence regula Java-aplikaĵo, kiu ebligas vin facile aŭtomatigi la kreadon de DRBD-resursoj.
Krome, ĉiu rimedo kreita de li estos sendependa DRBD-areto, kiu funkcias sendepende, sendepende de la stato de la kontrolaviadilo kaj aliaj DRBD-resursoj.

Linstor konsistas el nur du komponentoj:

  • Linstor-regilo - La ĉefa regilo, kiu provizas API por krei kaj administri rimedojn. Ĝi ankaŭ komunikas kun satelitoj, kontrolante la liberan spacon sur ili, kaj sendas taskojn por krei kaj forigi novajn rimedojn. Ĝi funkcias en ununura kazo kaj uzas datumbazon, kiu povas esti aŭ interna (H2) aŭ ekstera (PostgreSQL, MySQL, MariaDB)
  • Linstor-satelito — Instalita sur ĉiuj stokaj nodoj kaj provizas la regilon per informoj pri libera spaco, kaj ankaŭ plenumas taskojn ricevitajn de la regilo por krei kaj forigi novajn volumojn kaj DRBD-aparatojn sur ili.

Linstor funkcias kun la sekvaj ŝlosilaj konceptoj:

  • nodo — fizika servilo sur kiu DRBD-resursoj estos kreitaj kaj uzataj.
  • Stokado Naĝejo — LVM aŭ ZFS-pool kreita sur la nodo en kiu DRBD-resursoj estos lokitaj. Sendiska naĝejo ankaŭ estas ebla - ĉi tio estas naĝejo en kiu nur sendiskaj rimedoj troviĝos.
  • Rimeda Difino — La difino de rimedo estas esence prototipo, kiu priskribas la nomon kaj ĉiujn ĝiajn ecojn.
  • Difino de Volumo — Difino de volumo. Ĉiu rimedo povas konsisti el pluraj volumoj, ĉiu volumo devas havi grandecon.
  • Rimedoj — Kreita kazo de bloka aparato, ĉiu rimedo devas esti metita sur specifan nodon kaj en iu stoka naĝejo.

Linstor-instalado

Mi rekomendas uzi Ubuntu kiel sistemon, ĉar... ekzistas por ŝi preta PPA:

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

Aŭ Debian, kie Linstor povas esti instalita de la oficiala deponejo por 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

regilo

Ĉio estas simpla ĉi tie:

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

Stokaj nodoj

La Linukso-kerno nuntempe liveriĝas kun en-arba kernomodulo DRBD8, bedaŭrinde ĝi ne konvenas al ni kaj ni devas instali DRBD9:

apt-get install drbd-dkms

Kiel praktiko montras, plej multaj malfacilaĵoj aperas ĝuste ĉar la modulo DRBD8 estas ŝarĝita en la sistemon, kaj ne DRBD9. Feliĉe, ĉi tio estas facile kontroli per funkciado:

modprobe drbd
cat /proc/drbd

Se vi vidas versio: 9 - tio signifas, ke ĉio estas en ordo, se versio: 8 - tio signifas, ke io misfunkciis kaj vi devas fari pliajn paŝojn por ekscii la kialojn.

Nun ni instalu linstor-satelito и drbd-utils:

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

Kreu areton

Stokejoj kaj nodoj

Kiel backend ni prenos ThinLVM, ĉar ĝi estas la plej simpla kaj subtenas momentfotojn.
Instali lvm2, se vi ne jam faris tion, ni kreu ThinLVM-poolon sur ĉiuj niaj stokadnodoj:

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

Ĉiuj pliaj agoj povas esti faritaj rekte sur la regilo:

Ni aldonu niajn nodojn:

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

Ni kreu stokejojn:

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

Nun ni kontrolu la kreitajn naĝejojn:

linstor storage-pool list

Se ĉio estas farita ĝuste, tiam ni devus vidi ion kiel:

+------------------------------------------------- ------------------------------------------------- ----+
| StokadoNaĝejo | Nodo | Ŝoforo | PoolName | Senpaga Kapacito | Tuta Kapacito | Subtenas Momentfotojn |
|------------------------------------------------ ------------------------------------------------- ---|
| datumoj | nodo1 | LVM_THIN | drbdpool/thinpool | 64 GiB | 64 GiB | vera |
| datumoj | nodo2 | LVM_THIN | drbdpool/thinpool | 64 GiB | 64 GiB | vera |
| datumoj | nodo3 | LVM_THIN | drbdpool/thinpool | 64 GiB | 64 GiB | vera |
+------------------------------------------------- ------------------------------------------------- ----+

DRBD-resursoj

Nun ni provu krei nian novan DRBD-rimedon:

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

Ni kontrolu la kreitajn rimedojn:

linstor resource list 

+------------------------------------------------- ------------------------------------------------- ---+
| Nodo | Rimedo | StokadoNaĝejo | VolumeNr | MinorNr | DeviceName | Asignita | InUzo | Ŝtato |
|------------------------------------------------ ------------------------------------------------- --|
| nodo1 | myres | datumoj | 0 | 1084 | /dev/drbd1084 | 52 KiB | Neuzata | Ĝisdata |
| nodo2 | myres | datumoj | 0 | 1084 | /dev/drbd1084 | 52 KiB | Neuzata | Ĝisdata |
+------------------------------------------------- ------------------------------------------------- ---+

Bonege! — ni vidas, ke la rimedo estis kreita sur la unuaj du nodoj, ni ankaŭ povas provi krei sendiskan rimedon sur la tria:

linstor resource create --diskless node3 myres

Sur nodoj vi ĉiam trovos ĉi tiun aparaton kiel /dev/drbd1084/dev/drbd/by-res/myres/0

Jen kiel Linstor funkcias, de vi povas ricevi pli da informoj oficiala dokumentaro.

Nun mi rakontos al vi kiel integri ĝin kun OpenNebula

Agordo de OpenNebula

Mi ne tro profundigos la agordan procezon de OpenNebula, ĉar... ĉiuj paŝoj estas detale priskribitaj en oficiala dokumentaro, kiun mi rekomendas al vi kontakti, mi nur rakontos al vi pri la integriĝo de OpenNebula kun Linstor.

linstor_un

Por solvi ĉi tiun problemon, mi skribis mian propran pelilon - linstor_un, ĝi estas nuntempe havebla kiel kromaĵo kaj devas esti instalita aparte.

La tuta instalado estas farita sur la interfacaj OpenNebula-nodoj kaj ne postulas pliajn agojn sur la komputaj nodoj.

Antaŭ ĉio, ni devas certigi, ke ni havas jq и linstor-kliento:

apt-get install jq linstor-client

teamo linstor node list devus montri liston de nodoj. Ĉiuj komputaj nodoj de OpenNebula devas esti aldonitaj al la Linstor-grupo.

Elŝutu kaj instalu la kromprogramon:

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

Nun ni devas aldoni ĝin al la agordo de OpenNebula, por fari tion ni sekvas la simplajn paŝojn priskribitajn tie.

Poste rekomencu OpenNebula:

systemctl restart opennebula

Kaj aldonu niajn datumvendejojn, sistemon:

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

Kaj la bildbutiko:

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 montras la nombron da datumaj kopioj kiuj estos kreitaj por ĉiu nova bildo en OpenNebula.
  • Parametro CLONE_MODE indikas precize kiel bildoj estos klonitaj dum kreado de novaj virtualaj maŝinoj, snapshot — kreos momentfoton de la bildo kaj deplojos virtualan maŝinon de la momentfoto, copy — faros kompletan kopion de la bildo por ĉiu virtuala maŝino.
  • В BRIDGE_LIST Oni rekomendas specifi ĉiujn nodojn, kiuj estos uzataj por plenumi bildajn klonajn operaciojn.

Por kompleta listo de subtenataj parametroj, vidu Legu projekto.

Ĉi tio kompletigas la agordon, nun vi povas elŝuti iun aparaton de la oficiala OpenNebula Foirejo kaj krei virtualajn maŝinojn el ĝi.

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

fonto: www.habr.com

Aldoni komenton