Складирање LINSTOR и негова интеграција со OpenNebula

Складирање LINSTOR и негова интеграција со OpenNebula

Не така одамна момците од LINBIT го претставија своето ново SDS решение - Linstor. Ова е целосно бесплатно складирање базирано на докажани технологии: DRBD, LVM, ZFS. Linstor комбинира едноставност и добро дизајнирана архитектура, што ви овозможува да постигнете стабилност и доста импресивни резултати.

Денес би сакал да зборувам за тоа малку подетално и да покажам колку лесно може да се интегрира со OpenNebula користејќи linstor_un - нов драјвер што го развив специјално за оваа намена.

Linstor во комбинација со OpenNebula ви овозможува да изградите брз и сигурен облак што може лесно да се распореди на вашата сопствена инфраструктура.

Архитектура на Линстор

Linstor не е ниту датотечен систем, ниту блок складирање сам по себе, Linstor е оркестратор кој обезбедува слој за апстракција што ви овозможува да го автоматизирате создавањето томови во LVM или ZFS и да ги реплицирате користејќи DRBD9.

Кршење стереотипи

Но, чекај, ДРБД? — Зошто да го автоматизирате и како воопшто може да работи?

Да се ​​потсетиме на минатото, кога DRBD8 беше многу популарен. Неговата стандардна употреба вклучуваше создавање на еден голем блок уред и негово сечење на многу мали парчиња, користејќи го истиот LVM. Еден вид mdadm RAID-1, но со репликација преку мрежата.

Овој пристап не е без свои недостатоци, и затоа, со доаѓањето на DRBD9, принципите на дизајнот на складирање се сменија; сега се создава посебен уред DRBD за секоја виртуелна машина.

Пристапот со независни блок уреди овозможува подобро искористување на просторот во кластерот, а исто така додава голем број дополнителни функции. На пример, за секој таков уред можете да го одредите бројот на реплики, нивната локација и индивидуалните поставки. Лесно се креираат/бришат, прават снимки, менуваат големина, овозможуваат шифрирање и многу повеќе. Вреди да се напомене дека DRBD9 исто така поддржува кворум, што ви овозможува да избегнете ситуации со поделен мозок.

Ресурси и позадини

Кога креирате нов блок уред, Linstor го поставува потребниот број на реплики на различни јазли во кластерот. Секоја таква реплика ќе ја наречеме DRBD ресурс.

Постојат два вида ресурси:

  • Ресурс на податоци — се DRBD уред лоциран на јазол во базен LVM или ZFS.
    Во моментов има поддршка за неколку backends и нивниот број постојано расте. Има поддршка за LVM, ThinLVM и ZFS. Последните две ви дозволуваат да креирате и користите снимки.
  • Ресурс без диск — е DRBD уред поставен на јазол без заднина, но дозволува да се третира како обичен блок уред; сите операции за читање/запишување ќе бидат пренасочени кон ресурсите на податоци. Најблискиот аналог на ресурсите без диск е iSCSI LUN.

Секој DRBD ресурс може да има до 8 реплики, а само една од нив може да биде стандардно активна - Примарна, сите други ќе бидат Средно и нивната употреба ќе биде невозможна се додека има барем еден Примарен, односно тие едноставно ќе реплицираат податоци меѓу себе.

Со инсталирање на уред DRBD во системот, тој автоматски станува Примарна, така што дури и ресурсот без диск, во терминологијата DRBD, може да биде примарен.

Па, зошто ви треба Линстор?

Со доверување на сите задачи со интензивни ресурси на кернелот, Linstor во суштина е редовна Java апликација која ви овозможува лесно да го автоматизирате создавањето на DRBD ресурси.
Покрај тоа, секој ресурс создаден од него ќе биде независен кластер на DRBD кој работи независно, без оглед на состојбата на контролната рамнина и другите ресурси на DRBD.

Линстор се состои од само две компоненти:

  • Линстор-контролер - Главниот контролер, кој обезбедува API за креирање и управување со ресурси. Исто така, комуницира со сателити, проверувајќи го слободниот простор на нив и испраќа задачи за создавање и бришење нови ресурси. Работи во еден пример и користи база на податоци, која може да биде внатрешна (H2) или надворешна (PostgreSQL, MySQL, MariaDB)
  • Линстор-сателит — Инсталиран на сите јазли за складирање и му обезбедува на контролорот информации за слободен простор, а исто така врши задачи добиени од контролорот за создавање и бришење нови томови и уреди DRBD над нив.

Linstor работи со следниве клучни концепти:

  • Јазол — физички сервер на кој ќе се креираат и користат ресурсите на DRBD.
  • Базен за складирање — LVM или ZFS базен создаден на јазолот во кој ќе се наоѓаат ресурсите на DRBD. Можен е и базен без диск - ова е базен во кој ќе се наоѓаат само ресурси без диск.
  • Дефиниција на ресурси — Дефиницијата за ресурс во суштина е прототип што го опишува името и сите негови својства.
  • Дефиниција на волумен - Дефиниција на волумен. Секој ресурс може да се состои од повеќе тома, секој том мора да има големина.
  • Ресурс - Создаден пример на блок уред, секој ресурс мора да биде поставен на одреден јазол и во одреден базен за складирање.

Инсталација на Линстор

Препорачувам користење на Ubuntu како систем, бидејќи ... постои за неа подготвена PPA:

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

