كلب الراعي


Sheepdog هو نظام قابل للتطوير يوفر أجهزة كتلة موزعة للأجهزة الافتراضية. بدأ تطويره في عام 2009 من قبل المطورين من شركة Nippon Telegraph and Telephone Corporation اليابانية . Sheepdog هو تطبيق مفتوح المصدر بموجب ترخيص GPL2. سيكون الإصدار الأحدث 0.9.3 ، الذي تم إصداره في نوفمبر 2015 ، هو إرث الإصدار 1.0 ، وهو مناسب للاستخدام التجاري 1 . (أصبح بالفعل - تقريبا لكل.)


من أجل الاهتمام ، تم إصدار الإصدار الأول (0.1.0) من قبل المطورين في أغسطس 2010 - وفي الوقت نفسه ، تم تضمين دعم كلب الراعي على الفور في فرع تطوير QEMU الرئيسي.
الاختبارات الأولى على كلب الراعي الذي أجريته في نوفمبر 2011 2 وكانت النتائج جيدة لعمليات الإدخال / الإخراج. ومع ذلك ، لا يزال نظام الراعي يعاني من مشاكل في استعادة العقدة الساقطة. ربما تم حل هذه المشكلة قريبًا ، حيث أن تطوير التطبيق نشط جدًا ، ولكن في ذلك الوقت استخدمت حلًا مختلفًا.

الاحتمالات


تم وصف مبدأ عمل Sheepdog بشكل جيد للغاية في العرض التقديمي المنشور ، لذلك سأقتصر على نظرة عامة موجزة.


إنه قابل للتطوير
يمكن زيادة حجم الكتلة بشكل تعسفي على مستوى العقدة ، مما يزيد من سعة ومساحة البيانات أثناء التشغيل ، ومن خلال زيادة عدد العقد. كلما زاد عدد العقد ، زاد أداء محرك VDI I / O.


إنه بسيط
على عكس الأنظمة الأخرى ، مثل CEPH ، لا يعمل Sheepdog مباشرة مع نظام الملفات ولكنه يعمل مع كتل ذات حجم ثابت ، وبالتالي ، لا يتطلب برامج تشغيل منفصلة لخدمة البيانات الوصفية. تتم جميع عمليات التحكم باستخدام أداة كلب واحدة تتواصل مباشرة مع الأغنام
(يستخدم ceph أيضًا الأشياء - تقريبًا لكل.)


لحساب العقدة الساقطة
يتكون كل VDI من هذه الكتل (الكائنات) التي يتم نسخها في وقت واحد إلى عدة عقد ، لذلك ، إذا سقطت إحداها ، تظل البيانات متاحة ، وتبدأ كائنات العقد المتساقطة في النسخ إلى العقدة الأخرى.


يدعم لقطات الجهاز المحظورة
تعمل لقطات Sheepdog مثل Btrfs. يتم حفظ كتل VDI المرفقة ، ويتم كتابة البيانات الجديدة إلى كتل جديدة.


قد تكون الوظائف التالية إشكالية في ظروف معينة:


الراعي لا يدعم SPOF
إذا تم استخدام VDI كجهاز حظر عبر QEMU ، فقد تنشأ مشكلة إذا كان متصلاً في نفس الوقت في عدة أماكن. كان بإمكان SPOF 3 منع هذا. الراعي ليس لديه. ومع ذلك ، في الإصدار الجديد من Sheepdog ، يمكن حظر VDI بحيث لا يسمح بأكثر من اتصال.


دورة حياة كائنات البيانات
لا يمكن حذف كائنات VDI إلا عندما يتم حذف جميع النسخ واللقطات المرتبطة بها. هذا هو بالضبط نفس Btrfs. لذلك ، قد لا تكون إزالة اللقطات غير المستخدمة كافية لإفساح المجال للتخزين.


برنامج الاتصالات


الراعي صغير بشكل مثير للسخرية مقارنة بـ Ceph أو GlusterFS. هذا لأنه لا يحاول حل جميع المشاكل بنفسه ، ولكنه يستخدم إلى أقصى حد ما يعمل بالفعل.


في المقابل ، يوفر جهاز كتلة يمكن استخدامه كقرص فعلي ، بالإضافة إلى غارة برامج ، إلخ.


يهتم فقط بتوزيع كائنات البيانات بين العقد التي تعمل عليها.


