Хранилище LINSTOR и неговата интеграция с OpenNebula

Хранилище LINSTOR и неговата интеграция с OpenNebula

Неотдавна специалистите от LINBIT представиха новото си SDS решение — Linstor. Това е напълно свободно хранилище, което използва проверени технологии: DRBD, LVM, ZFS. Linstor съчетава простота и добре проектирана архитектура, което позволява постигането на стабилност и значителни резултати.

Днес бих искал да разкажа малко повече за него и да покажа колко лесно може да се интегрира с OpenNebula, използвайки linstor_un — нов драйвер, който разработих специално за тази цел.

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

Архитектура на Linstor

Linstor не е нито файловата система, нито блочно хранилище само по себе си; Linstor е оркестратор, който предоставя слой от абстракция, позволяващ автоматизация на създаването на томове в LVM или ZFS и репликация с помощта на DRBD9.

Ломим стереотипите

Но изчакайте, DRBD? — Защо да го автоматизираме и как всъщност това може да работи?

Нека си припомним миналото, когато DRBD8 беше много популярен. Неговото стандартно използване предполага създаването на едно голямо блочно устройство и нарязването му на много малки парченца с помощта на същия LVM. Нещо като mdadm RAID-1, но с репликация по мрежата.

Този подход не е лишен от недостатъци, и поради това с идването на DRBD9 принципите на изграждане на хранилища се промениха; сега за всяка виртуалка се създава отделно DRBD устройство.

Подходът с независими блочни устройства позволява по-добро оползотворяване на пространството в клъстера, а също така добавя редица допълнителни възможности. Например, за всяко такова устройство може да се определя броят на репликите, тяхното местоположение и индивидуални настройки. Те лесно могат да се създават/изтриват, да се правят снимки, да се променя размер, да се включва криптиране и много други функции. Струва си да се отбележи, че DRBD9 също поддържа кворум, който позволява избягването на ситуации на split-brain.

Ресурси и бекенди

При създаването на ново блочно устройство, Linstor разполага необходимото количество реплики на различни нодове в клъстера. Всяка такава реплика ще наричаме DRBD ресурс.

Ресурсите са от два типа:

  • Data ресурс — представляват DRBD устройство, разположено на нода в LVM или ZFS пул.
    В момента има поддръжка на няколко бекенда и техният брой постоянно расте. Поддържат се LVM, ThinLVM и ZFS. Последните две позволяват създаване и използване на моментни снимки.
  • Diskless-ресурс — представлява DRBD-устройство, разположено на възел без бекенд, но позволяващо работа с него като с обикновено блочно устройство; всички операции по четене/писане ще бъдат пренасочени към data-ресурсите. Най-близкият аналог на diskless-ресурсите е iSCSI LUN.

Всеки DRBD-ресурс може да има до 8 реплики и само една от тях може по подразбиране да бъде активна — Primary, всички останали ще бъдат Secondary и тяхното използване ще бъде невъзможно, докато има поне един Primary, т.е. те ще репликират данни помежду си.

Когато монтирате DRBD-устройство в системата, то автоматично става Primary, така че дори Diskless-ресурсът в терминологията на DRBD може да бъде Primary.

И защо е нужен Linstor?

Доверявайки всички ресурсоемки задачи на ядрото, Linstor всъщност представлява обикновено Java-приложение, което позволява лесна автоматизация на създаването на DRBD-ресурси.
При това всеки ресурс, създаден от него, ще представлява независим DRBD-клъстер, който работи самостоятелно, независимо от състоянието на control-plane и другите DRBD-ресурси.

Linstor се състои само от два компонента:

  • Linstor-controller — Основният контролер, който предоставя API за създаване и управление на ресурсите. Той също така комуникира със сателитите, проверявайки наличното пространство при тях, и изпраща задачи за създаване и изтриване на нови ресурси. Стартира се в единичен екземпляр и използва база данни, която може да бъде както вътрешна (H2), така и външна (PostgreSQL, MySQL, MariaDB)
  • Linstor-satellite — Инсталира се на всичките storage-ноди и предоставя информация на контролера за наличното пространство, както и изпълнява задачи, получени от контролера, за създаване и изтриване на нови томове и DRBD-устройства върху тях.

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

  • Узел — физическият сървър, на който ще бъдат създавани и използвани DRBD-ресурси.
  • Storage Pool — LVM или ZFS пул, създаден на възел, в който ще бъдат разположени DRBD-ресурсите. Възможен е и diskless-пул — това е пул, в който ще бъдат разположени само diskless-ресурси.
  • Resource Definition — Определение на ресурса, по същност това е прототип, който описва името и всичките му свойства.
  • Определение на том — Определение на тома. Всеки ресурс може да се състои от няколко тома, всеки том трябва да има размер.
  • Ресурс — Създаден екземпляр на блочно устройство, всеки ресурс трябва да бъде разположен на определена нода и в някакъв storage pool.

