منبع اصلی نوشتار زیر در این لینک قرار دارد

پیاده سازی توان بار در لینوکس – بخش نخست

در این مطلب برای ایجاد توازن بار میان درخواست های کلاینت های متفاوت بین وب سرور های مختلف از Linux Virtual Server استفاده شده است. این سناریو شامل چندین کلاینت، دو ماشین متوازن کننده بار لینوکسی که LVS بر روی هر دوی آنها تنظیم شده است. دو وب سرور در پشت ماشین های متوازن کننده بار وجود دارد. همچنین به منظور تبدیل نام ها به آدرس ها از DNS استفاده شده است.

پایگاه داده MySQL میزبان داده های سایت ها است و توسط مکانیزم تکثیر دسترس پذیری بالا را برای پایگاه داده فراهم شده است. برای ایجاد تکثیر داده ها در پایگاه داده از DRBD و همچنین از LVM به منظور مدیریت ساده تر دیسک های لینوکسی استفاده می شود. لازم است ساعت هر دو ماشین متوازن کننده بار با یکدیگر همگام باشند. برای این منظور از NTP بر روی هر دو ماشین استفاده می کنیم. به طور کلی ابزار های زیر در این سناریو معرفی و استفاده می شوند :

  1. VMWare Workstation برای ایجاد ماشین های مجازی.
  2. LVS به منظور پیاده سازی قابلیت توازن بار بر روی ماشین های متوازن کننده بار.
  3. DRBD به منظور پیاده سازی تکثیر داده های پایگاه داده.
  4. NTP به منظور همگام سازی ساعت میان دو ماشین متوازن کننده بار.
  5. Bind برای پیاده سازی. DNS در شبکه.
  6. Apache برای وب سرور و MySQL برای پایگاه داده.
  7. LVM برای مدیریت ساده تر دیسک ها در لینوکس.

در حداقل ترین حالت نیاز به 8 ماشین مجازی داریم که :

  1. دو ماشین مجازی برای عملکرد توازن بار.
  2. دو ماشین مجازی برای میزبانی وب سرور ها. هر دوی این سرور ها باید یک محتوا (یک سایت) را میزبانی کنند.
  3. دو ماشین مجازی برای میزبانی یک پایگاه داده که در دو ماشین تکثیر شده است.
  4. یک ماشین مجازی برای DNS Server و ماشیم مجازی دیگری برای NTP Server.
  5. استفاده از سیستم عامل Linux CentOS 6 برای تمامی ماشین های مجازی.

تمامی این ماشین های مجازی در یک شبکه خصوصی قرار دارند و دسترسی کلاینت ها نیز از درون همین شبکه (و نه از اینترنت) به وب سرو ها است. از این رو لازم به پیاده سازی Full NAT نیست و از Direct Route استفاده می کنیم. کارت های شبکه تمامی ماشین های مجازی نصب شده بر روی VMWare باید بر روی سوییچ Bridged تنظیم شده باشند. به طور کلی گام های زیر برای پیاده سازی این محیط توازن بار طی می شوند :

  1. نصب ماشین های مجازی برای پیاده سازی با توزیع لینوکسی CentOS 6 درون شبکه.
  2. نصب پیاده سازی NTP Server بر روی یکی از ماشین های مجازی و بر روی ماشین های متوازن کننده بار به عنوان NTP Client.
  3. نصب و پیکربندی DNS Server بر روی یگی از ماشین های مجازی.
  4. پیکربندی Apache Web Server بر روی دو ماشین مجازی.
  5. پیکربندی دو ماشین مجازی به منظور متوازن کننده بار با تنظیم LVS بر روی آنها.
  6. پیکربندی DRBD بر روی دو ماشین مجازی به منظور تکثیر داده های پایگاه داده.

هدف از این سناریو، ابتدا معرفی ابزار های کلید درون شبکه برای توزیع بار یعنی LVS است و سعی شده تا تمامی نیاز های یک شبکه داخلی برای داشتن یک محیط توازن بار به صورت خلاصه معرفی شود.

LVS چیست

