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
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
aŭ /dev/drbd/by-res/myres/0
Jen kiel Linstor funkcias, de vi povas ricevi pli da informoj
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
linstor_un
Por solvi ĉi tiun problemon, mi skribis mian propran pelilon -
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
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
Ĉi tio kompletigas la agordon, nun vi povas elŝuti iun aparaton de la oficiala
Projekta ligilo:
fonto: www.habr.com