Инсталиране на Linstor

Препоръчвам да използвате 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

Storage-ноди

В момента в ядрото на Linux се предлага in-tree модул на ядрото DRBD8, за съжаление той не е подходящ и трябва да инсталираме DRBD9:

apt-get install drbd-dkms

Както показва практиката, много от трудностите възникват именно с това, че в системата е зареден модул DRBD8, а не DRBD9. За щастие това лесно може да се провери с изпълнението на:

modprobe drbd
cat /proc/drbd

Ако видите версия: 9 — значи всичко е наред, ако версия: 8 — значи нещо не е наред и трябва да предприемете допълнителни действия за изясняване на причините.

Сега ще инсталираме linstor-satellite и drbd-utils:

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

Създаване на клъстър

Storage pools и ноди

Като бекенд ще вземем ThinLVM, тъй като той е най-простият и поддържа снимки.
Установете lvm2, ако все още не сте го направили и нека създадем ThinLVM pool на всички наши storage-ноди:

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

Създадем storage pools:

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

Ако всичко е направено правилно, трябва да видим нещо от рода на:

+-------------------------------------------------------------------------------------------------------+
| StoragePool | Node  | Driver   | PoolName          | FreeCapacity | TotalCapacity | SupportsSnapshots |
|-------------------------------------------------------------------------------------------------------|
| data        | node1 | LVM_THIN | drbdpool/thinpool |       64 GiB |        64 GiB | true              |
| data        | node2 | LVM_THIN | drbdpool/thinpool |       64 GiB |        64 GiB | true              |
| data        | node3 | LVM_THIN | drbdpool/thinpool |       64 GiB |        64 GiB | true              |
+-------------------------------------------------------------------------------------------------------+

DRBD ресурси

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

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

Нека проверим създадените ресурси:

linstor resource list 

+------------------------------------------------------------------------------------------------------+
| Node  | Resource | StoragePool | VolumeNr | MinorNr | DeviceName    | Allocated  | InUse  |    State |
|------------------------------------------------------------------------------------------------------|
| node1 | myres    | data        | 0        | 1084    | /dev/drbd1084 | 52 KiB     | Unused | UpToDate |
| node2 | myres    | data        | 0        | 1084    | /dev/drbd1084 | 52 KiB     | Unused | UpToDate |
+------------------------------------------------------------------------------------------------------+

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

linstor resource create --diskless node3 myres

На нодите винаги ще намерите това устройство като /dev/drbd1084 или /dev/drbd/by-res/myres/0

Така работи Linstor, можете да получите допълнителна информация от официалната документация.

Сега ще разкажа как да го интегрираме с OpenNebula

Настройка на OpenNebula

Няма да се задълбочавам в процеса на настройка на OpenNebula, тъй като всички стъпки са подробно описани в официалната документация, на която ви препоръчвам да се обърнете, ще говоря само за интеграцията на OpenNebula с Linstor.

linstor_un

За решаването на тази задача написах собствен драйвер — linstor_un, в момента той е наличен като плъгин и трябва да се инсталира отделно.

Цялата инсталация се извършва на frontend OpenNebula нодите и не изисква допълнителни действия на compute нодите.

Първото нещо, което трябва да направим, е да се уверим, че имаме jq и linstor-client:

apt-get install jq linstor-client

Екип linstor node list трябва да извежда списък на нодите. Всички compute ноди на 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

И ще добавим нашите datastores, системно:

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 показва броя на data-рекпликите, които ще бъдат създадени за всеки нов образ в OpenNebula.
  • Параметър CLONE_MODE определя как точно ще се клонират образите при създаване на нови виртуални машини, snapshot — ще създава snapshot на образа и от snapshot-а ще разгръща виртуална машина, copy — ще прави пълна копия на образа за всяка виртуална машина.
  • В BRIDGE_LIST препоръчва се да посочите всички нодове, които ще се използват за извършване на операции по клониране на образи.

Пълният списък на поддържаните параметри е приведен в README проектa.

С това настройката е завършена, сега можете да заредите някои appliance от официалния OpenNebula Marketplace и да създадете виртуални машини от него.

Връзка към проекта:
https://github.com/OpenNebula/addon-linstor_un

Източник: habr.com

Купете надежден хостинг за сайтове със защита от DDoS, VPS и VDS сървъри 🔥 Купете надежден хостинг за сайтове със защита от DDoS, VPS и VDS сървъри | ProHoster