Или Debian, каде што Linstor може да се инсталира од официјалното складиште за 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

Контролер

Сè е едноставно тука:

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

Јазли за складирање

Линукс кернелот моментално се испорачува со модул за јадро во дрво DRBD8, за жал не ни одговара и треба да инсталираме DRBD9:

apt-get install drbd-dkms

Како што покажува практиката, повеќето тешкотии се јавуваат токму затоа што модулот DRBD8 е вчитан во системот, а не DRBD9. За среќа, ова е лесно да се провери со трчање:

modprobe drbd
cat /proc/drbd

Ако видите верзија: 9 - тоа значи дека се е во ред ако верзија: 8 - тоа значи дека нешто тргна наопаку и треба да преземете дополнителни чекори за да ги дознаете причините.

Сега ајде да инсталираме линстор-сателит и drbd-utils:

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

Направете кластер

Базени и јазли за складирање

Како заднина ќе земеме ThinLVM, бидејќи тој е наједноставен и поддржува снимки.
Намести lvm2, ако веќе не сте го направиле тоа, ајде да создадеме ThinLVM базен на сите наши јазли за складирање:

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

Сите понатамошни дејства може да се извршат директно на контролорот:

Ајде да ги додадеме нашите јазли:

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

Ајде да создадеме базени за складирање:

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

Сега да ги провериме создадените базени:

linstor storage-pool list

Ако сè е направено правилно, тогаш треба да видиме нешто како:

+------------------------------------------------- ------------------------------------------------- ----+
| Базен за складирање | Јазол | Возач | Име на базен | Слободен капацитет | Вкупен капацитет | Поддржува Снимки |
|------------------------------------------------ ------------------------------------------------- ---|
| податоци | јазол 1 | LVM_THIN | drbdpool/thinpool | 64 GiB | 64 GiB | точно |
| податоци | јазол2 | LVM_THIN | drbdpool/thinpool | 64 GiB | 64 GiB | точно |
| податоци | јазол 3 | LVM_THIN | drbdpool/thinpool | 64 GiB | 64 GiB | точно |
+------------------------------------------------- ------------------------------------------------- ----+

DRBD ресурси

Сега да се обидеме да го создадеме нашиот нов DRBD ресурс:

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

Ајде да ги провериме создадените ресурси:

linstor resource list 

+------------------------------------------------- ------------------------------------------------- ---+
| Јазол | Ресурс | Базен за складирање | Том бр | Мала бр. | Име на уред | Доделени | InUse | Држава |
|------------------------------------------------ ------------------------------------------------- --|
| јазол 1 | myres | податоци | 0 | 1084 | /dev/drbd1084 | 52 KiB | Неискористени | UpToDate |
| јазол2 | myres | податоци | 0 | 1084 | /dev/drbd1084 | 52 KiB | Неискористени | UpToDate |
+------------------------------------------------- ------------------------------------------------- ---+

Одлично! — гледаме дека ресурсот е создаден на првите два јазли, исто така можеме да се обидеме да создадеме ресурс без диск на третиот:

linstor resource create --diskless node3 myres

На јазлите секогаш ќе го најдете овој уред како /dev/drbd1084 или /dev/drbd/by-res/myres/0

Вака функционира Линстор, од каде можете да добиете повеќе информации официјална документација.

Сега ќе ви кажам како да го интегрирате со OpenNebula

Поставување OpenNebula

Нема да навлегувам многу длабоко во процесот на поставување на OpenNebula, бидејќи ... сите чекори се детално опишани во официјална документација, кој ви препорачувам да го контактирате, ќе ви кажам само за интеграцијата на OpenNebula со Linstor.

linstor_un

За да го решам овој проблем, напишав свој возач - linstor_un, моментално е достапен како додаток и мора да се инсталира посебно.

Целата инсталација се изведува на предниот дел OpenNebula јазли и не бара дополнителни дејства на пресметковните јазли.

Пред сè, треба да се увериме дека имаме jq и линстор-клиент:

apt-get install jq linstor-client

Тим linstor node list треба да прикаже листа на јазли. Сите пресметковни јазли на OpenNebula мора да се додадат во кластерот Linstor.

Преземете и инсталирајте го приклучокот:

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

Сега треба да го додадеме во конфигурацијата OpenNebula, за да го направиме тоа ги следиме едноставните чекори опишани тука.

Потоа рестартирајте ја OpenNebula:

systemctl restart opennebula

И додајте ги нашите складишта на податоци, систем:

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

И продавницата за слики:

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

  • Параметар AUTO_PLACE го прикажува бројот на реплики на податоци што ќе се креираат за секоја нова слика во OpenNebula.
  • Параметар CLONE_MODE означува точно како ќе се клонираат сликите при креирање на нови виртуелни машини, snapshot — ќе создаде слика од сликата и ќе распореди виртуелна машина од снимката, copy — ќе направи целосна копија од сликата за секоја виртуелна машина.
  • В BRIDGE_LIST Се препорачува да се наведат сите јазли кои ќе се користат за извршување на операции за клонирање на слики.

За целосна листа на поддржани параметри, видете README проект.

Ова го комплетира поставувањето, сега можете да преземете некој уред од официјалниот OpenNebula Marketplace и креирајте виртуелни машини од него.

Линк од проектот:
https://github.com/OpenNebula/addon-linstor_un

Извор: www.habr.com

Додадете коментар