راه اندازی یک سرور مجازی لینوکس

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

 

مفهوم کلاستر

کلاسترها یکی از جذاب ترین مفاهیمی هستند که در بحث های پردازش موازی و سرویس دهنده مطرح می شوند. به طور عام ، مفهوم کلاسترها به یک مجموعه از کامپیوترها اطلاق می شود که با اشتراک قدرت پردازشی یکدیگر، توان بیشتری را برای انجام دادن امور پردازشی محوله فراهم می کنند. یک کلاستر شامل چندین ماشین است که در یک شبکه محلی پرسرعت به هم متصل شده و با استفاده از یک برنامه زمانبندی و هماهنگ سازی میان ماشین های شبکه، امور پردازشی را انجام می دهند .
گونه ای از این کلاسترها موسوم به load-balancing cluster وظیفه موازنه کردن ترافیک شبکه را میان ماشین های شبکه بر عهده دارند. هدف این نوشتار نیز پیاده سازی چنین کلاستری است که بتواند با تقسیم کردن درخواست های سرویس ارسالی از کاربران یک شبکه میان چند سرویس دهنده ، از تراکم حجم کاری بر روی یک سرویس دهنده بکاهد .

 

طرح ریزی کلاستر 
کلاستر شامل یک سرور مجازی مبتنی بر سیستم عامل لینوکس و تعدادی سرور فیزیکی خواهد بود که با استفاده از یک سوئیچ ، با هم در ارتباط هستند . هدف شبکه، ارائه سرویس هایی مانند وب و ایمیل به کاربران است. کاربران از طریق یک بستر شبکه ای، مانند اینترنت، با سرور مجازی ارتباط دارند . سرورهای فیزیکی می توانند بر هر سیستم عاملی مبتنی باشند. وظیفه سرور مجازی لینوکس ، بااستفاده از آدرس های IP ، کاهش فشار حجم درخواست های ارسالی به یک سرور فیزیکی و تقسیم درخواست ها میان چند سرور موجود در شبکه است .
در واقع می توان گفت که سرور مجازی ، نقش یک رابط را میان کاربران شبکه و سرورهای فیزیکی شبکه ایفا می کند که در این میان، امکان همزمانی پردازش های بیشتری از درخواست ها با استفاده از یک آدرس IP فراهم می شود . هنگامی که سرور مجازی یک درخواست را از کاربر دریافت می کند، براساس یک الگوریتم زمانبندی ،درخواست کاربر را به سرور فیزیکی مربوطه تحویل می دهد. سپس سرور فیزیکی داده های مورد تقاضا را برای سرور مجازی به درخواست کاربر جواب خواهد داد. در این میان، سرویس دهنده حقیقی همان سرورهای فیزیکی هستند که آدرس IP آن ها توسط سرور مجازی تغییر یافته است. سرور مجازی از دو رابط شبکه استفاده می کند: یک رابط برای برقراری ارتباط با کاربران و دسترسی کاربران به شبکه ، و رابط دوم جهت ارتباط با شبکه محلی و سرورهای فیزیکی .راه اندازی یک کلاستر با این ساختار، قابلیت هرگونه تغییر، حذف یا افزودن سرورهای فیزیکی را برای مدیر شبکه فراهم می کند .

 

بازسازی هسته لینوکس 
لینوکس شامل هسته نسخه ۲٫۴٫۲۸ و نسخه های بالاتر، از کلاسترهای سرور مجازی یا LVS پشتیبانی می کنند. پس اگر از نسخه های پایین تر استفاده می شود، باید با اضافه کردن ماجول LVS مجددا هسته را کامپایل و بازسازی کنید .این بسته به صورت رایگان از نشانی http://www.linuxvirtualserver.org قابل دریافت است . چون در سایت برای نسخه های مختلف هسته، بسته های مختلفی ارائه شده ، لازم است شماره بسته متناسب با نسخه هسته لینوکس سیستم بررسی شود. بسته دریافتی از سایت را در شاخه usr/src/ کپی کنید و دستورات زیر را اجرا نمایید :

×#cd/usr/scr/linux
#gunzip ../linux-2.4.21-ipvs-1.0.10.patch.gz
#patch-p1< ../linux-2.4.21-ipvs-1.0.10.patch

دستور خط اول ، موقعیت خط فرمان را به زیرشاخه ×linux منتقل می کند. در خط دوم ، با استفاده از ابزار GUNZIP ، بسته دریافت شده از سایت پروژه از حالت فشرده خارج شده و در خط سوم این بسته، به هسته اضافه شده است . پس از اضافه شده است. پس از اضافه شدن بسته به هسته، باید مجددا هسته کامپایل شود. یعنی در دایرکتوری×usr/src/linux دستورات زیر اجرا شوند :

