در راستای یک پروژه، قصد داشتم روی یک سخت افزار تعداد زیادی ماشین مجازی داشته باشم. به همین دلیل روی روشهای مختلف مجازی سازی بررسی کلی انجام دادم و در نهایت تونستم کاری که میخواستم رو انجام بدم. تو وبلاگ قصد دارم اطلاعات کلی که به دست اوردم و همچنین روش انجام کار رو بنویسم تا افراد دیگه هم استفاده کنن.
اولین مرحله برای انجام یک کار، انتخاب روش کار مناسب از بین روشهای متفاوت هست. برای هر کاری که میخواین انجام بدین، اولش باید نیازمندی های خودتون رو مشخص بکنین. نیازمندی های مساله من موارد زیر هست:
- بار کاری بسیار کم سیستم عامل مهمان
- میزان حافظه رم مورد نیاز برای ماشین ها کم باشه
- سیستم عامل مهمان تفاوتی نمیکنه چی باشه
- رابط های شبکه به صورت کامل در کنترل ماشین مجازی باشه
- امکان باشه که با رابط دستوری ماشین های مجازی رو کنترل کرد
مجازی سازی
یه سوال، مجازی سازی همون تجرید (abstraction) هست؟ چه فرقهایی با همدیگه دارن؟
تجرید به صورت کلی اگر تعریف کنیم، یه ساده سازی از رابط برای سیستم هست. تو طراحی سیستم (همون طور که قبلا گفته بودم) از تجرید برای ساده سازی طراحی خیلی استفاده میشه. برای مثال یک فایل، تجریدی از محل خاصی از فضای ذخیره سازی است.
مجازی سازی در عوض، یک رابط جداگانه برای سیستم عرضه میکند. رابط عرضه شده توسط مجازی سازی الزاما ساده تر نیست. این رابط جدید هم برای cpu و دیسک و یا شبکه میتونه عرضه بشه. پس میتونیم بگیم که مجازی سازی برای مجموعه منابع مشخصی از سیستم، میتونه یک عده رابط های جدید تعریف بکنه و با استفاده از اون رابط ها وظایف خاصی برای سیستم مشخص کرد. مثلا برای پردازنده x86 یک رابط جدید تعریف میکنین که بتونه دستورات powerPC رو هم اجرا بکنه.
انواع متفاوت مجازی سازی
به صورت کلی میتونیم مجازی سازی رو تو سه نوع تعریف کنیم.
- مجازی سازی سطح سیستم -system-level virtualization
- Full Virtualization: در این روش مجازی سازی، سیستم مهمان اطلاعی از اینکه بر روی بستر مجازی اجرا میشود نداره.
- Paravirtulization: در این حالت مجازی سازی، سیستم عاملی که به صورت مهمان بر روی سیستم هست، از اینکه بر روی یک بستر مجازی اجرا میشود اطلاع دارد. در این سیستم ها فرمان های ابزارهای سیستم مجازی به سیستم میزبان ارسال میشه.
- Hardware assisted virtualization: این روش یه نوع full virtualization هست، که پردازنده اصلی دستورات خاصی برای مجازی سازی سخت افزار رو تو خودش داره. برای مثال تو پردازنده های اینتل فناوری vtx وجود داره تا بشه با استفاده از اون مجای سازی کارایی بهتری پیدا بکنه. روش این کار هم مثل همون بیت وضعیت هسته و کاربر هست. یه وضعیت اضافه میشه به اسم vritual. تو این وضعیت فرمان ارسالی مشخص میشه که از سمت سیستم مجازی داره ارسال میشه. با این روش میشه بدون کاهش سرعت سیستم جدیدی بوجود آورد.
- Hybrid virtualization: یه روش ترکیبی بین paravirtualizatio و full virtualization هست.
- مجازی سازی سطح پردازش- Process-level virtualization
- مجازی سازی سطح سیستم عامل-OS virtualization
توی این روش، عملا ماشین مجازی خودش میشه یه پردازش لایه کاربر. به این معنی که در عوض شبیه سازی سخت افزار، لایه هسته برای چند برنامه سطح کاربر مثل یه هسته جداگانه سرویس میده. تو این روش بین چند سیستم عامل مهمان یک هسته مشترک وجود داره و برنامه های اون سیستم عامل مهمان مستقیما روی اون هسته اجرا میشه. برای این روش از OpenVZ و jails میشه استفاده کرد.
تو بخش بعدی در مورد انواع روشهای مجازی سازی سطح سیستم صحبت میکنیم.