smartos اولین برخورد!

اینم یه تجربه پراکنده دیگه!

سر کار اخیرا نیاز شد که یه سیستم با قابلیت virtualization نصب کنیم. خوشبختانه همکارمون که مسئول این کار بود از من در این مورد مشورت گرفت. توی کارهای خیلی جدی شرکت معمولا از vmware ESXi استفاده میشه اما اینجا من و این دوستمون علاقه‌مند شدیم که از یه تکنولوژی دیگه استفاده کنیم. هر دومون با kvm و linux آشنایی داشتیم پس مطمئن بودیم که میتونیم در بدترین حالت با استفاده از لینوکس مشکل رو حل کنیم. پس من پیشنهاد دادم بریم سراغ smartos. یه شرکت به نام joyent از این سیستم عامل پشتیبانی میکنه که اسپانسر nodejs و چیزهای دیگه هم هست. همونطور که قبلا هم گفته بودم این سیستم عامل یه مدته «چشم من رو گرفته» دلایلش هم ایناست

  1. ریشه اش به سولاریس برمیگرده که سیستم عامل بسیار خوبیه!
  2. از zfs پشتیبانی میکنه که اون هم سیستم فایل محشریه!
  3. از kvm به عنوان مجازی ساز سخت افزار استفاده میکنه
  4. از zone های سولاریس به عنوان مجازی سازی سبک(مراجعه کنید به این و این) پشتیبانی میکنه

کاری که ما میخواستیم انجام بدیم این بود که میخواستیم علی الحساب یه ماشین مجازی pfsense توش نصب کنیم و یه کارهایی باهاش انجام بدیم در حین این کار نکات جالب و قابل توجهی برخوردیم که میخوام اینجا مستندشون کنم

نکات جالب در برخورد من با این سیستم عامل اینهاست

  1. کل سیستم نیاز به نصب نداره! و فقط کافیه که روی هارد بتونه سیستم فایل zfs رو تشخیص بده. پس بروز رسانی در حد خاموش و روشن کردن سیستم هزینه داره. از اون سمت با استفاده از pxe میشه سیستم رو بوت کرد که یعنی کل هاردهای سرور جهت ذخیره سازی اطلاعات بکار میره
  2. از json برای توصیف ماشین‌های مجازی و zone هاش استفاده میکنه. که این قضیه برنامه نویسی کردن برای اون رو به شدت ساده میکنه

نکات قابل توجهی که من در حین کار بهش برخوردم اینا بود

  1. کارت شبکه mainboard یکم مشکل داشت و smartos هم درست ازش استفاده نمیکرد
  2. مدت زمان لازم برای reboot شدن ماشین مجازی pfsense زیاد بود(حدود ۵ دقیقه)
  3. نمیشد از توی pfsense سیستم رو reboot کرد
  4. نصب واسط گرافیکی برای راحت‌تر کار کردن لینوکس و یونیکس نابلدها با سیستم به نظر پر دردسر میرسید!

علی الحساب همین تا باز هم بیشتر باهاش کار کنم و نتایج رو بهتون بگم!

ماجراهای تکنولوژیک خانه من: برنامه بروزرسانی بعد از دو سال

اینم یه تجربه پراکنده دیگه!

همینطور که قبلا نوشته بودم(لینک، لینک، لینک) من تقریبا دوسال میشه که یه سیستم تمام وقت روشن توی خونه دارم که باهاش کارهای بسیاری میکنم که لیست اون کارها از این قراره:

  1. یه ماشین مجازی کوچک دارم و pfsense مسئولیت مسیریابی خونه رو به عهده داره
  2. روش minidlna دارم  که مسئولیت تفریحات فیلمی خونه رو برعهده داره
  3. روش یه samba server دارم که مسئولیت اشتراک فایل رو برعهده داره
  4. روش یه seafile سرور دارم که مسئولیت بک آپ اتوماتیک از تصاویر تلفن‌ها و اطلاعات مهم لپ تاپ‌ها رو برعهده داره.
  5. روش یه deluge دارم که شبها تورنتها رو دانلود و آپلود میکنه
  6. روش یه سرور taskwarior دارم که نقط بک آپ مدیریت لیست کارهایی هست که در هفته انجام میدم

