الـ Virtualization وتقنية الـ Xen
مقدمة:
الـ Virtualization أحد أهم وأكثر العناوين والمواضيع العلمية سخونة في الوقت الحالي وذلك بسبب كونها أحد تقنيات توفير الموارد وإستغلالها بشكل مميز. لكن، فكرت الـ Virtualization ليست جديدة على الإطلاق، وهناك أجهزة كالتي تنتجها شركة IBM كالـ pSeries والـ zSeries وغيرها من الأجهزة التي تدعم الـ Virtualization منذ وقت طويل جداً. وأيضاً هناك برامج مثل برنامج الـ VMWare أو الـ VirtualBox التي تدعم هذه التقنية أيضاً على الأجهزة التي هيكليتها من نوع x86 أو الـ Intel Based.
الآن الـ Virtualization يتجه صوب الـ Intel x86 والـ AMD ﻷنها أصبحت ذات كفاءة عالية وقادرة على تزويد الموارد/العتاد لتشغيل أكثر من جهاز تخيلي Virtual Machine واحد عليها بنفس الوقت، وهذا هو من أهم أسباب إختراع هذه التقنية أصلاً. أيضاً من الجدير بالذكر بإن الـ Virtualization أصبحت مزودة ظمن التوزيعات خاصة الـ SLES والـ openSUSE، وكل ما عليك هو تنصيب بعض البرامج والمشغلات الإضافية لهم عند تنصيب النظام أو بعده.
أولاً: التعرف على مفهوم الـ Virtualization
وهي فصل نظام التشغيل عن العتاد الذي يعمل عليه، بحيث يصبح النظام التشغيلي يعمل في بيئة تخيلية وكأنها حاسوب منفصل. هذه التقنية تتيح لنا أولاً مشاركة الموارد/العتاد الحقيقية وثانياً تشغيل أكثر من نظام تشغيل على نفس الموارد/العتاد وبنفس اللحظة.
من أهم مميزات الـ Virtualization بصورة عامة:
1- إستعمال العتاد بشكل مميز. حيث في بعض الأحيان تشغيل نظام واحد على العتاد ﻻ يقوم بإستغلال كامل لمواصفات العتاد وبالتالي نخسر هذه الإمكانيات التي يمكن إستغلالها بشكل أفضل.
2- تقليل وتقليص الوقت الزمني لتوقف الجهاز والنظام معاً، أي تقليل الـ Down Time للنظام. وذلك ﻷنه بإمكانك نقله بسهولة من جهاز الى آخر في حالة حصول أي مشكلة في العتاد على سبيل المثال.
3- المرونة في الإضافة/الحذف للعتاد عند الحاجة. بعض الأحيان تتغيير متطلبات النظام ويحتاج الى تغيير في العتاد المزود له (RAM، HardDisk، CPU، الى آخره) سواءاً بإضافة عتاد أكثر أو حذفها حسب الرغبة، أو أن تقوم بنقل النظام كله الى جهاز آخر إن لم يكن لديك عتاد يكفي لتشغيل ذلك الجهاز التخيلي.
ثانياً: التعرف على كيفية عمل الـ XEN
كما سبق وأن ذكرنا بإن فكرة الـ Virtualization ليست جديدة وإن لشركة IBM العديد من الأجهزة مبني بداخلها هذه التقنية. اليوم ومع التطور الكبير الذي يشهده عالم المصادر الحرة والمجانية تم عمل تقنية جديدة إسمها XEN. هذه التقنية تتيح لنا تشغيل أكثر من جهاز تخيلي على عتاد من نوع Intel x86. حسب آخر معلوماتي بإن هذه التقنية ﻻزالت غير قادرة على تشغيل جميع أنظمة التشغيل بسبب إنها تحتاج الى التعديل على مصدر Code الخاص بالنظام التشغيلي. ولهذا هي تشغل حالياً وبشكل مميز جداً الأنظمة التي مصدرها مفتوح Open Source System مثل Linux و BSD وﻻ أعرف إن كانت تستطيع تشغيل أنظمة مثل الـ Windows بسبب كون المصدر الخاص به غير مفتوح، بإستثناء نظام التشغيل Netware وذلك ﻷن شركة Novell نفسها قامت بالتعديل عليه لكي يصبح يعمل تحت تقنية الـ Xen. أيضاً بما إنني أتحدث هنا على الـ Virtualization كان لابد أن أشير الى إنه كل من شركة Intel و AMD تطور حالياً إضافات لمعالجاتها بحيث تصبح مبنية من الأساس وداعمة لمبدأ الـ Virtualization. شركة Intel تسمي هذه الإضافة بـ Vanderpool و AMD تسميه Pacifica في حال أردت عزيزي القاريء البحث عنهم ومعرفة المزيد حول هذين الإضافتين. الجميل في هذه الإضافات إنه في حال أصبحت مكتملة فإن الـ Xen سيستطيع تشغيل أي نظام تشغيل حتى لو كان مغلق المصدر مثل الـ Windows.
الآن لمعرفة كيف يعمل الـ Xen، علينا أن نتعرف على كل من:
1) معرفة أنواع الـ Virtualization
2) فهم هيكلية الـ Xen
1) نأتي الى الى معرفة أنواع الـ Virtualization أوﻻً:
النوع الأول: Full Virtualization
في هذا النوع يقوم البرنامج الخاص بالـ Virtualization بعمل بيئة تخيلية بالكامل متظمنة للعتاد أيضاً. ويصبح النظام التشغيلي الضيف الذي يعمل في هذه البيئة بمخاطبة والتعامل مع هذا العتاد التخيلي الذي قام البرنامج بعمله له. يعتبر برنامج الـ VMWare من أبرز البرامج التي تستعمل هذا النوع من الـ Virtualization.
النوع الثاني: Para Virtualization
بدل من عمل بيئة تخيلية بالكامل تقوم البرامج التي تعتمد هذا النوع بتزويد النظام الضيف بما يسمى النوافذ المبرمجة Application Programming Interface ومختصرها API. هذه النوافذ تسمح للنظام الضيف من إستعمال العتاد الحقيقي Physical Hardware عند الحاجة من خلال التخاطب معه. هذا النوع من الـ Virtualization يتطلب أن يكون النظام قادر على أن يعرف بإنه يعمل في بيئة تخيلية لكي يستطيع أن يطلب إستعمال النوافذ المبرمجة API. من أبرز البرامج التي تستخدم هذه الطريقة هي الـ Xen، أي الـ Xen هو عبارة عن برنامج Para-Virtualization.
الـ Para Virtualization تقدم أداء أفضل من الـ Full Virtualization وذلك ﻷنها ﻻ تقوم بعمل عتاد تخيلي Virtual Hardware وإنما تستعمل العتاد الموجود حسب الحاجة بواسطة البوابات البرمجية API's وبهذا ﻻ تحجز شيء هي ليست بحاجة له. وقد يقول البعض بإن سلبية الـ Para Virtualization والذي يستعمله الـ Xen هي كونه حالياً يشغل Linux و BSD و Netware فقط وﻻ يستطيع تشغيل الـ Windows مثلاً, أي الأنظمة مغلقة المصدر. لكن الحقيقة إنه صحيح الـ Full Virtualization قادر على تشغيل الأنظمة مغلقة المصدر، لكنه ﻻ يستطيع تشغيلها بنفس كفاءة وإمكانية البرامج التي تستخدم الـ Para Virtualization. ومن ميزات الـ Para Virtualization الأخرى على الـ Full Virtualization هي المرونة في الإضافة والحذف للعتاد عند الحاجة دون الحاجة الى عمل إعادة تشغيل للنظام الضيف. مثلاً تستطيع إضافة مساحات أخرى من الـ RAM للنظام الضيف عند حاجته لذلك دون أن تقوم بوقف عمل النظام وإعادة تشغيله مرة أخرى، أي كل هذا يتم في الـ Run Time.
2) فهم هيكلية الـ Xen
تقنية الـ Xen تعتمد على جزئين أساسيين إثنين، هما:
1- برنامج مراقبة الحاسوب التخيلي Virtual Machine Monitor. هذا الجزء يمثل الطبقة ما بين الأنظمة التخيلية المستضافة وبين العتاد، أي بعبارة أخرى هو حلقة الوصل التي تربط النظام الضيف والعتاد الرئيسي Physical Hardware. وبصورة عامة يسمى هذا البرنامج بالـ Hypervisor.
2- أدوات Xen أي Xen tools. وهي عبارة عن مجموعة من البرامج التي تسعتمل من خلال سطر الأوامر التي يحتاجها مدير النظام لإستخدام وإدارة الـ Virtual Machines.
برنامج الـ Virtual Machine Monitor يجب أن يكون يعمل قبل أن نستطيع تشغيل أي نظام تخيلي Virtual Machine. طبعاً عند العمل مع تقنية الـ Xen يسمى الـ Virtual Machine بالدومين Domain. أيضاً هذا البرنامج Virtual Machine Monitor ﻻ يملك مشغلات Drivers للتخاطب مع العتاد Hardware للجهاز المضيف وﻻ يملك منافذ Interface لكي يتم من خلالهم التواصل والتخاطب مع مدير النظام الـ Administrator. هذه الأمور تتم من خلال نظام تشغيل يعمل في الدومين رقم صفر Domain0. حيث يمثل الـ Domain0 المتحكم Controller بالأنظمة الأخرى المستضافة Guests التخيلية. أي بعبارة أخرى هو الذي من خلاله نستطيع أن نتحكم بباقي الأنظمة التخيلية التي تعمل على الجهاز. يتم ذلك كله من خلال خدمة إسمها xend والتي تعمل في الـ Domain0، وهي الخدمة التي تدير جميع الدومينات الأخرى.
ملاحظة: في عالم الـ Xen يسمى الـ Domain0 بالدومين صاحب الصلاحيات Privileged Domain والذي سيكون هو المضيف Host بينما الدومينات الأخرى التي ليس لها صلاحيات تسمى بالـ DomainU وهي الدومينات الضيف.
ثالثاً: فوائد الـ Virtualization بإستعمال تقنية Xen تحديداً
- أعلى إمكانية لإدارة العتاد وإستغلاله بشكل صحيح.
- تقليل من تكاليف العتاد.
- مرونة أكثر في الإستعمال.
- Virtual Hosting.
- تقليل من الـ Down-time وبها نصل الى زيادة الـ Avilability.
- زيادة الحماية بالمقارنة مع إستعمال الـ chroot والـ jails.
- إمكانية نقل النظام من مكان لآخر بسهولة.
- سهولة في الصيانة والترقية للعتاد.
- جعل النظام قابل للـ Hot Swap بغض النظر عن نوعه.
- إمكانية عمل التجارب ومن ثم التشغيل.
- غير ذلك.
رابعاً: الأنظمة التي يدعمها Xen
- Linux 2.4
- Linux 2.6
- NetWare 6.5 +
- NetBSD
- FreeBSD
- Plan9
- OpenSolaris
خامساً: طريقة تنصيب الـ Xen
لتنصيب الـ Xen سنبدأ من خلال وجود نظام SLES10 أو OpenSUSE راكب وجاهز أي لن نتطرق هنا الى كيفية تنصيب أي منهما. حيث سيمثل النظام openSUSE الـ Domain0 وسيكون هو النظام المستضيف والمتحكم بمن سنقوم بتنصيبهم من الأنظمة لاحقاً. نقاط يجب أن يتم مراعاتها:
- وجود مساحة كافية من القرص الصلب لتنصيب Xen دومين جديد وإن الدومين المستضيف Domain0 لا يستعمل كل القرص الصلب .
- للحصول على أعلى مرونة من حيث القرص الصلب يفضل إستعمال LVM في نظام Xen (الـ VLM ليس ضمن هذه الموضوع).
الطريقة الأولى: الآن لتشغيل Xen على جنو/لينوكس كل ما عليك فعله هو تشغيل الـ Yast (الشرح للتنصيب بإستعمال نظام openSUSE كما ذكرنا سلفاً) وبعد ذلك أذهب الى Software وقم بتشغيل الـ Software Management منه. وتأكد من تنصيب الحزم البرمجية التالية :
1) xen : ذه الحزمة تحتوي على برنامج الـ Xen Virtual Machine Monitir.
2) xen-tools : تحتوي على برنامج Xend ومحموعة من الأدوات تستعمل من سطر الأوامر لإدارة الـ Xen Sys.
3) kernel-xen : يحتوي على كيرنل تم تعديله لكي يصبح قادرا على العمل في Xen دومين.
4) xen-doc* : تحتوي على مجموعة من المراجع حول Xen.
5) yast2-vm: تحتوي على برنامج لإدارة الدومينات من خلال الواجهة الرسومية.
6) xen-tools-ioemu: هذه الحزمة سيتم ذكرها في الجزء الثاني من سلسلة إستعمال الـ Xen والتعامل معه، ﻷني أكتشفتها للتو أثناء القراءة والتأكد من بعض المعلومات. على كل حال هذه الحزمة هي لتمكين الـ Xen بالعمل وبنظام Full Virtualization.
الطريقة الثانية: قم بتشغيل الـ Yast وبعد ذلك أذهب الى System وقم بتشغيل الـ Virtual Machine Management - Xen، بما إنه سيكون هذه أول مرة تطلب تشغيل هذا البرنامج سيخبرك بإنه الـ Xen غير منصب ويحتاج الى تنصيب وكل ما عليك فعله هو إتباع الخطوات التي يطلبها منك.
عندما تقوم بتنصيب حزمة Xen فإنها تقوم بإضافة السطور التاليه بشكل تلقائي الى الملف الخاص بالـ Bootloader:
title Xen
root (hd0.3)
kernel /boot/xen.gz
module /boot/vmlinvz-xen root=/dev/hd0 selinvx=0
module /boot/initrd-xen
في السابق كان يستعمل في سطر kernel module متغير dom0-mem حيث كان يستعمل لتحديد حجم معين من الذاكرة للـ Domain0 عند لحظة الإقلاع للنظام. لكن في نسخة الـ Xen الثالثه لم يعد هناك حاجة لها بعد.
في بداية تشغيل الـ Domain0 يتم إستعمال كل الذاكرة الموجودة له ولكن بعد ذلك عند بدء عملية إضافة دومينات تقوم بتخصيص ذاكرة لكل واحد وبالتالي ذاكرة الـ Domain0 تقل.
السطور التي تم إضافتها إلى ملف ال menu.lst أو الـ grub.conf تضيف خيار جديد إلى القائمة التي تظهر عند لحظة الإقلاع Booting. هذا لخيار يمكنك من تشغيل الـ Xen Virtual Machine Monitor والذي هو السطر هذا (kernel /boot/xen.gz). وهو الذي بالطبع يقوم بتشغيل النظام openSUSE في الـ Domain0 الذي من خلاله نتحكم بباقي الدومينات.
قم بالتأكد أن جميع السطور داخل ملف الـ Module صحيحة حيث يجب أن يكون السطر الذي فيه root يؤشر الى القسم الخاص من القرص الصلب لديك والذي فيه نظام الملفات الذي سيقوم بتشغيل الـ Xen Virtual Machine Monitor بالإضافة الى النواة Kernel الخاص بالـ Domain0.
تأكد من نسخة الـ Xen الخاصة بالنواة Kernel والـ initrd تم وضعهم في سطر ال module. جميع الأسماء تنتهي بـ xen- .
بعد عملية التأكد من ملف إعداد الـ Bootloader أعد تشغيل جهازك وقم بإختيار السطر الذي فيه Xen. هذا سيقوم بتشغيل Xen Virtual Machine Monitor وبعد ذلك سيعمل الـ Domain0.
ملاحظات مهمة:
1) إذا حصلت أي مشكلة قم بعمل إعادة تشغيل وإختار الخيار الذي ليس فيه Xen لتشغيل النظام بالوضع الطبيعي.
2) عندما يعمل Xen إعدادات الشبكة التي يعدها Xen Management Process بعض الأحيان تعمل تداخل أو عدم توافق مع ملفات الإعدادات الخاصة بالدومينات. خاصة السكربت SUSEfirewall2 ولهذا يفضل إيقاف هذه السكربتات عند العمل في بيئة الـ Xen. لوقف عملها قم بتنفيذ التالي:
insserv -r SUSEfirewall2_setup
insserv -r SUSEfirewall2_init
insserv -r SUSEfirewall2_final
الأمر الأخير ليس بالضرورة كتابته.
سادساً: إدارة الدومينات بواسطة Yast
بعد قيامنا بعملية تنصيب Xen وأدواتها نستطيع الآن عمل دومينات Xen أخرى. سيتم عمل ذلك من خلال الـ Module الخاص بال Xen والذي يمكن تشغيله من خلال Yast هو Virtual Machine Management (Xen). هذه الأداة هي التي من خلالها نقوم بالتحكم بجميع الدومينات Xen التي على الجهاز ومنها نضيف دومينات جديدة. ﻻ تنسى لتشغيل هذه الأداة يجب ان يكون Linux يعمل في domain0.
لعمل domain جديد وقيامك بعمل boot له تابع الشرح مع الصور :
قم بتشغيل الأداة الخاصة بالــ Xen ، ستظهر لك الصورة التالية:
بعد ذلك ستجد في أسفل الصورة الأزرار التالية :
• Add -----> تستخدم لعمل domain جديد .
• Refresh -----> تعمل refresh للمعلومات الخاصة بالدومين .
• Delete -----> تقوم بحذف الدومين نهائيا .
• Start -----> تضغط عليها لتشغيل الدومين .
• View -----> تفتح Terminal لكي تشبك من خلاله على Console لدومين .
• Shutdown -----> تعمل Shutdown طبيعي للنظام التشغيل على الدومين .
• Terminate -----> تقوم بغلق الدومين دون إنتظار النظام التشغيلي الذي عليه ليغلق نفسه .
قم بالضغط على Add ستظهر الصورة التالية :
بعدها أترك الخيار كما هو بتشغيل نظام التنصيب وأضغط على Next لتظهر لك الصورة التالية:
قم بعمل الإعدادات اللازمة والتحديدات اللازمة (تحديد حجم القرص الصلب للنسخة التخيلية، حجم الـ RAM الى غير ذلك) وأضغط على Next لتظهر لك الصورة التالية:
حيث هنا سيظهر لك واجهة التنصيب ولكن بطريقة الـ Text Mode أي لن يكون عملية التنصيب من خلال الواجهات الرسومية المعتاد عليها بل بالطريقة المتقدمة بعض الشيء. بعد أن تنتهي عملية التنصيب وبعد ذلك قم بتشغيل النظام الجديد والذي سيكون عبارة عن دومين جديد يعمل على الـ Domain0.
أليك عزيزي القاريء هيكل توضيحي للدومينات والتي تعمل على Domain0:
طريقة تشغيل النظام الجديد والتعامل معه سيتم ذكرها بتفصيل أكثر في العدد القادم من مجلة مجتمع لينوكس العربي.
المراجع:
www.novell.com
http://en.opensuse.org/HOWTOs
http://en.opensuse.org/How_to_Install_a_Xen_VM_Server