ومع ذلك ، فهو يحتاج إلى المعلومات التي يوفرها برنامج الاتصالات - وهو مكون رئيسي لن يعمل Shepdog بدونه.


برنامج الاتصالات - لا يوفر القدرة على تبادل البيانات بين العقد. هذا ما تفعله شياطين الأغنام . من خلاله ، يكتشف الأغنام فقط العقد التي هي على قيد الحياة حاليًا.


متزامن


بادئ ذي بدء ، يفترض Sheepdog أن العقد ستتواصل مع بعضها البعض من خلال corosync . يدعم ما يصل إلى 64 عقدة ، على الرغم من أنه من الناحية النظرية يجب أن يكون قادرًا على تقديم المزيد ، إلا أن استخدامه مثالي للتجمعات الصغيرة حتى 16 عقدة.


عادة ، يستخدم corosync أيضًا جهاز تنظيم ضربات القلب ، لذلك ليس هناك حاجة لتثبيت أي شيء آخر.


قم بتثبيت corosync على دبيان


Corosync موجود في مستودعات التوزيع ، وتركيبه بسيط:


$ apt-get install corosync libcorosync-common4 

إعداد Corosync


حارس حديقة الحيوان


يوصي مطورو Sheepdog باستخدام zookeeper للمجموعات الأكبر. وفقا للمطورين ، تم بناء واختبار تخزين اختبار Sheepdog مع 1000 عقد 4 .


قم بتثبيت zookeeper على دبيان


 $ apt-get install zookeeper zookeeperd 

انطلاق الشيطان ..


 $ /usr/share/zookeeper/bin/zkServer.sh start 

المنفذ الافتراضي الذي يتم تشغيل zookeeper عليه هو 2181


تشغيل كلب الراعي مع دعم zookeeper:


 $ sheep -c zookeeper:IP1:PORT1,IP2:PORT2,IP3:PORT3 ...other...option... 

المكافأة من zookeeper هي أنه في حالتها ، لدى Sheepdog تكوين أوضح وأسهل للعقد ، ولكن هناك مشكلة في أن حزمة تثبيت دبيان لا تتضمن دعمها.


لذلك ، للحصول على Sheepdog مع دعم zookeeper ، يجب عليك تجميعه من التعليمات البرمجية المصدر. على الرغم من أنني لا أستطيع أن أستبعد أن الوضع قد يكون مختلفًا في الوقت الحاضر.
(لا يزال دعم zookeeper يتطلب الترجمة من المصدر - تقريبًا لكل.)


إقامة شيطان الخراف


تصبح العقدة جزءًا من كلب الراعي عندما يبدأ مدير الكائن ، شيطان الخراف . يعمل دائمًا في نسختين:


  1. يبدأ المثيل الأول للعملية كبوابة ، تستقبل طلبات الإدخال / الإخراج من العملاء (على سبيل المثال ، من برامج تشغيل أجهزة كتلة QEMU) ، وتحسب العقد المستهدفة وترسل طلبات لمزيد من المعالجة فيما بينها. أي أنه ينشئ العديد من اتصالات الشبكة.


  2. يعمل آخر كمدير كائن محلي ( إدارة الكائنات )

يمكن تمرير معلمات تكوين البرنامج الخفي كوسيطة سطر الأوامر في وقت التشغيل. إذا لم يكن هناك أي شيء ، فسيتم استخدام القيم الافتراضية ، والتي يجب أن تكون حذرا معها:


رقم المنفذ
ما لم يتم تحديد خلاف ذلك ، يعمل برنامج خراف الأغنام على المنفذ 7000


مسار المدفن
ما لم ينص على خلاف ذلك ، يستخدم دليل shep الدليل / var / lib / sheepdog ، ويتم تخزين كائنات VDI في obj الفرعي obj .


من الناحية النظرية ، لا شيء يمنع العديد من حالات الأغنام من العمل على عقدة واحدة - الشرط الرئيسي هو أن يستخدم الجميع رقم المنفذ الخاص بهم وتخزينهم الخاص. تم حل مشكلة عنوان IP للعقدة تقريبًا. كل نسخة قيد التشغيل من الخراف الخراف التي تعمل على منفذ مختلف سوف تتصل تلقائيا بمجموعة موجودة!

