ذخیره سازی LINSTOR و ادغام آن با OpenNebula

ذخیره سازی LINSTOR و ادغام آن با OpenNebula

چندی پیش، بچه های LINBIT راه حل جدید SDS خود - Linstor را ارائه کردند. این یک فضای ذخیره‌سازی کاملاً رایگان بر اساس فناوری‌های اثبات شده است: DRBD، LVM، ZFS. Linstor سادگی و معماری خوب طراحی شده را ترکیب می کند که به شما امکان می دهد به ثبات و نتایج کاملاً چشمگیر دست یابید.

امروز می‌خواهم کمی بیشتر در مورد آن صحبت کنم و نشان دهم که چگونه می‌توان آن را با OpenNebula با استفاده از linstor_un ادغام کرد - یک درایور جدید که من به طور خاص برای این منظور توسعه داده‌ام.

Linstor در ترکیب با OpenNebula به شما امکان می دهد یک ابر سریع و قابل اعتماد بسازید که می تواند به راحتی در زیرساخت خود مستقر شود.

معماری لینستور

لینستور به خودی خود نه یک سیستم فایل است و نه ذخیره سازی بلوکی، لینستور یک ارکستراتور است که یک لایه انتزاعی برای ایجاد خودکار حجم ها در LVM یا ZFS و تکرار آنها با استفاده از DRBD9 فراهم می کند.

شکستن کلیشه ها

اما صبر کنید، DRBD؟ - چرا آن را خودکار کنیم و اصلاً چگونه می تواند کار کند؟

بیایید گذشته را به یاد بیاوریم که DRBD8 بسیار محبوب بود. استفاده استاندارد آن به معنای ایجاد یک دستگاه بلوک بزرگ و برش آن به قطعات کوچک بسیاری با استفاده از همان LVM بود. نوعی mdadm RAID-1 اما با تکرار شبکه.

این رویکرد خالی از اشکال نیست و بنابراین با ظهور DRBD9، اصول ساخت ذخیره سازی تغییر کرده است، اکنون یک دستگاه DRBD جداگانه برای هر ماشین مجازی ایجاد می شود.

رویکرد دستگاه بلوک مستقل امکان استفاده بهتر از فضا را در خوشه فراهم می کند و همچنین تعدادی ویژگی اضافی را اضافه می کند. به عنوان مثال، برای هر یک از این دستگاه ها، می توانید تعداد ماکت ها، مکان آنها و تنظیمات فردی را تعیین کنید. ایجاد/حذف، گرفتن عکس فوری، تغییر اندازه، فعال کردن رمزگذاری و موارد دیگر آسان است. شایان ذکر است که DRBD9 نیز حد نصاب را حفظ می کند، که از موقعیت های تقسیم مغز جلوگیری می کند.

منابع و باطن

هنگام ایجاد یک دستگاه بلوک جدید، لینستور تعداد مورد نیاز کپی را روی گره های مختلف در خوشه قرار می دهد. ما هر یک از این ماکت ها را منبع DRBD می نامیم.

منابع دو نوع هستند:

  • منبع داده - نشان دهنده یک دستگاه DRBD واقع در یک گره در یک استخر LVM یا ZFS.
    در حال حاضر پشتیبانی از چندین Backend وجود دارد و تعداد آنها به طور مداوم در حال افزایش است. پشتیبانی از LVM، ThinLVM و ZFS وجود دارد. دو مورد آخر به شما امکان می دهد عکس های فوری ایجاد و استفاده کنید.
  • منبع بدون دیسک - یک دستگاه DRBD است که روی یک گره بدون باطن میزبانی می شود، اما با اجازه دادن به آن مانند یک دستگاه بلوک معمولی رفتار می شود، تمام عملیات خواندن/نوشتن به منابع داده هدایت می شوند. نزدیکترین آنالوگ به منابع بدون دیسک iSCSI LUN است.

هر منبع DRBD می تواند تا 8 نسخه مشابه داشته باشد و تنها یکی از آنها می تواند به طور پیش فرض فعال باشد - اولیه، همه بقیه خواهند بود دوم و استفاده از آنها تا زمانی که حداقل یک Primary وجود داشته باشد غیرممکن خواهد بود، یعنی آنها به سادگی داده ها را بین خود تکرار می کنند.

با نصب یک دستگاه DRBD در سیستم، به طور خودکار تبدیل می شود اولیهبنابراین، حتی یک منبع Diskless، در اصطلاح DRBD، می تواند Primary باشد.

پس چرا به Linstor نیاز داریم؟