کانفیگ سیستم هم اصلا جدید نیست و یه سیستم میشه گفت بسیار قدیمیه

  1. سی پی یو: AMD sempron 3000+ AM2
  2. رم : ابتدا ۱ گیگ و سپس ارتقا به ۲٫۵ گیگ
  3. هارد: ۵۰۰ گیگ
  4. سیستم عامل: اوایل ubuntu server و mint

این سیستم تقریبا با ثبات بسیار خوبی این دو سال گذشته رو خدمت رسانی کرده و من ازش راضیم خدا هم ازش راضی باشه! توی این دو سال من تجربه بسیاری خوبی در مورد مدیریت یه سیستم تنها به کمک ssh داشتم. همچنین توی این دوسال خانمم هم به مدت کوتاهی از این سیستم به عنوان دسکتاپ استفاده کرده.

اما این سیستم بعد از دوسال نیاز به بروزرسانی داره و من میخوام به دلایل زیر این سیستم رو از نظر سخت افزاری و نرم افزاری ارتقا بدم

  1. پرشدن هارد بر اثر دانلود زیاد
  2. نیاز به راه‌اندازی یک NAS به دلیل نزدیک شدن به پایان عمر مفید هارد دیسک‌های اکسترنال(حدودا سال ۸۷ خریداری شده اند)
  3. یادگیری تکنولوژی‌های جدید
  4. بهینه سازی سیستم فعلی

اما طرح من برای بهینه کردن این سیستم از این قراره که:

  1. علی الحساب میخوام سه تا هارد دو ترا به سیستم اضافه کنم که یکیش بک آپ اون دوتای دیگه باشه. همچنین نمیخوام از کارت raid استفاده کنم و ترجیحم اینه که از سیستم فایل zfs استفاده کنم.
  2. میخوام بتونم روی این سیستم از مجازی سازی سبک یا همون container های استفاده کنم که این استفاده هم کلی چیز جدید به من یاد میده
  3. میخوام سیستم عامل رو سبک کنم و میزان مصرف منابع کاهش بدم. برای این کار به نظر میرسه باید از لینوکس به یه سیستم عامل دیگه مهاجرت کنم که این مهاجرت کلی مطالب جدید به من یاد میده
  4. در صورتی که پولم برسه میخوام یه ssd بخرم و اون رو به عنوان cache به zfs اضافه کنم,

چالشهای پیش روم هم ایناست:

  1. zfs یک سیستم فایل بسیار قوی هست اما من فکر نمیکنم که هنوز به اندازه کافی اون رو بلدم که بخوام بهش اعتماد کنم و کل هاردهام رو به اون بسپارم
  2. zfs روی سیستم عامل freebsd و illumos و حتی linux وجود داره اما من نمیدونم کدوم پیاده‌سازی بهتر و با ثبات تره. البته باید بگم که پیاده‌سازی‌های موجود روی این سیستم‌ها قدیمی و با ثبات هستن
  3. تکنولوژی مجازی سازی سبک یا container‌ ها همنطور که اینجا هم بررسی کردم روی لینوکس freebsd و illumos با هم متفاوته من هیچ دید عملیاتی ندارم که کدوم بهتره.
  4. هر کدوم از این سیستم‌های یه سری کارها رو راحت کردن مثلا freebsd با freenas و nas4free کار رو برای پیاده‌سازی آسون zfs راحت کرده و شیر کردن و تورنت بازی این چیزا خیلی ساده شده. همچنین illumos با یه محصول به نام smartos مجازی سازی و مجازی سازی سبک و مدیریت اونها رو بسیار ساده کرده. که این انتخاب رو سخت میکنه

حالا با توجه به اینکه انتخاب‌های من کم نیستن بایستی یکم بیشتر بررسی کنم و انتخاب کنم.

همین!

مجازی‌سازی سبک قسمت دوم