معلومات هامة هي أن رقم المنفذ جزء من تكوين حاوية VDI. تحتاج إلى معرفة ما إذا كنت تريد إعادة تكوين البرنامج الخفي للتشغيل على المنفذ الآخر للكتلة الموجودة.

لذلك ، اذا قمت بتشغيل نسخة من برنامج خروف الغنم برقم منفذ مختلف ، ولكن بنفس المسار الى ملف تخزين العناصر ، فقد تفقد المعلومات في حاويات VDI الموجودة.

خراف الشيطان كبوابة


على الأجهزة التي لا تحتوي على مساحة تخزين لكائنات VDI ، يمكن تشغيل البرنامج الخفي للأغنام حصريًا في وضع البوابة ، مع علامة -G .


في هذه الحالة ، عند توزيع كائنات VDI ، لن يتم استخدام التخزين المحلي على الإطلاق ، وسيتم توزيع البيانات مباشرة على العقد الأخرى.


شيطان الأغنام كمدير كائن


يعمل المثيل الثاني كمدير كائن محلي ، ويتلقى طلبات الإدخال / الإخراج من مثيل يبدأ كبوابة ، وينفذ عمليات r / w في تخزين الكائن المحلي ( تخزين الكائن )


تخزين الكائنات


بشكل افتراضي ، يكون تخزين كائنات VDI في Sheepdog هو الدليل /var/lib/sheepdog/obj ، والذي يستخدمه أيضًا خفي الأغنام كجزء من هيكل الدليل الداخلي - هذا هو مسار التخزين الافتراضي.


إذا كنت تريد تخزين كائنات VDI في مكان آخر ، يمكنك تمرير المسار حيث تم تركيب جهاز كتلة آخر كمعلمة عند بدء التشغيل.


 sheep ... /cesta_do_přípojného_bodu 

هناك المزيد من الطرق للتعبير. يدعم الإصدار الجديد من Sheepdog ما يسمى بتقنية الأجهزة المتعددة ، والتي تتيح لك زيادة سعة الذاكرة ديناميكيًا ، إذا لزم الأمر ، دون الحاجة إلى إعادة تشغيل Sheepdog . تعمل زيادة سعة التخزين بشكل مشابه لـ Btrfs.


 sheep ... /cesta_do_A,/cesta_do_B,/cesta_do_C 

(سيتم استخدام الدليل الأول المحدد فقط للبيانات الوصفية - حوالي .per)


يمكن أيضًا إضافة تخزين إضافي (أو إزالته) من خلال عقدة الكلب md


...


الوظائف التي يقدمها الجهاز المتعدد مفيدة بشكل خاص عندما لا يدعم نظام ملفات التخزين هذا "حسب التصميم" (على عكس Btrfs أو ZFS). بشكل عام ، يمكن أن يؤثر اختيار نظام الملفات لتخزين الكائنات وخصائصها ومعلماتها وإعداداتها بشكل كبير على أداء نظام ملفات IO للجهاز الظاهري.


تتطلب تقنية الأجهزة المتعددة سمات متقدمة على جانب الملف ، وهو ما لا يمثل مشكلة لأنظمة الملفات الحديثة مثل btrfs 5 أو ext4. لكن بعض أنظمة الملفات القديمة مثل reiserfs أو ext2 6 لا تدعمهم.

إذا كنت ترغب في استخدام نظام ملفات لا يدعم السمات الموسعة لتخزين الكائنات ، فنحن بحاجة إلى تجميع Sheepdog بدون دعم متعدد الأجهزة.

نوع التخزين - عادي مقابل شجرة


عند تنسيق مجموعة ، من بين خيارات أخرى ، يمكنك تحديد نوع التخزين (تخزين الواجهة الخلفية). يمكنك ضبط النوع على عادي أو شجرة . بالنسبة للنوع العادي ، ستبدو بنية الدليل كما يلي:


 | |- obj | |- <id > | | |-< > | | |-< > | | |-< > | | |- ... | |- <id  > | | ... |- config [] |- epoch | |- < > | |- < > | |- ... |- journal \- sheep.log [] 

