
منذ وقت ليس ببعيد ، قدم شباب LINBIT حل SDS الجديد - Linstor. هذا تخزين مجاني تمامًا يعتمد على تقنيات مجربة: DRBD ، LVM ، ZFS. يجمع Linstor بين البساطة والهندسة المعمارية المصممة بشكل جيد ، والتي تتيح الاستقرار والنتائج الرائعة.
أود اليوم أن أخبركم قليلاً عن ذلك وأظهر مدى سهولة دمجه مع OpenNebula باستخدام linstor_un ، وهو برنامج تشغيل جديد قمت بتطويره خصيصًا لهذا الغرض.
يتيح لك Linstor بالاشتراك مع OpenNebula بناء سحابة سريعة وموثوقة يمكن نشرها بسهولة على البنية الأساسية الخاصة بك.
لينستور العمارة
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 في النظام ، يصبح تلقائيًا أساسي ، لذلك يمكن أن يكون موردًا بلا Diskless ، في مصطلحات DRBD ، أساسيًا.
فلماذا نحتاج Linstor؟
يعد Linstor ، الذي يعد كل المهام الأساسية المكثفة إلى kernel ، تطبيقًا أساسيًا لجافا يجعل من السهل أتمتة إنشاء موارد DRBD.
بالإضافة إلى ذلك ، سيكون كل مورد تم إنشاؤه بواسطته عبارة عن مجموعة DRBD مستقلة تعمل بشكل مستقل ، بغض النظر عن حالة مستوى التحكم وموارد DRBD الأخرى.
يتكون Linstor من مكونين فقط:
- Linstor-controller - وحدة التحكم الرئيسية التي توفر واجهة برمجة التطبيقات لإنشاء وإدارة الموارد. يتواصل أيضًا مع الأقمار الصناعية ، ويتحقق من المساحة الخالية عليها ، ويرسل المهام لإنشاء وحذف موارد جديدة. يتم تشغيله في مثيل واحد ويستخدم قاعدة بيانات ، والتي يمكن أن تكون إما داخلية (H2) أو خارجية (PostgreSQL ، MySQL ، MariaDB)
- Linstor-satellite - مثبت على جميع عقد التخزين ويزود جهاز التحكم بمعلومات حول المساحة الخالية ، كما يؤدي المهام المتلقاة من وحدة التحكم لإنشاء وحذف وحدات تخزين جديدة وأجهزة DRBD أعلىها.
تعمل Linstor مع المفاهيم الأساسية التالية:
- العقدة هي خادم فعلي يتم من خلاله إنشاء موارد DRBD واستخدامها.
- تجمع التخزين - تجمع LVM أو ZFS الذي تم إنشاؤه على عقدة حيث سيتم وضع موارد DRBD. من الممكن أيضًا استخدام تجمع بدون قرص - هذا هو التجمع الذي سيتم فيه استضافة الموارد الخالية من الأقراص فقط.
- تعريف المورد - تعريف المورد هو في الأساس نموذج أولي يصف الاسم وجميع خصائصه.
- تعريف حجم - تعريف حجم . يمكن أن يتكون كل مورد من عدة مجلدات ، ويجب أن يكون لكل وحدة تخزين حجم.
- مورد - مثيل تم إنشاؤه لجهاز كتلة ، يجب أن يكون كل مورد موجودًا على عقدة محددة وفي بعض وحدات التخزين.
تثبيت Linstor
أوصي باستخدام أوبونتو كنظام ، كما هناك 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
عقد التخزين
حاليًا ، يتم توفير وحدة kernel DRBD8 الموجودة داخل الشجرة في نواة Linux ، لسوء الحظ أنها لا تناسبنا ونحن بحاجة إلى تثبيت 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
إنشاء الكتلة
حمامات التخزين والعقد
سنتخذ 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 | العقدة | سائق | اسم حمام السباحة | FreeCapacity | TotalCapacity | SupportsSnapshots |
| ------------------------------------------------- -------------------------------------------------- ---- |
| البيانات | العقدة 1 | LVM_THIN | drbdpool / ثينبول | 64 غيغابايت | 64 غيغابايت | صحيح |
| البيانات | node2 | LVM_THIN | drbdpool / ثينبول | 64 غيغابايت | 64 غيغابايت | صحيح |
| البيانات | node3 | LVM_THIN | drbdpool / ثينبول | 64 غيغابايت | 64 غيغابايت | صحيح |
+ ------------------------------------------------- -------------------------------------------------- ---- +
موارد DRBD
الآن دعونا نحاول إنشاء مورد DRBD الجديد لدينا:
linstor resource-definition create myres linstor volume-definition create myres 1G linstor resource create myres --auto-place 2
دعونا نتحقق من الموارد التي تم إنشاؤها:
linstor volume list
+ ------------------------------------------------- -------------------------------------------------- --- +
| العقدة | الموارد | StoragePool | VolumeNr | مينور | اسم الجهاز | مخصص | استخدام | الدولة |
| ------------------------------------------------- -------------------------------------------------- --- |
| العقدة 1 | مايرز | البيانات | 0 | 1084 | / dev / drbd1084 | 52 كيلوبايت | غير مستخدمة | UpToDate |
| node2 | مايرز | البيانات | 0 | 1084 | / dev / 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 و linstor-client :
apt-get install jq linstor-client
يجب أن linstor node list
أمر 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 الرسمي وإنشاء أجهزة افتراضية منه.
رابط للمشروع