مدیریت زیرساخت ابر
مدیریت زیرساخت ابر
چکیده
مشخصهی اصلی رایانش ابری، فراهم ساختن زیرساخت IT و کاربردهای آن به شکل یک سرویس به طریقی توسعهپذیر میباشد. تاکنون نرمافزارهایی برای این منظور طراحی و پیادهسازی شدهاند. در این گزارش قصد داریم سه مورد از این نرمافزارها را معرفی کنیم و مؤلفههای سازنده و معماری آنها را مورد بررسی قرار دهیم.
فهرست مندرجات
2.3.1- معرفی مؤلفههای اصلی OpenStack[3]
2.3.2- رابطهای مؤلفههای OpenStack
1 مقدمه
رایانش ابری مدلی است برای فراهم کردن دسترسی آسان بر اساس تقاضای کاربر از طریق شبکه به مجموعهای از منابع رایانشی قابل تغییر و پیکربندی (مثل: شبکهها، سرورها، فضای ذخیرهسازی، برنامههای کاربردی و سرویسها) که این دسترسی بتواند با کمترین نیاز به مدیریت منابع و یا نیاز به دخالت مستقیم فراهمکننده سرویس به سرعت فراهم شده یا آزاد (رها) گردد.
پیدایش مفاهیم اساسی رایانش ابری به دهه ۱۹۶۰ بازمی گردد. زمانی که جان مک کارتی اظهار داشت که «رایانش ممکن است روزی به عنوان یکی از صنایع همگانی سازماندهی شود».
واژهٔ ابر در واقع بر گرفته از صنعت تلفن است به این گونه که کمپانیهای ارتباطات راه دور که تا دهه ۱۹۹۰ تنها خطوط نقطه به نقطهٔ اختصاصی ارائه میکردند، شروع به ارائه شبکههای خصوصی مجازی با کیفیتی مشابه و قیمتهای کمتر نمودند. نماد ابر برای نمایش نقطه مرزی بین بخش هایی که در حیطه مسئولیت کاربرند و آنهایی که در حیطه مسئولیت عرضه کننده بکار گرفته میشد. رایانش ابری مفهوم ابر را به گونهای گسترش میدهد که سرورها را نیز علاوه برزیر ساختهای شبکه در بر گیرد.
در اواسط سال ۲۰۰۸ شرکت گارتنر متوجه وجود موقعیتی در رایانش ابری شد که برای «شکل دهی ارتباط بین مصرف کنندگان خدمات فناوری اطلاعات، بین آنهایی که این سرویسها را مصرف میکنند و آنها که این سرویسها را میفروشند» بوجود میآید.
سرویسهای زیرساخت ابری یا «زیرساخت به عنوان سرویس1» زیرساخت رایانهای را که عموماً یک بستر مجازی است را به صورت سرویس ارائه میدهند. کاربران به جای خرید سختافزار و نرمافزار و فضای مرکز داده (دیتا سنتر) ویا تجهیزات شبکه، همهٔ این زیر ساختها را به صورت یک سرویس کاملاً برونسپاری2 شده میخرند.
برای مدیریت سرویسهای زیرساخت ابری نرمافزارهایی مانند OpenStack , CloudStack , اوکالیپتوس و … توسعه داده شده اند. در این گزارش قصد داریم دو مورد از نرمافزارهای IaaS را مورد بررسی قرار دهیم.
Openstack یک سیستم عامل ابریست که توسط شرکت RedHat توسعه داده شده است.OpenStack با فراهم کردن مجموعهای کامل از ابزارها این امکان را به کاربران و شرکتها میدهد تا به راحتی منابع خود را کنترل و مدیریت کنند.در ادامه این سیستم عامل را به صورت کامل معرفی میکنیم و مؤلفههای را آن را مورد بررسی قرار میدهیم.
در بخش دوم به معرفی نرمافزار اوکالیپتوس میپردازیم. اوکالیپتوس نرمافزاری مبتنی بر لینوکس است که ابرهای خصوصی و ترکیبی را بر روی زیرساختهای موجود پیادهسازی میکند.
در بخش سوم نرمافزار OpenNebula را معرفی میکنیم و رابطهای آنرا را مورد بررسی قرار میدهیم.
2 OpenStack
2.1 معرفی
Openstack یک سیستم عامل ابری3ست.openstack کنترل منابع یک دیتاسنتر – محاسباتی،ذخیره سازی و شبکه – را بر عهده دارد. کنترل این منابع با استفاده از یک داشبورد4 مدیریت میشود.داشبورد با فراهم کردن یک محیط مبتنی بر وب به مدیران و کاربران اجازه میدهد تا با اجزاء openstack در ارتباط باشند.[1]
تصویر 1
هدف پروژهی openstack ، پیادهسازی آسان، مقیاسپذیری گسترده و فراهمسازی مجموعهای غنی از امکانات میباشد.
2.2 مؤلفههای5 OpenStack
OpenStack از تعداد زیادی مؤلفه تشکیل شده است :[2]
- trove
- nova
- glance
- ironic
- designate
- oslo-incubator
- governance
- ...
- cliff
- gantt
- keystone
- taskflow
- cinder
- swift
- python-keystonclientsite
- shara
OpenStack پروژهای متنباز6 است، به همین دلیل هرکسی میتواند بر اساس نیاز خود مؤلفه و ویژگی جدیدی به آن اضافه کند. همانطور که در لیست بالا مشاهده میکنید OpenStack از مؤلفههای بسیار زیادی تشکیل شده است اما هسته7 اصلی آن شامل۹ مؤلفه میباشد. در ادامه به معرفی و بررسی این مؤلفهها میپردازیم.
2.3 هستهی OpenStack
راه اندازی یک ماشین مجازی شامل تعداد زیادی تعاملات بین سرویسهای مختلف openstack میباشد.نمودار زیر ارتباط و تعامل بین مؤلفههای مختلف openstack را نمایش میدهد.
تصویر 2: مؤلفههای اصلی openstack
همانطور که در نمودار بالا مشاهده میکنید هسته اصلی openstack شامل ۹ مؤلفه می باشد. برای توسعهی این مؤلفهها از زبان برنامهنویسی پایتون استفاده شده است.در ادامه به بررسی این ۹ مؤلفه می پردازیم:
2.3.1 معرفی مؤلفههای اصلی OpenStack[3]
جدول 1: اجزای هستهی OpenStack
سرویس | نام پروژه | توضیحات |
Compute | Nova | Nova ، نام پروژه محاسباتی8 OpenStack است.Nova قسمت اصلی یک سیستم IaaS میباشد که وظیفهی کنترل محاسبات ابری را برعهده دارد. افراد و شرکتها میتوانند با استفاده از Nova سیستمهای محاسباتی ابری خود را را مدیریت و هاست کنند. وظیفهی Nova مدیریت چرخهی زندگی ماشینهای مجازی در محیط openstack میباشد. مسئولیت به وجود آوردن9، زمانبدی10 و انهدام11 ماشین مجازی را برعهده دارد. |
Networking | Neutron | قابلیت های شبکه را برای دیگر مؤلفههای OpenStack فراهم میکند.این پروژه کمک میکند تا اطمینان حاصل شود هر یک از مؤلفههای OpenStack میتوانند با هم ارتباط برقرار کنند. |
Dashboard | Horizon | Horizon یک رابط کاربری مبتی بر وب است. این پروژه با تمامی سرویسهای openstack در ارتباط است و امکاناتی مانند اجرای یک ماشین مجازی، اختصاص IP addresses و تنظیم کنترل دسترسی12 را بر عهده دارد. برای توسعه و طراحی13 از فریمورکهای Django و Bootstrap استفاده شده است. |
Image Service | Glance | این پروژه سرویس هایی برای پیدا کردن14، ثبت کردن15 و بازگردانی16 تصاویر17 ماشینهای مجازی فراهم میکند.با استفاده از RESTful API میتوان گزارش18 هایی تهیه کرد که شامل متاداده هایی در مورد تصاویر ماشین مجازی هستند. تصاویر را میتوان به صورتهای مختلفی -یک فایل سیستمی یا با استفاده از Swift ذخیره سازی کرد. |
Telemetry | Ceilometer | هدف این پروژه پیادهسازی سیستم حسابداری و مدیریت برای تمامی سرویسهای openstack میباشد. |
Identity Service | Keystone | سرویس احزار هویت19 و مجوز20 برای سرویس های دیگرOpenStack فراهم می کند. |
Orchestration | Heat | این پروژه به توسعه دهندگان21 این امکان را میدهد تا نیازمندی های مربوط به یک نرمافزار ابری را در یک فایل ذخیره سازی کنند و مشخص کنند چه منابعی برای آن نرمافزار مورد نیاز است بدین صورت کمک میکند تا infrastructure مورد نیاز برای اجرای نرمافزار مدیریت شود. |
Block Storage | Cinder | سرویس دخیره سازی بلوک22 را برای OpenStack فراهم میکند. |
Object Storage | Swift | Swift مخرنی برای object/blob است که بسیار در دسترس، توزیع شده و سازگار میباشد. افراد و شرکتها میتوانند با استفاده از آن مقدار زیادی از اطلاعات را به صورت کارآمد، امن و ارزان دخیرهسازی کنند. |
Block Storage | Cinder | سرویس دخیره سازی بلوک23 را برای OpenStack فراهم میکند. |
برای هرکدام از این ۹ مؤلفهی اصلی یک رابط کاربردی برنامهنویسی24 تعریف شده است. این رابط امکان را میدهد تا تمامی مؤلفهها به راحتی با یکدیگر در ارتباط باشند. این رابطها به صورت RESTful پیادهسازی شدهاند.در ادامه به تعریف RESTful API میپردازیم و رابطهای مؤلفههای OpenStack را مورد بررسی قرار میدهیم.
2.3.2 رابطهای مؤلفههای OpenStack
همانطور که گفته شود رابطهای OpenStack به صورت RESTful پیادهسازی شدهاند.پس در ابتدا این رابطها را تعریف و ویژگی آنها را مورد بررسی قرار میدهیم.
REST 25 چیست؟
REST انتزاعی26 از معماری شبکه جهانی وب است. به طور دقیقتر، REST یک سبک معماریست که متشکل از مجموعهای هماهنگ از محدودیتهای معماری اعمالشده به مؤلفهها، اتصالدهندهها و عناصر داده درون یک سیستم توزیعشده است.REST به منظور تمرکز بر نقش مؤلفهها و محدودیتهای موجود هنگام تعامل مؤلفهها از جزئیات پیادهسازی مؤلفهها و سینتکس27 پروتکلها چشمپوشی میکند.[4]
ويژگیهای یک سیستم REST توسط شش قاعده تعریف میشود:[5]
-
کلاینت – سرور28 باشد.
-
بدون حالت29 باشد.
-
قابلیت cache داشته باشد.30
-
سیستم لایهبندی31 شده داشته باشد.
-
واسط یکنواخت32 داشته باشد.
-
دارای قابلیت کد در صورت نیاز باشد.33
معماری REST بهگونهای است که از پروتکل HTTP استفاده میکند. منابع34 مفهوم مرکزی REST میباشند.منابع با کمک URI 35نمایش داده میشوند.کلاینت درخواستی36 را با استفاده از URI و متدهای پروتکل HTTP ارسال می کند و سرور بر اساس آن متد و URI پاسخ را برای کلاینت ارسال میکند.
جدول 2: متدهای HTTP
Examples | Action | HTTP |
http://example.com/api/orders | Obtain information about a resource | GET |
http://example.com/api/orders/123 | Obtain information about a resource | GET |
http://example.com/api/orders | Create a new resource | POST |
http://example.com/api/orders/123 | Update a resource | PUT |
http://example.com/api/orders/123 | Delete a resource | DELETE |
برای پیادهسازی RESTful API به کمک پایتون37 میتوان از framework زیر استفاده کرد:
- Django
- Flask
- Bottle
- Werkzeug
- …
با وجود این framework ها، توسعهدهندگان Openstack خود با استفاده از ماژولهای پایتون اقدام به طراحی RESTful API کردهاند.این ماژولها عبارتند از:
- eventlet
- greenlet
- Routes
- ...
- WebOb
- websockify
- wsgiref
- SQLALchemy
برای مثال رابط Glance API را مورد بررسی قرار میدهیم. میخواهیم اطلاعاتی در مورد تصاویر موجود در پایگاه دادهی Glance به دست آوریم.
ابتدا با کمک ماژول pycurl درخواستی را میسازیم که شکل نهایی این درخواست به صورت زیر میباشد:
جواب رابط Glance :
2.4 معماری پیادهسازی OpenStack[3]
یکی از معماریهای متداول برای پیادهسازی openstack استفاده از معماری Three-Node with OpenStack Networking میباشد:
-
نود کنترلکننده Identity service, Image Service ، بخشهای مدیریتی محاسبات و شبکه،Networking plug-in و داشبورد را اجرا میکند. همچنین شامل سرویسهای پایگاه داده، message broker و NTP38 میباشد. در صورت تمایل، نود کنترلکننده بخشهایی از Block Storage , Object Storage , Database Service , Orchestration و Telemetry را اجرا میکند. این مؤلفهها ویژگیهای اضافی برای محیط OpenStack فراهم میکنند.
-
نود شبکه Networking plug-in, layer 2 agent و layer3 agent را اجرا می کند. سرویسهای لایهی دوم شامل آمادهسازی39 تونلها و شبکههای مجازی میباشد.سرویسهای لایه سوم شامل مسیریابی 40 ، NAT و DHCP میباشد. همچنین این نود اتصال به اینترنت برای ماشینهای مجازی فراهم میکند.
-
نود محاسبات بخش مانیتور ماشین مجازی را اجرا می کند. به طور پیشفرض این نود از KVM برای مانیتور ماشین مجازی استفاده میکند.همچنین این نود Networking plug-in و layer 2 agent را اجرا می کند.
تصویر 3: معماری Three-Node
3 اوکالیپتوس41
اوکالیپتوس[7] نرمافزاری مبتنی بر لینوکس است که ابرهای خصوصی و ترکیبی را بر روی زیرساخت42های موجود پیادهسازی میکند .اوکالیپتوس تجمع منابع محاسباتی، دخیرهسازی و شبکه را مقدور میسازد .این منابع میتوانند بر اساس حجم کاری نرمافزار43 افزایش یا کاهش داده شوند.[6]
3.1 مؤلفههای اوکالیپتوس
اوکالیپتوس از ۶ مؤلفه تشکیل شده است:[8] [9]
تصویر 4: مؤلفههای اوکالیپتوس
جدول 3: معرفی مؤلفههای اوکالیپتوس
نام مؤلفه | زبان برنامهنویسی | توضیحات |
Cloud Controller (CLC) | Java | CLC برای مدیران،توسعه دهندگان و کاربران نهایی44 نقطهی ورود به کلود محسوب میشود. ClC برای به دست آوردن اطلاعات در مورد منابع از مؤلفههای دیگر گزارش میگیرد، برای زمانبدی در سطح بالا تصمیمگیری میکند و درخواستهایی به Cluster Controller ارسال میکند. به عنوان یک رابط کاربری برای پلتفرم مدیریت،CLC وظیفهی مدیریت و نمایش منابع مجازی را دارد. |
Warlus | Java | Warlus به کاربر اجازه میدهد تا دادهها را صورت Objects/Buckets دخیره کند.با استفاده از Warlus میتوانید Buckets را بسازید،پاک کنید ویا لیست کنید. |
Cluster Controller (CC) | C | CC با اجرا شدن برروی یک ماشین واسط که دارای اتصال به شبکه است، ماشینهایی که CLC و NC را اجرا میکنند به یگدیگر متصل میکند. CC شبکههای ماشین مجازی را مدیریت میکند.CC همچنین اطلاعاتی را در مورد مجموعهی NCها جمعآوری میکند و اجرای ماشین مجازی را زمانبدی میکند. |
Storage Controller (SC ) | Java | SC با CC و NC در ارتباط است و حجم بلوک ها و spanshot های ماشینهای مجازی در یک کلاستر را مدیریت میکند. |
Node Controller (NC ) | C | NC بر روی همهی ماشینهایی که VM instances را هاست میکنند اجرا میشود.NC فعالیتهای VM را کنترل میکند.این فعالیتها شامل اجرا45، بازرسی46 و خاتمه دادن VM instances میباشد. |
Vmware Broker (VB ) | - | VB مؤلفهی اختیاری اوکالیپتوس است و در صورتی قابل دسترسی که کاربر مشترکِ47 اکالیپتوس باشد.VB این امکان را فراهم میکند تا ماشینهای مجازی بر روی زیرساخت Vmware پیادهسازی شوند. |
4 OpenNebula
OpenNebula [10] نرمافزاری متنباز، برای مجازیسازی دیتاسنتر استفاده میشود.این نرمافزار به گونهای طراحی شده است تا به راحتی با هر زیرساختی تطبیق داده شود و همچین توسط مؤلفههای جدید توسعه یابد.نتیجه یک سیستم ماژولار است که میتواند انواع معماریهای ابر پیادهسازی کند و با سرویسهای دیتاسنترهای متعدد رابطه داشته باشد.در ادامه رابطهای اصلی OpenNebula را بررسی میکنیم.[11]
++C زبان برنامه نویسی مورد استفاده در هستهی OpenNebula میباشد.از Ruby برای توسعه و طراحیCLI و GUI استفاده شده است.
ما رابطهای OpenNebula را به دو دستهی اصلی تقسیم کردهایم: رابطهای ابر48 و رابطهای سیستم49.
تصویر 5: رابطها و معماری OpenNebula
4.1 Cloud Interfaces
رابطهای ابر این امکان را برای کاربر فراهم میسازد تا از طریق REST API به راحتی ماشینهای مجازی،شبکهها و تصاویر را مدیریت کند.رابطهای ابر پیچیدگیهای ابر را مخفی میکند و مخصوصاً برای کاربران انتهایی مفید است. OpenNebula دو نوع رابط را پیادهسازی میکند:
نام رابط | توضیحات |
EC2-Query API | OpenNebula قابلیتهای ارائه شده توسط [12] Amazon's EC2 API -به طور عمده،قابلیتهایی که مربوط به مدیریت ماشینمجازی باشند-پیادهسازی میکند.در این صورت میتوان از تمامی ابزارهای گزارش EC2 استفاده کرد تا به OpenNebula Cloud دسترسی داشت. |
OCCI-OGF | این رابط یک سرویس RESTful است که امکان ساختن،کنترل کردن و مانیتور منابع ابر را فراهم میسازد. |
4.2 Systems Interfaces
نام رابط | توضیحات |
OpenNebula XML-RPC Interface | رابط اصلی OpenNebula است. با استفاده از این رابط میتوان به تمامی قابلیتهای OpenNebula دسترسی داشت.برای مثال میتوان منابع OpenNebula (ماشینهای مجازی،شبکهها،تصاویر، کاربرها، هاستها و کلاسترها) را مدیریت کرد. اگر برای نرمافزارهای ابر50 کتابخانههای تخصصی توسعه میدهید یا نیاز به این رابط سطح پایین برای ارتباط با هستهی OpenNebula دارید از رابط XML-RPC استفاده کنید. |
The OpenNebula Cloud API (OCA) | این رابط یک راه ساده و راحت برای ارتباط با هستهی OpenNebula فراهم میکند.رابطهای OCA قابلیتهایی مانند XML-RPC فراهم میسازد. اگر ابزارهای پیشرفتهی IaaS توسعه میدهید که نیازمند دسترسی کامل به قابلیتهای OpenNebula میباشد از رابطهای OCA استفاده کنید. |
OpenNebula Drivers Interfaces | تعاملات میان OpenNebula و زیرساختهای ابر توسط درایورهای مخصوص هر زیرساخت انجام میگیرد. |
OpenNebula Database | OpenNebula حالت51 و اطلاعات حسابداری زیادی را در پایگاه داده به صورت مداوم ذخیرهسازی میکند. |
1IaaS
2Outsource
3Cloud Opreating System
4Horizon
5Components
6Open Source
7Core
8Compute
9Spawning
10Scheduling
11Decommissioning
12Access Control
13Develop & Design
14Discovering
15Registering
16Retrieving
17Images
18Query
19Authentication
20Authorization
21Developers
22Block Storage
23Block Storage
24API
25Representational State Transfer
26Abstraction
27Syntax
28Clinet - Server
29Stateless
30Cacheable
31Layered System
32Unifrom Interface
33Code on Demand
34Resources
35Uniform Resource Identifier
36Request
37Python
38Network Time Protocol
39Provisioning
40Routing
41Eucalyptus
42Infrastructure
43Application
44End-Users
45Execution
46Insepection
47Subscriber
48Cloud Interfaces
49System Interfaces
50Cloud Applications
51State