تخزين 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 نسخ متماثلة ويمكن أن يكون واحد منهم فقط نشطًا بشكل افتراضي - المرحلة الابتدائية، كل ما تبقى ثانوي وسيكون استخدامها مستحيلًا طالما أن هناك أساسيًا واحدًا على الأقل ، أي أنهم ببساطة ينسخون البيانات فيما بينهم.

من خلال تركيب جهاز DRBD في النظام ، يصبح تلقائيًا المرحلة الابتدائية، وبالتالي ، حتى مورد لا أقراص ، في مصطلحات DRBD ، يمكن أن يكون أساسيًا.

فلماذا نحتاج Linstor؟

من خلال تكليف النواة بجميع المهام كثيفة الموارد ، فإن Linstor هو في الأساس تطبيق Java عادي يتيح لك أتمتة إنشاء موارد DRBD بسهولة.
في الوقت نفسه ، سيكون كل مورد تم إنشاؤه من قبله عبارة عن مجموعة DRBD مستقلة تعمل بشكل مستقل ، بغض النظر عن حالة مستوى التحكم وموارد DRBD الأخرى.

يتكون Linstor من مكونين فقط:

  • لينستور تحكم - وحدة التحكم الرئيسية ، والتي توفر واجهة برمجة تطبيقات لإنشاء الموارد وإدارتها. كما أنه يتواصل مع الأقمار الصناعية ، ويتحقق من المساحة الخالية عليها ، ويرسل وظائف لإنشاء موارد جديدة وحذفها. يعمل في مثيل واحد ويستخدم قاعدة بيانات يمكن أن تكون إما داخلية (H2) أو خارجية (PostgreSQL و MySQL و MariaDB)
  • لينستور القمر الصناعي - يتم تثبيته على جميع عقد التخزين ويزود وحدة التحكم بمعلومات حول المساحة الخالية ، كما يقوم بتنفيذ المهام الواردة من وحدة التحكم لإنشاء وحذف وحدات تخزين جديدة وأجهزة DRBD فوقها.

تعمل Linstor بالمفاهيم الأساسية التالية:

  • العقدة - خادم فعلي سيتم إنشاء واستخدام موارد DRBD عليه.
  • تجمع التخزين - تم إنشاء تجمع LVM أو ZFS على العقدة التي سيتم وضع موارد DRBD فيها. من الممكن أيضًا وجود تجمع بدون أقراص - وهو عبارة عن تجمع يتم فيه وضع الموارد الخالية من الأقراص فقط.
  • تعريف الموارد - تعريف مورد ، في الواقع هو نموذج أولي يصف الاسم وجميع خصائصه.
  • تعريف الحجم - تعريف الحجم. يمكن أن يتكون كل مورد من عدة مجلدات ، ويجب أن يكون لكل مجلد حجم.
  • مورد - إنشاء مثيل لجهاز كتلة ، يجب وضع كل مورد على عقدة محددة وفي بعض تجمعات التخزين.

تركيب لينستور

أوصي باستخدام Ubuntu كنظام ، لأن. موجود لها 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

عقد التخزين

يتم شحن Linux kernel حاليًا مع وحدة kernel داخل الشجرة 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 | دربدبول / ثينبول | 64 جيجا بايت | 64 جيجا بايت | صحيح | | البيانات | عقدة 2 | LVM_THIN | دربدبول / ثينبول | 64 جيجا بايت | 64 جيجا بايت | صحيح | | البيانات | عقدة 3 | LVM_THIN | دربدبول / ثينبول | 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 

+ ------------------------------------------------- -------------------------------------------------- --- + | عقدة | المورد | StoragePool | حجم الصوت | الصغرى | اسم الجهاز | المخصصة | قيد الاستخدام | الدولة | | ------------------------------------------------- -------------------------------------------------- --- | | العقدة 1 | مايرز | البيانات | 0 | 1084 | / ديف / drbd1084 | 52 كيلو بايت | غير مستخدم | UpToDate | | عقدة 2 | مايرز | البيانات | 0 | 1084 | / ديف / drbd1084 | 52 كيلو بايت | غير مستخدم | 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، فهو متاح حاليًا كمكوِّن إضافي ويجب تثبيته بشكل منفصل.

يتم إجراء التثبيت بالكامل على عقد 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 وإنشاء أجهزة افتراضية منه.

رابط المشروع:
https://github.com/OpenNebula/addon-linstor_un

المصدر: www.habr.com

إضافة تعليق