سيتم إرسال جميع كائنات VDI في دليل obj إلى دليل فرعي يعتمد اسمه على معرف العصر الحالي. أي أنه لكل عصر ، سيتم تخزين كائنات VDI المقابلة بشكل منفصل. ومع ذلك ، خلال عصر واحد ، قد يظهر عدد كبير من كائنات VDI في الدليل ، مما يؤدي لاحقًا إلى إبطاء الوصول إلى الملفات. لذلك ، يمكنك اختيار الخيار الثاني ، وهو الشجرة :


 |- obj | |- aa | | |-< > | | |-< > | | |-< > | | |- ... | |- ab | | ... | |- meta | | |- < > | | |- ... | |- 0a | | ... |- config [] |- epoch | |- < > | |- < > | |- ... \- sheep.log [] 

في هذا النوع من التخزين ، يُنشئ البرنامج الخفي للأغنام مجموعة من 256 دليلاً فرعيًا بأسماء 0 أ 0a, ..., 99 في دليل obj ، ثم يبعثر الكائنات استنادًا إلى آخر حرفين من معرف VDI ، وهو فريد ليس فقط لكل حاوية VDI ولكن أيضًا للقطات أو استنساخ.


أسماء كائنات VDI


عندما يحفظ Sheepdog البيانات في حاوية VDI ، ستبدأ الملفات في الظهور في مخزن بيانات obj ، وسيكون لكل منها اسمها الخاص الذي يتكون من عدة عناصر:


 ../obj/8f/00e8b18f00000005 ^^ 

يشير الحرفان الأولان إلى نوع الكائن. تبدأ كائنات البيانات بـ 00... والبيانات الوصفية (التي يمكن تخزينها في دليل آخر) 80...


 ../obj/8f/00e8b18f00000005 ^^^^^^ 

ثم يأتي VDI. إنها فريدة ليس فقط لكل حاوية ، ولكن أيضًا لقطتها أو استنساخها.


 ../obj/8f/00e8b18f00000005 ^^ ^^ 

يشير آخر رقمين من معرف VDI ، في حالة نوع تخزين الشجرة ، إلى الدليل الفرعي الذي ينتمي إليه الكائن.


 ../obj/8f/00e8b18f00000005 ^^^^^^^^ 

ويتبع معرف حاوية VDI بالنظام الست عشري بالرقم التسلسلي للكائن في حاوية VDI


عصر


يحتوي الدليل الفرعي للحقبة على قوائم ثنائية للكائنات التي تنتمي إلى العصر. يزداد رقم الحقبة ، في كل مرة تتغير فيها كل مجموعة - عند إضافة عقدة أو إزالتها. يبدأ كل تغيير من هذا القبيل عملية الاسترداد ، والتي سيتم خلالها فحص الحالة الحالية للكائنات المحلية على العقد ، تليها زيادة في العصر.


كيفية اختيار التخزين الأمثل لكائن VDI


يتم حساب سعة التخزين المتاحة بناءً على المساحة الخالية على العقد. تعتمد المساحة التي تختارها الأغنام دائمًا على مقدار المساحة المتوفرة في جهاز الكتلة حيث يتم تخزين كائنات VDI.


إن حجم حاوية VDI هو مجرد شكل افتراضي لا يرتبط بأي شكل بكمية المساحة التي تشغلها كائنات VDI. من المهم معرفة كيفية معالجة Sheepdog للبيانات في مجموعة:


يحاول Sheepdog دائمًا تخزين البيانات بالتساوي بين جميع آلات العصر.

هذا يعني أنه إذا سقطت إحدى العقد ، وتغير العصر وبدأ Sheepdog على الفور في عملية الاسترداد ، فإنه سيقوم بإنشاء كائنات VDI المفقودة على العقد المتبقية للتعويض عن الخسارة.


سينشأ موقف مماثل عند إضافة عقدة جديدة. سيبدأ Sheepdog في نقل كائنات VDI بالتساوي من العقد الجديدة إلى المستودع الخاص بها ، بحيث تكون النسبة المئوية لملء مساحة البيانات على العقد متوازنة قدر الإمكان. استخدم الأمر التالي للحصول على نظرة عامة عامة عن مقدار المساحة المستخدمة حاليًا على العقد الخاصة بك:


 nod1 ~ # collie node md info -A Id Size Used Avail Use% Path Node 0: 0 1.1 TB 391 GB 720 GB 35% /local/sheepdog-data/obj Node 1: 0 702 GB 394 GB 307 GB 56% /local/sheepdog-data/obj Node 2: 0 794 GB 430 GB 364 GB 54% /local/sheepdog-data/obj Node 3: 0 1.6 TB 376 GB 1.2 TB 22% /local/sheepdog-data/obj Node 4: 0 1.2 TB 401 GB 838 GB 32% /local/sheepdog-data/obj Node 5: 0 1.5 TB 370 GB 1.1 TB 24% /local/sheepdog-data/obj Node 6: 0 1.6 TB 388 GB 1.2 TB 23% /local/sheepdog-data/obj 