لینستور با سپردن تمام وظایف پرمصرف به هسته، اساساً یک برنامه جاوای معمولی است که به شما امکان می دهد به راحتی ایجاد منابع DRBD را خودکار کنید.
در عین حال، هر منبع ایجاد شده توسط او یک خوشه DRBD مستقل خواهد بود که بدون توجه به وضعیت صفحه کنترل و سایر منابع DRBD به طور مستقل کار می کند.

لینستور فقط از دو جزء تشکیل شده است:

  • لینستور-کنترلر - کنترل کننده اصلی که یک API برای ایجاد و مدیریت منابع ارائه می دهد. همچنین با ماهواره ها ارتباط برقرار می کند، فضای خالی روی آنها را بررسی می کند و برای ایجاد و حذف منابع جدید شغل ارسال می کند. در یک نمونه اجرا می شود و از یک پایگاه داده استفاده می کند که می تواند داخلی (H2) یا خارجی (PostgreSQL، MySQL، MariaDB) باشد.
  • لینستور-ماهواره - بر روی تمامی گره های ذخیره سازی نصب شده و اطلاعات فضای آزاد را در اختیار کنترلر قرار می دهد و همچنین وظایف دریافتی از کنترلر را برای ایجاد و حذف حجم های جدید و دستگاه های DRBD در بالای آنها انجام می دهد.

لینستور با مفاهیم کلیدی زیر عمل می کند:

  • گره - یک سرور فیزیکی که منابع DRBD روی آن ایجاد و استفاده خواهد شد.
  • استخر ذخیره سازی - استخر LVM یا ZFS روی گره ای که منابع DRBD در آن قرار می گیرد ایجاد شده است. استخر بدون دیسک نیز امکان پذیر است - این استخری است که فقط منابع بدون دیسک در آن قرار می گیرد.
  • تعریف منبع - تعریف یک منبع، در واقع یک نمونه اولیه است که نام و تمام ویژگی های آن را توصیف می کند.
  • تعریف حجم - تعریف حجم هر منبع می تواند از چندین جلد تشکیل شده باشد، هر جلد باید اندازه ای داشته باشد.
  • منابع - ایجاد یک نمونه از یک دستگاه بلوک، هر منبع باید بر روی یک گره خاص و در برخی از استخر ذخیره سازی قرار گیرد.

نصب لینستور

من توصیه می کنم از اوبونتو به عنوان یک سیستم استفاده کنید، زیرا. برای او وجود دارد PPA آماده:

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

یا دبیان، جایی که 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

اگر همه چیز به درستی انجام شود، باید چیزی شبیه به:

+----------------------------------------------- ------------------------------------------------ ----+ | استخر ذخیره سازی | گره | راننده | نام استخر | ظرفیت آزاد | ظرفیت کل | پشتیبانی از Snapshots | |----------------------------------------------- ------------------------------------------------ ----| | داده | گره 1 | LVM_THIN | drbdpool/thinpool | 64 گیگابایت | 64 گیگابایت | واقعی | | داده | گره 2 | LVM_THIN | drbdpool/thinpool | 64 گیگابایت | 64 گیگابایت | واقعی | | داده | گره 3 | LVM_THIN | drbdpool/thinpool | 64 گیگابایت | 64 گیگابایت | واقعی | +----------------------------------------------- ------------------------------------------------ ----+

منابع DRBD

اکنون بیایید سعی کنیم منبع DRBD جدید خود را ایجاد کنیم:

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

بیایید منابع ایجاد شده را بررسی کنیم:

linstor resource list 

+----------------------------------------------- ------------------------------------------------ ---+ | گره | منبع | استخر ذخیره سازی | VolumeNr | شماره کوچک | نام دستگاه | اختصاص داده شده | در حال استفاده | ایالت | |----------------------------------------------- ------------------------------------------------ ---| | گره 1 | myres | داده | 0 | 1084 | /dev/drbd1084 | 52 کیلوبایت | استفاده نشده | به روز رسانی | | گره 2 | myres | داده | 0 | 1084 | /dev/drbd1084 | 52 کیلوبایت | استفاده نشده | به روز رسانی | +----------------------------------------------- ------------------------------------------------ ---+

عالی! - می بینیم که منبع در دو گره اول ایجاد شده است، همچنین می توانیم سعی کنیم یک منبع بدون دیسک در سومین گره ایجاد کنیم:

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 frontend انجام می شود و نیازی به اقدامات اضافی در گره های محاسباتی ندارد.

اول از همه، ما باید مطمئن شویم که داریم jq и linstor-client:

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

اضافه کردن نظر