#make mrproper
#make oldconfig
#make menuconfig

 

با اجرای دستور آخر، یک منو با چندین زیرشاخه اجرا خواهدشد. برای فعال کردن سرور مجازی از شاخه Networking Options ، گزینه IP:Virtual Server Configuration را انتخاب نمایید و آدرس سرور مجازی را تنظیم کنید :

virtual server support( EXPERIMENTAL)
]Ipvirtual server debugging×[
(۱۶) IPVS connection table size(the Nith power of2)
—IPVS scheduler
round-robin scheduling
< M >weighted round-robin scheduling
< M >least-connection scheduling scheduling
< M >weighted least-connection scheduling
< M >locality-based least-connection scheduling
< M >locality-based least-connection with replication scheduling
< M >destination hashing scheduling
< M >source hashing scheduling
< M >shortest expected delay scheduling
< M >never queue scheduling
—IPVS application helper
FTP protocol helper

قبل از خروج از menuconfig ، باید تغییرات ذخیره شوند. برای ساختن تمامی ماجول های جدید کرنل، دستور زیر اجرا می شود :

#make dep&&make bzlmage &&make modules && make modulesinstall

پس از اجرای دستور بالا، زیر شاخه جدیدی به نام bzlmage در دایرکتوری /arch/i386/boot/×usr/src/linux ساخته می شود و تصویر هسته کامپایل شده در این شاخه قرار می گیرد. برای اتمام پیکربندی هسته، باید این تصویر در شاخهboot/کپی شده و فایل های پیکربندی بوت لودرهای سیستم نیز بروز رسانی شوند .

نصب ابزار IPT و IPVsadm
در گام بعدی ، پس از بازسازی هسته لینوکس، برای پیکربندی سرور مجازی ، باید بسته های IPTable و IPVsadm نصب شوند . IPTable ابزاری برای راه اندازی ساختار یک فایروال مبتنی بر فیلتر بسته های IPV4 و NAT در هسته لینوکس است. بااستفاده از این ابزار، آدرس های IPهای مجازی برای سرورهای فیزیکی تعریف می شوند . IPVsadm نیز یک ابزار برای مدیریت سرور مجازی لینوکس، تنظیم الگوریتم زمانبندی تقسیم درخواست ها و قوانین ارسال درخواست های کاربران به سرورهای فیزیکی است. بسته نصب IPTable به همراه اکثر توزیع ها ارائه می شود و می توان از طریق برنامه مدیریت بسته های توزیع لینوکس به راحتی آن را نصب کرد. بسته rpm نصب ابزار IPVsadm نیز از سایت پروژه LVS قابل دریافت است. پس از نصب این دو ابزار، لازم است که گزینه IP forwarding برای سرور لینوکس فعال شود. برای این منظور، فایل etc/sysctl.conf/ را در یک ویرایشگر متنی بازکرده و گزینه زیر را با ارزش ۱ مقداردهی کنید :

net.ipv4.ipforward=1

اکنون کافی است با استفاده از دستور start ، سرویس IPTable برای ارسال بسته های IP سرورهای فیزیکی به آدرس کاربران شبکه فعال شود :

service iptables start

 

فعال کردن IP masquerading
برای تنظیم آدرس IP سرورهای فیزیکی در سرور مجازی لینوکس، باید به این نکته توجه شود که eth0 برای کارت شبکه ارتباطی با شبکه اینترنت و eth1 برای کارت شبکه محلی تعریف شوند. در ادامه برروی سرور مجازی، دستورات زیر اجرا شوند :

#iptables-t nat-P POSTROUTING DROP
#iptables-t nat-A POSTROUTING-o eth0-j MASQUERDE

در خط اول ، با تعریف یک قانون برای IPTables ، یک سطح خارجی امنیتی برای شبکه تعریف می شود . DROP این اختیار را به IRTables می دهد که هرگونه بسته IP که از ruleهای تعریفی تبعیت نمی کند، از شبکه حذف شود و در نتیجه هر آدرس IP جعلی یا ساختگی را نمی توان برای شبکه تنظیم کرد. خط دوم، جدول NAT را برای آدرس دهی شبکه داخلی میان سرورهای فیزیکی با سرور مجازی و کارت شبکه eth0 فعال می کند .

 

پیکربندی سرور مجازی لینوکس با IPVsadm
در گام بعدی، با استفاده از ابزار IPVsadm سرور مجازی تنظیم می شود . برای شروع باید به هریک از ماشین های شبکه یک آدرس IP اختصاص داده شود . برای سرورهای فیزیکی شبکه محلی، یک بازه آدرس دهی مانند ۱۰٫۰٫۰٫۰ تا۲۵۵٫۲۵۵٫۲۵۵٫۰ انتخاب شده و از یک شماره Subnet Musk استفاده می شود. از سرور مجازی به عنوان دروازه برای سرورهای فیزیکی استفاده می شود. ماشین های کلاینت با آدرس های IP اختصاص یافته توسط سرویس دهنده اینترنت با سرور مجازی در ارتباط خواهند بود. یکی از دو سرور یک سرویس دهنده HTTP است که برای آن آدرس ۱۰٫۰٫۰٫۲ تعریف می شود و سرور دوم که یک سرویس دهنده FTP است، با ۱۰٫۰٫۰٫۳ آدرس دهی می شود. آدرس ۱۰.۰٫۰٫۱ به عنوان پیش فرض دروازه برای ارتباط با سرور مجازی انتخاب می شود و برای ارتباط سرور مجازی انتخاب می شود و برای ارتباط سرور مجازی با شبکه اینترنت آدرس IP عمومی ۶۱٫۱۶٫۱۳۰٫۱۰۰ منظور می گردد. اکنون با ابزار IPVsadm ، آدرس های تخصیص داده شده برای سرور مجازی تعریف می شوند :

#ipvsadm-A-t 161.16130.100:80-s wlc
#ipvsadm-A-161.16.130.100:21-s wrr

در فرامین بالا wlc و wrr دو الگوریتم مدیریت ترافیک سرور مجازی برای پورت های ۸۰ و ۲۱ هستند. غیر از این دو، الگوریتم های زمانبندی قابل تعریف دیگری نیز وجود دارد که برای آشنایی با آن ها می توانید به صفحات man این برنامه مراجعه کنید. برای تعریف سرورهای فیزیکی ، دستورات بالا به صورت زیر اجرا می شوند :

#ipvsadm-a-t 161.16130.100:80-r 10.0.0.3:80-m
#ipvsadm-a-t 161.16.130.100:80-r 10.0.0.2:80-m-w2
#ipvsadm-a-t 161.16.130.100:21-r 10.0.0.3:21-m

البته همیشه ترافیک پورت ۸۰ بیشتر از ترافیک پورت FTP خواهدبود. بدین خاطر آدرس IP شماره ۱۰٫۰٫۰٫۳ برای پورت ۸۰ نیز تعریف شده است. در این حالت، سرور مجازی با استفاده از الگوریتم های زمانبندی خود، می تواند بار ترافیکی این پورت را بر روی دو سرور فیزیکی تقسیم کند، با دادن ارزش دو توسط آرگومان m- به آدرس ۱۰٫۰٫۰۲، سرور مجازی خواهد فهمید که این پورت بر روی آدرس دیگری نیز تعریف شده است .

 

نتیجه گیری 
برای آزمایش درستی عملکرد شبکه، می توان با استفاده از ماشین های کلاینت، درخواست هایی را برای سرور مجازی فرستاد و نتیجه را مشاهده کرد . اگر به صورت همزمان چندین درخواست را از چند ماشین کلاینت ارسال کنید، خواهید دید برخی درخواست ها به وسیله سرویس دهنده FTP پردازش شده اند و آدرس IP متفاوتی میان درخواست های رسیده برروی ماشین های کلاینت وجود دارد. راه اندازی یک سرور مجازی با مشخصات بالا جوابگوی یک کلاستر با تعداد محدودی سرویس دهنده است. برای شبکه هایی که از تعداد زیادی سرویس دهنده استفاده می کنند، به راه اندازی چند سرور مجازی، تنظیمات پیشرفته جدول NAT ، و سرویس DNS نیاز خواهید داشت .

 

لیست مطالب مرتبط

سرور اختصاصی چیست؟

انتخاب یک سرور مجازی

سرور مجازی چیست؟

سرویس سرور اختصاصی، نوعی از میزبانی اینترنتی است که در آن کاربر یک سرور را به طور کامل اجاره می کند.

 هر سرور مجازی ساختار و تعاریف خاص خود را برای سیستم و نرم افزارهای کاربردی دارذ. هر سرور مجازی دارای ورژن سیستم عامل و نرم افزار ویژه است. 

 که مخفف Virtual Private Server به معنای سرور اختصاصی مجازی می باشد و گاهی از آن به عنوان VDS یا Virtual Dedicated Server نیز نام می برند