أداء I / O


من المهم أن نقول هنا أن Sheepdog يعمل بشكل مختلف عن Ceph ، ولديه أولويات مختلفة.


بالنسبة إلى Ceph ، يعد "وزن" جهاز OSD أمرًا بالغ الأهمية عند وضع كائنات البيانات ، بالإضافة إلى أداء جهاز الحظر واتصال المضيف وسرعة الاستجابة. (في الواقع لا - تقريبا لكل)


لا يفعل شيبرد شيء من هذا القبيل ، لا أعرف. ربما. بياناته تأتي أولاً. الأداء من حيث عمليات الإدخال / الإخراج ثانوي. بالطبع ، مع العقد الأكثر قوة ، يمكن أن يتحسن أداء الإدخال / الإخراج ، ولكنه يعتمد دائمًا على البنية المحددة. (ومع ذلك ، تظهر الاختبارات أداء أفضل للرعاة مقارنة مع ceph - تقريبا لكل)


أضفت عقدة جديدة إلى Sheepdog مع البيانات المخزنة على قرص 2TB SATA II دوار. تبلغ سرعة الكتابة القصوى لهذا القرص حوالي 80M / s. في الواقع ، إنه يختلف كثيرًا لأن محركات SATA لا يمكنها القراءة والكتابة في نفس الوقت.

في البداية ، كان متوسط ​​سرعة الكتابة على VDI على هذا القرص حوالي 20 ~ 30M / s ، حيث أنه بالإضافة إلى البيانات من VDI ، تم نسخ بيانات حاوية 392G كجزء من عملية الاسترداد. استمر هذا لمدة 6.5 ساعة. تراوحت سرعة الكتابة بين 40 ~ 55M / s.

من الواضح ، في هذه الحالة ، كانت سرعة الكتابة محدودة بسبب أداء الإدخال / الإخراج لجهاز الحظر المحلي.

بالنسبة إلى Sheepdog ، تنطبق القاعدة التالية: "كلما زاد عدد كائنات VDI الموجودة على العقد ذات الاتصال السريع ، كان أداء عمليات الإدخال / الإخراج أفضل."


نظرًا لحقيقة أن تحريك كائنات VDI في الخلفية يعني أن "الموت السريع للعقدة" سيبطئ من تكرار كائنات البيانات التي تشغل أكبر مساحة ، فإن هذا سيظهر نفسه على أنه انخفاض في أداء عمليات الإدخال / الإخراج لحاوية VDI


احتلت الفضاء


عند وضع كائنات البيانات ، فإن مقدار المساحة الخالية أمر بالغ الأهمية لبرنامج خراف الأغنام . تبدو الآلية بسيطة. يحدد برنامج الخراف ، الذي يتم من خلاله نقل البيانات مع حاوية VDI ، من وقت لآخر استخدام المساحة الحرة والمحتلة على العقد ، والتي تقوم بفرزها. ثم يتم توزيع البيانات بين العقد بأقل معدل استخدام.


إذا كان هناك مسار كتابة سريع في الغالب ، فستكون عملية الكتابة إلى حاوية VDI أيضًا سريعة. نظرًا لأنه يتم تنفيذ عمليات الإدخال / الإخراج (I / O) لحاوية VDI بشكل أسرع ، يمكن في وقت مبكر متابعة برنامج الخراف إلى العملية التالية.


الشيء المهم هو أنه مع Sheepdog لن يكون هناك حالة عندما تكون إحدى العقد ممتلئة تمامًا. إذا أصبح معدل الاستخدام على العقدة أسوأ بكثير ، فإن البرنامج الخفي يبدأ في نقل كائنات البيانات الخاصة به إلى موقع آخر.


