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 също така поддържа кворум, което избягва ситуации с раздвоен мозък.

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

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

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

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

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

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

Така че защо имаме нужда от Linstor?

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

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

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

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

  • Възел — физически сървър, на който ще се създават и използват DRBD ресурси.
  • Басейн за съхранение - LVM или ZFS пул, създаден на възела, в който ще бъдат поставени DRBD ресурси. Възможен е и бездисков пул - това е пул, в който ще бъдат поставени само бездискови ресурси.
  • дефиниция на ресурса - Дефиниция на ресурс, всъщност това е прототип, който описва името и всички негови свойства.
  • дефиниция на обема — Определяне на обема. Всеки ресурс може да се състои от няколко тома, всеки том трябва да има размер.
  • Средство - Създаден екземпляр на блоково устройство, всеки ресурс трябва да бъде поставен на конкретен възел и в някакъв пул за съхранение.

Инсталиране на 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

Възли за съхранение

Ядрото на Linux в момента се доставя с модул на ядрото в дърво 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

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

+------------------------------------------------ -------------------------------------------------- ----+ | StoragePool | възел | шофьор | име на басейн | свободен капацитет | общ капацитет | Поддържа моментни снимки | |------------------------------------------------ -------------------------------------------------- ----| | данни | възел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 

+------------------------------------------------ -------------------------------------------------- ---+ | възел | ресурс | StoragePool | ТомNr | МалъкNr | Име на устройство | Разпределени | в употреба | състояние | |------------------------------------------------ -------------------------------------------------- ---| | възел1 | myres | данни | 0 | 1084 | /dev/drbd1084 | 52 KiB | Неизползван | Актуално | | възел2 | myres | данни | 0 | 1084 | /dev/drbd1084 | 52 KiB | неизползван | Актуално | +------------------------------------------------ -------------------------------------------------- ---+

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

linstor resource create --diskless node3 myres

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

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

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

Настройване на OpenNebula

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

linstor_un

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

Цялата инсталация се извършва на интерфейсните възли на OpenNebula и не изисква допълнителни действия върху изчислителните възли.

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

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

Добавяне на нов коментар