Linux Virtual Server امکان پیاده سازی توازن بار با استفاده از خوشه ای از سرور ها (Cluster) فراهم می کند. هدف اصلی از LVS فراهم کردن چارچوبی است که درخواست های کاربران را میان چندین سرور توزیع کند. درواقع LVS خوشه ای از سرور ها است که برای کلاینت ها به صورت یک سرور واحد و تک آدرسی نشان داده می شود. این نمایش تک سروری را Virtual Server می نامند.

در خوشه LVS یک یا چند ماشین متوازن کننده بار و چندین سرور یگ سرویس مورد نظر را ارائه می کنند، وجود دارد. LVS از سرویس های مختلفی همچون Web Server (http), Mail Server (mstp), FTP و Media and VoIP پشتیبانی می کند.

طبق سناریو دو ماشین متوازن کننده بار وجود دارد که یکی از آنها در حالت فعال (Active) و دیگری در حالت پشتیبان (Backup) یا حالت آماده باش (Standby) قرار دارد. ماشین متوازن کننده فعال دارای دو نقش زیر است :

  1. برای توازن بار میان سرورها.
  2. برای بررسی صحت و سلامت (Health Check) سرور ها و سرویس هایی که بر روی آنها در حال اجرا هستند.

LVS پشتیبان، ماشین متوازن کننده بار را مانیتور کرده و در صورت از کار افتادن آن، به طور خودکار عملکرد آن را در دست می گیرد.

ماشین متوازن کننده باری که در حال فعالیت است، باید بر اساس الگوریتم های توزیع بار، یکی از سرور ها را به منظور ارسال درخواست کلاینت انتخاب کند. LVS از چندین الگوریتم زیر استفاده می کند:

  1. نوبت چرخشی (Roubd Robin) : به صورت ترتیبی بار را میان چندین سرور توزیع می کند. با استفاده از این الگوریتم تمامی سرور ها بدون توجه به به ظرفیت و بار فعلی بر روی آنها، به صورت همسان در نظر گرفته می شوند. این الگوریتم به دلیل اینکه مبتنی بر اتصال های شبکه (Network-Connection Based) است با RR-DNS که مبتنی بر نام ماشین (Hostname Based) است، متفاوت می باشد.
  2. نوبت چرخشی وزن دار (Weighted Round Robin) : درخواست ها را به صورت ترتیبی میان سرور هایی که ظرفیت (Capacity) بیشتری دارد توزیع می کند. ظرفیت توسط یک فاکتور وزن اختصاص داده شده توسط کاربر مشخص می شود که توسط اطلاعات توازن بار upward و downward شود. این الگوریتم زمانی که تفاوت قابل توجهی میان ظرفیت سرور وجود داشته باشد، انتخاب مناسبی است
  3. حداقل اتصال (Least Connection) : درخواست ها را به سروری ارسال می کند که در حال حاضر کمترین اتصال را داشته باشد. به دلیل اینکه توسط جدول IPVS فهرستی از اتصال های فعلی نگه داشته می شود، این الگوریتم به صورت پویا بوده و زمانی که سرور ها دارای ظرفیت تقریبا مشابه ای داشته باشند، انتخاب مناسبی است. در صورتی که سرور ها دارای ظرفیت متفاوتی باشند، الگوریتم حداقل اتصال وزن دار مناسب است.
  4. حداقل اتصال ورن دار (Weighted Least Connection) : درخواست را به سروری با حداقل اتصال نسبت به ظرفیتش توزیع می کند. ظرفیت توسط یک وزن اختصاص داده شده توسط کاربر نشان داده می شود که بر اساس اطلاعات بار تنظیم شده است. این الگوریتم زمانی که سرور ها دارای سخت افزار ها با ظرفیت های متفاوت باشند، انتخاب مناسبی است.
  5. حداقل اتصال بر اساس محل (Locality-Based Least Connection) : درخواست ها را به سرور هایی با حداقل اتصال فعال بر روی آنها بر اساس آدرسIP مقصد توزیع می کند. این الکوریتم برای استفاده در یک Proxy-Cache Server Cluster طراحی شده است. در واقع این الگوریتم زمانی استفاده می شود که سرور ها Transparent Cache یا Web Cache Server ها میان کلاینت های شبکه داخلی (خصوصی) و اینترنت باشند.
  6. الگوریتم Destination Hash : این الگوریتم با جستجو آدرس IP مقصد در جدول درهم سازی، درخواست ها را به سرور ارسال می کند. این الگوریتم نیز مناسب برای Proxy-Cache Server Cluster طراحی شده است.
  7. الگوریتم Destination Hash : این الگوریتم با جستجو آدرس IP مبدا در جدول درهم سازی، درخواست ها را به سرور ارسال می کند. این الگوریتم برای ماشین های LVS با چندین دیوار آتش طراحی شده است.