يعمل Sheepdog تمامًا مثل Btrfs - باستخدام المساحة المشغولة فقط. وبالتالي ، يمكنك إنشاء حاوية VDI افتراضية بسعة 1 تيرابايت ، والتي ستستهلك مساحة كبيرة مثل البيانات المخزنة فيها. من وجهة النظر هذه ، من المستحسن استخدام هذه الأشكال من الأقراص الافتراضية وأنظمة الملفات في حاويات VDI التي يمكن تنظيفها بعد بعضها البعض.


إطلاق الكتلة


في حين يمكن إيقاف جميع العقد في نفس الوقت ، لا يمكن بدء العقد في وقت واحد !!! يجب توصيل العقد تدريجيًا. بدءًا من العقدة التي تم تحديدها لأول مرة في قائمة العقد.
(هذه عبارة غريبة للغاية - تقريبًا لكل.)

Vdi


هذا اختصار عام في Sheepdog للقرص الافتراضي ، وليس تنسيقه المحدد .7 . بشكل عام ، هذا مربع افتراضي يحتوي على حجيرات ذات حجم ثابت حيث يقوم Sheepdog بعد ذلك بوضع البيانات التي يرسلها العميل.


إنشاء VDI


قبل إنشاء VDI الأول أو استيراده ، نحتاج إلى تنسيق المجموعة. عند تنسيق مجموعة ، يتم تعيين المعلمات التي سيتم استخدامها افتراضيًا عند إنشاء كل VDI لاحق.


مثال يوضح إنشاء VDI جديد باسم Disk1 و 1 GB في الحجم


 root@nod1 :~# collie vdi create disk1 1G root@nod1 :~# collie vdi list Name Id Size Used Shared Creation time VDI id Copies Tag Block Size Shift disk1 0 1.0 GB 0.0 MB 0.0 MB 2015-12-04 14:07 e8b18f 2 22 

معرف
معرف VDI


الحجم
حجم VDI الذي لن يتم تخصيصه مسبقًا على الفور.
إذا كان هذا VDI بتنسيق متزايد (qcow2 وما شابه) تم إنشاؤه باستخدام qemu-img convert ، فلن يطابق حجم القرص الظاهري ، ولكنه سينمو باستمرار.


تستخدم
معلومات حول مقدار المساحة التي تشغلها كائنات بيانات VDI.
لن يشغل VDI ، الذي لا يتطلب تخصيص كائنات البيانات أثناء الإنشاء ، شيئًا على الإطلاق ، حيث لم يتم إنشاء كائنات البيانات له بعد.


مشترك
حجم كائنات البيانات التي يتم مشاركتها بواسطة VDIs الأخرى


وقت الخلق
وقت إنشاء VDI


حجم الكتلة
حجم كائن VDI. إنتباه! لم يتم تحديده بالميغابايت ، ولكن كقوة من وحدتي بايت. في الإصدارات الأقدم ، تم استخدام كائنات ذات حجم ثابت 4 ميغا بايت فقط. حاليا ، قد يكون VDI كائنات أكبر. الحجم الأمثل لكائن VDI للجهاز الظاهري العادي يشبه 64 ميجا بايت (26). الحجم الافتراضي 22 (4 ميغابايت) هو أيضًا الحد الأدنى. لا يمكن تثبيت أقل. كلما صغر حجم الكائن ، زاد عدد الملفات التي يجب على Sheepdog معالجتها أثناء العمل مع VDI ، والعمل مع الملفات ليست مشكلة رخيصة من وجهة نظر IO. يمكن أن يؤدي عدد كبير من الملفات ، خاصة مع وحدات تحكم SATA البطيئة ، إلى تدهور حاد في سرعات القراءة والكتابة. الحد الأقصى لحجم الكائنات التي يمكن استخدامها هو 31 (2 جيجابايت). يمكن أن يكون هذا مفيدًا إذا كان VDI يخزن باستمرار كمية كبيرة من البيانات الثابتة ، مثل النسخ الاحتياطية.


معرف Vdi
معرف VDI.


ماذا يحتوي VDI؟


محتوى VDI هو البيانات. هذا جهاز كتلة موزعة ، لذلك لا يحل Sheepdog هذه البيانات أو البيانات المهملة. من وجهة النظر هذه ، يبدو VDI كمجلد منطقي LVM. يتوافق VDI المكتظ مسبقًا مع قسم LV الكلاسيكي مع نطاق مخصص ، بينما يشبه VDI قسم LV رفيع تم إنشاؤه في تجمع (انظر LVM (thin_provisioning)) ، ولكن مع اختلاف أن نطاقات البيانات (الكائنات) لا يتم تخزينها محليًا حظر الأجهزة ، وتنتشر بين العقد.