اینم یه تجربه پراکنده دیگه!

همونطور که احتمالا همه میدونید الان بازار containerها یا همون مجازی سازی سبک در دنیا و خب در ایران داغه. من توی یه سری پست سعی میکنم (قسمت اول) که راهی رو که خودم برای درک این موضوع طی کردم رو بنویسم.

این دفعه در مورد اینکه آیا این نوع مجازی سازی جدیده یا قدیمی حرف میزنم و اینکه توی هر سیستم عامل این تکنولوژی چطور پیاده‌سازی شده. کل ایده این هست که سیستم عامل بتونه یه فضای ایزوله شده رو ایجاد کنه و در اون فضا یه سیستم عامل دیگه رو به اجرا در بیاره. اولین و قدیمی ترین تکنولوژی که در تمامی سیستم عامل‌های خانواده یونیکس که لینوکس هم عضوش هست ایجاد شده تکنولوژی chroot هست که فضای دیسک رو از فضای دیسک اصلی ایزوله میکنه. اما بعدی این تکنولوژی‌ها تکمیل شده و منابع دیگه‌ی سیستم غیر از سیستم فایل هم ایزوله میشن. این ایزوله کردن اصالتا بر عهده کرنل هر سیستم عامل هست و کرنل هست که مسئولیت این ایزوله سازی رو برعهده داره پس با توجه به تفاوت‌های سیستم عامل ها تکنولوژی‌های متفاوتی بوجود اومده که عبارتند از

  • لینوکس
    • Linux-VServer: این تکنولوژی یکی از قدیمی ترین(سال ۲۰۰۱) تکنولوژی‌های مجازی سازی در سطح سیستم عامل هست که نیاز به تغییر کرنل(پچ شدن کردن) برای بوجود آوردن امکان ایزوله کردن منابع سیستم هست. این سیستم متن باز بوده ولی هیچوت تغییراتش به هسته سیستم عامل راه پیدا نکرده
    • Parallels Virtuozzo Containers : این سیستم هم بسیار قدیمی است(سال ۲۰۰۱) و بصورت تجاری توسعه پیدا کرده.
    • OpenVZ: یک محصول متن بازه که اون هم نیاز به پچ کردن کرنل داره و تغییراتش هیچوت به درون هسته لینوکس راه پیدا نکرده. شروع توسعه این ابزار به سال ۲۰۰۵ برمیگرده.
    • ابزارهای مبتنی بر cgroups و namespaces در کرنل لینوکس: این تکنولوژی در سال ۲۰۰۶ توسط مهندسان گوگل شروع شده و به کرنل لینوکس راه پیدا کرده. با توجه به این ویژگی‌ها محصولات متفاوتی تولید شده
      • lmctfy: این ابزار توسط گوگل توسعه پیدا کرده و مورد استفاده قرار گرفته. شروع توسعه این ابزار به سال ۲۰۱۳ برمیگرده.
      • LXC: این ابزار تا اونجایی که من میدونم از دل اوبانتو در اومده و تبدیل به یک ابزار قابل استفاده شده. اما به دلیل مستندات محدود خیلی مورد استفاده قرار نگرفته. شروع توسعه این ابزار به سال ۲۰۰۸ برمیگرده.
      • Docker: سازندگان این ابزار ارائه دهنده سرویس paas بودند که از روند مشابهی برای مدیریت paas خود استفاده می‌کردند و تجربیات خودشون رو در قالب این ابزار ارائه دادند. این ابزار به دلیل سادگی، مستندات خوب و معرفی راه‌حلهای کارا بسیار مقبولیت پیدا کرده. شروع توسعه این ابزار به سال ۲۰۱۳ برمیگرده.
      • libvir lxc: این ابزار هم جزئی از کتابخانه libvirt برای مدیریت تکنولوژی‌های مجازی سازی هست که ابزاری برای مجازی سازی سبک هم ارائه کرده.
  • FreeBSD Jail: در این سیستم عامل از سال ۱۹۹۸ کرنل از ویژگی‌ای به نام jail پشتیبانی میکنه که مجازی سازی سبک رو بوجود میاره. برخلاف لینوکس که چند  ویژگی مجزا کرنل برای مجازی سازی سبک استفاده میشه ویژگی jail در freebsd یک ویژگی یک پارچه برای مدیریت مجازی سازی سبک به حساب میاد ابزارهای سطح بالایی هم برای این مدیریت این ویژگی بوجود اومده که لیست کوتاه اونها در پایین اومده:
  • Solaris Containers: این تکنولوژی در هسته سولاریس از سال ۲۰۰۵ وجود داره و من اطلاع زیادی از اون ندارم
  • sysjail: این تکنولوژی در هسته netbsd و openbsd تا سال ۲۰۰۹ وجود داشته و من اطلاع زیادی از اون ندارم
  • WPARs: یک سیستم خاص منظور برای سیستم عامل AIX هست(سال ۲۰۰۷) و من اطلاع زیادی از اون ندارم
  • HP-UX Containers (SRP): این تکنولوژی مختص HPUX هست(سال ۲۰۰۷) که من باز اطلاع خاصی ازش ندارم
  • Sandboxie: این یه تکنولوژی برای ویندوز هست و من دیدم دوستانی که روی بررسی ویروسها کار میکنن ازش استفاده میکنن.