روش های مسیربابی

مانند آنچه که قبلا گفته شده، می بایست بسته های ارسالی از سوی کلاینت ها برای رسیدن به سرور ها مسیربابی شوند که LVS از سه روش زیر پشتیبانی می کند :

۱ – روش Full NAT

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

Picture1

شکل ۱

در شکل بالا اینترفیس مجازی eth0:1 متصل به اینترنت و اینترفیس eth1:1 متصل به شبکه داخلی است. در واقع ماشین متوازن کننده بار نقش یک مسیریاب را ایفا می کند که در آن نقش Full NAT پیاده سازی شده است. در این حالت تمامی کلاینت ها در شبکه عمومی قرار دارند و درخواست های خود را به آدرس عمومی ماشین متوازن کننده فعال ارسال می کنند و سپس ماشین متوازن کننده بار در نقش یک مسیریاب، درخواست ها را به سرور های واقعی درون شبکه داخلی (خصوصی) ارسال و سپس پاسخ را به کلاینت ها باز می گرداند. هر دیوایسی که حداقل دارای دو اینترفیس باشد و با استفاده از مکانیزم ها، بسته های یک شیکه (یک محدوده آدرس) را به شبکه ای دیگر ارسال کند را مسیریاب گویند.

۲ – روش Direct Route

در این روش، به سرور ها اجازه داده می شود تا خودشان مسیر یابی بسته ها را به جای ماشین متوازن کننده (ماشین LVS در نقش مسیریاب) انجام دهند. این روش مسیربابی به دلیل اینکه ماشین متوازن کننده تنها نقش دریافت کننده درخواست و ارسال آن به سرور را دارد، باعث افزایش کارایی شبکه می شود، زیر پاسخ به کلاینت ها دیگر توسط ماشین LVS انجام نمی گیرد. شکل ۲ نمایی از محیط متوازن بار توسط مسیریابی مستقیم را نشان می دهد.

Picture2

شکل ۲

مشکل اصلی با روش مسیریابی مستقیم، ARP است. کلاینت ها از اینترنت درخواست را به یک آدرس ارسال می کند. مسیریاب های شبکه درخواست را به آدرس مقصد با ارتباط دادن آدرس به یک آدرس MAC توسط مکانیزم ARP ارسال می کند.

درخواست های ARP به تمامی سیستم های متصل شده به شبکه Broadcast می شود و ماشین با ترکیب صحیحی از IP/MAC بسته را دریافت می کند. ترکیب آدرس های IP/MAC در Cache شده و هر چند وقت یکبار به صورت خودکار پاک شده و مجدد پر خواهد شد.

مشکل درخواست های ARP به این دلیل است که کلاینت درخواست IP را که مختص یک MAC Address را می کند و از این رو آدرس مجازی ماشین متوازن کننده بار نیز باید دارای یک آدرس فیزیکی MAC باشد. چون هم دو ماشین متوازن کننده بار و سرور ها دارای یک آدرس مجازی هستند، پس درخواست ARP باید به تمامی ماشین های دارای آدرس مجازی Broadcast شود.

برای رفع این مشکل، باید اطمینان کسب کرد که درخواست های ورودی تنها به ماشین LVS ارسال شود که این امر توسط arptable_jfs و iptables قابل انجام است. به منظور استفاده از روش مسیریابی مستقیم، می توان از دیوار آتش لینوکس،یعنی iptables استفاده کرد. با استفاده از iptables یک Role تعریف می کنیم تا سرور ها مستقیما بسته ها را دریافت کرده و سپس پاسخ را به آدرس مجازی ماشین متوازن کننده بار تحویل دهند.

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

در بخش بعدی اجزا و مولفه های LVM گفته خواهد شد.



برچسب ها : , , , ,