يعمل تنسيق VDI في هذا القياس كنظام ملفات. يشغل البعض نطاقات (كائنات) محجوزة بالتسلسل ، ويعينها البعض الآخر على أنها Inodes ، ثم يرسلون البيانات مباشرة إليهم. يمكن أن يؤدي الجمع غير الصحيح بين نظام ملفات تخزين العقدة وتنسيق VDI ونظام الملفات الداخلي إلى تدهور كبير في أداء الإدخال / الإخراج.

كيفية الحصول على معلومات حول VDI


لمعرفة المزيد حول تنسيق VDI ، يمكنك استخدام qemu-img info :


 root@nod1 :~# qemu-img info sheepdog:localhost:8000:disk1 image: sheepdog:localhost:8000:test2 file format: qcow2 virtual size: 12G (12884901888 bytes) disk size: 4.0G cluster_size: 65536 Format specific information: compat: 1.1 lazy refcounts: false refcount bits: 16 corrupt: false 

من إخراج الأمر ، يمكنك معرفة أن القرص 1 لديه حجم اسمى 12 جيجا. حاليا يستغرق 4G فقط. نظرًا لأنه بتنسيق qcow2 ، فمن الواضح أنه تم إنشاؤه كزيادة.


 root@nod1 :~# collie vdi list Name Id Size Used Shared Creation time VDI id Copies Tag Block Size Shift disk2 0 4.0 GB 4.0 GB 0.0 MB 2015-12-04 16:07 825dc1 2 31 root@nod1 :~# qemu-img info sheepdog:localhost:8000:disk2 image: sheepdog:localhost:8000:disk2 file format: raw virtual size: 4.0G (4294967296 bytes) disk size: 4.0G root@nod1 :~# find /datastore/obj/ | grep 825dc1 /datastore/obj/meta/80825dc100000000 /datastore/obj/c1/00825dc100000000 /datastore/obj/c1/00825dc100000001 

في هذه الحالة ، تم إنشاء Disk2 كمحرك VDI 4 جيجا بايت مُخصص مسبقًا بتنسيق خام مع حجم كتلة 2 جيجا بايت ، والذي لا يستغرق سوى 2 جيجا بايت فقط


تصدير VDI إلى ملف


يمكن تصدير محتوى VDI من Sheepdog بعدة طرق. ربما أسرع استخدام الكلب قراءة . الأمر مربك بعض الشيء ، ولكنه يعني فقط: "قم بتحميل محتويات VDI وإرسالها إلى STDOUT .." ، والتي يمكن إعادة توجيهها إلى ملف:


 root@nod1 :~# collie vdi read disk1 > /backups/soubor.raw 

إذا كان VDI يحتوي على 10G ولكن تم استخدام 2G فقط ، فسيقوم بإنشاء ملف بسعة كاملة 10 جيجابايت.


في هذا الأمر ، لا تتغير محتويات VDI ، لذلك إذا كان يمكن استخدام محتويات VDI ، على سبيل المثال ، قرص افتراضي بتنسيق qcow2 المضغوط ، مباشرة


 .. -drive file=file:/disk1_exportovany_z_vdi,..,format=qcow2 .. 

هناك طريقة أخرى للحصول على محتويات VDI في ملف وهي استخدام qemu-img convert . إنه ليس سريعًا جدًا ، ولكنه يسمح لك بتحويل VDI إلى تنسيق آخر باستخدام خيارات مختلفة لتنسيق القرص الظاهري المقابل.


 root@nod1 :~# qemu-img convert -f qcow2 -O file -o preallocation=full,nocow=on sheepdog:localhost:8000:disk1 /disk1_exportovany_z_vdi 

نسخ احتياطي تزايدي


إنشاء نسخ احتياطي تزايدي


دلتا بين اللقطة الأولى والثانية ..


 root@nod1 :~# collie vdi backup test -F snap1 -s snap2 /backups/soubor_diff 

استعادة VDI من النسخ الاحتياطي التزايدي


 root@nod1 :~# collie vdi restore test -s snap1 /tmp/backup restoring /tmp/backup... done 