همونطور که میبیند این سیستم و تکنولوژی‌های و ابزارهای مرتبط با اونها جدید نیستن اما اخیرا دوباره مورد استفاده قرار گرفتن.

همین!

 

مجازی سازی سبک قسمت اول

اینم یه تجربه پراکنده دیگه!

من به شخصه این مدت با توجه به ظهور پدیده ای به نام docker شرو ع به خوندن تکنولوژی‌های زیادی کردم که مهمترینشون مجازی سازی سبک یا مجازی سازی در سطح سیستم عامل هست. سعی میکنم در چند قسمت بصورت خیلی خودمونی و تو دل برو (بخوانید user friendly) بنویسم که این تکنولوژی‌های به چه دردی می‌خورن و کجاها استفاده میشن.

بصورت خیلی خلاصه کل کاری که مجازی سازی سبک انجام میده اینه که با استفاده از کرنل موجود سیستم عامل، یه ماشین مجازی سبک با سیستم عامل همخوانواده سیستم عامل ماشین میزبان بالا میاد. در حقیقت عین اینه که شما با استفاده از اون کرنل یه محیط ایزوله شده از سیستم اصلی بوجود بیارید. این موضوع و تکنولوژی‌های مرتبط باهاش جدید نیستن و از سن زیادی برخوردار هستن.

مهمترین سوالی که بایستی بهش جواب داده بشه اینه که چرا این مجازی سازی سبک به شمار میاد. یکی از مهمترین‌هاش اینه که سرعت بوت شدن و لود شدن این سیستم‌ها به نصبت ماشین‌های مجازی معمول به شدت کمتره. میگن شما زمانی که برای آماده سازی یک ماشین فیزیکی نیاز داری چند ساعت، یک ماشین مجازی عادی نیاز داری چندین دقیقه و یک ماشین مجازی سبک نیاز داری چند ثانیه است. پس این ماشین مجازی سبکه. دومین نکته اینه که اجرای این ماشین مجازی سربار اضافه‌ای روی ماشین میزبان نداره. توی سیستم‌های مجازی سازی قدیمی عملا یک تبدیل از کد باینری یا همون اسمبلی ماشین میهمان به دستورات سی پی یو ماشین میزبان انجام میشد که خب سربار قابل توجهی داشت. این سربار با اومدن تکنولوژی‌های virtualization در سطح سی پی یو کاهش زیادی پیدا کرده اما هنوز هم این سربار قابل توجه. اما به علت یکسان بودن کرنل سیستم عامل میهمان و میزبان عملا این سربار وجود نداشته پس سیستم سبک تر خواهد بود.

فعلا همین!

منتظر قسمت‌های بعدی این نوشته باشید!