عند استيراد نسخة احتياطية متزايدة ، يجب أن يحتوي VDI بالطبع على اللقطة التي تم عمل النسخة الاحتياطية منها.


التحقق بقراءة المحتويات الأصلية لاختبار الصورة ...


  root@nod1 :~# collie vdi read test 0 512 -s 3 

استيراد VDI من الملف


يمكن إجراء استيراد قرص افتراضي موجود كملف FS محلي بشكل مشابه للتصدير. ولكن مع الاختلاف الذي تستخدمه كتابة الكلب ("قراءة البيانات من STDIN والكتابة إلى ملف VDI ..")


 root@nod1 :~# collie vdi write disk1 < /backups/soubor.raw 


  • لا يمكن استيراد المحتوى إلا إلى VDI موجود.
  • يشغل VDI المستورد دائمًا مساحة أكبر من الملف الأصلي ، لأن كتل البيانات التي تتم استعادة VDI منها تحتوي على بيانات في المنطقة المحددة.

إذا لم يكن VDI موجودًا بعد ولا نعلم مقدار المساحة المطلوبة للقرص الظاهري ، فيمكننا استخدام qemu-img convert


 root@nod1 :~# qemu-img convert -f file -O qcow2 -o redundancy=2:1 ./disk_ukladany_do_vdi sheepdog:localhost:8000:disk 

على الرغم من أن تنسيقات VDI مثل qcow2 و qed وغيرها يمكن استخدامها في VDI. من أجل كفاءة الإدخال / الإخراج ، من الأفضل إجراء تحديد مسبق لكتل ​​البيانات.
, Sheepdog VDI.

http://www.sheepdog-project.org/doc/vdi_read_and_write.html


VDI


VDI , .


 root@nod1 :~# collie vdi check disk1 

VDI, . Sheepdog , . , .

: 'dog node kill' , ethernet , sheep . (, Ethernet), sheep . .


IO VDI


VDI . . , IO VDI.


Sheepdog SYNC, . -, VFS, , , .


VDI Sheepdog , . . Sheepdog VDI-.


VFS-


IO VDI sheep -n . SYNC , , VFS . , VFS , , !


. , — , , .


  sheep -n ... 

Sheepdog . -D


- . sheep - IO — SSD . , VDI, SYNC . .


, VDI , VDI . , , , VDI.


 sheep -w size=20000,directio,dir=/dir ... 

size


directio
sheep , . SSD.


dir


      ,     . 

( ) dog .


VDI dog vd cashe flush , VDI!


— . VDI, VFS , (/store_dir/journal/[epoch]/[vdi_object_id]), , .


IO , (cik, cak), (sequence).


, Sheepdog VDI , , SSD-. , VDI , , VDI.


sheep


 $ sheep -j size=256M ... 

, VDI , . -, — — -:


 $ sheep -j dir=/dir,size=256M ... 

dir = , . , SW RAID SSD.


: sheep , . , skip, .


 $ sheep -j dir=/dir,size=256M,skip ... 



  1. . 2015 . http://events.linuxfoundation.jp/sites/events/files/slides/COJ2015_Sheepdog_20150604.pdf
  2. http://www.abclinuxu.cz/blog/kenyho_stesky/2011/11/sheepdog-hrajeme-si-v-hampejzu
  3. SPOF ( S ingle p oint o f f ailure) , . SPOF VDI iSCSI tgtd
  4. 1
  5. Btrfs — COW, , . , -, . , , . , , . , :


    autodefrag — , .



    nocow — (), — GlusterFS


    Btrfs , , FS, Sheepdog .


    • , , ,
    • multipath, .

    , , , Sheepdog.


  6. Ext2 . - FS Btrfs, ext2, inode. ext3 ext4 . inode , Sheepdog . , -, . , Sheepdog , dog vdi check . , ext2 , — - dog vdi md , VDI .


  7. , , vdi QEMU_Block_Disk

المراجع


https://github.com/collie/sheepdog/wiki — ,
http://www.osrg.net/sheepdog/ — Nippon Telegraph and Telephone Corporation
http://www.sheepdog-project.org/doc/index.html — Sheepdog 0.8.0; — Valerio Pachera
http://www.admin-magazine.com/Archive/2014/23/Distributed-storage-with-Sheepdog — Udo Seidela Sheepdog , 23- Admin 2014

Source: https://habr.com/ru/post/ar412739/


All Articles