Nginx Load Balancing With Round Robin

Round Robin Nginx Load Balancing

 

آموزش نصب و تنظیم  تقسیم بار ترافیک در Nginx

Nginx Load Balancing With Round Robin

 

درباره تقسیم بار – Load Balancing

اگر شما یک سرویس دهنده در بستر اینترنت داشته باشید که کاربران زیاد از آن استفاده می کنند باید بتوانید درخواست زیاد کاربران را به شکل مناسبی مدیریت کنید ، در غیر اینصورت دچار مشکلاتی مانند از دست رفتن اطلاعات ، نارضایتی کاربران و عدم سرویس دهی مناسب خواهید شد که می تواند موقعیت کار یا شغل شما را دچار خطر کند. برای این کار از روش های مختلفی استفاده می کنند ، که پرکاربردترین آنها روش تقسیم بار ( Load Balancing ) می باشد. به این صورت که از چند سرور و سرویس دهنده برای تقسیم درخواست کاربران استفاده می شود.

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

این مکانیزم به روش های مختلفی پیاده سازی می شود که در اینجا روش تقسیم بار بر اساس الگوریتم Round Robin را با تنظیمات و حالت های مختلف بررسی می کنیم.

تقسیم بار بر اساس الگوریتم  Round Robin

یک الگوریتم معروف بر اساس نوبت و چرخش هست. در الگوریتم Round Robin برای تقسیم بار ، بازدید کننده ها را به یکی از مجموعه آدرس های IP ارسال می کند. در ساده ترین حالت پیاده سازی Round Robin ، توزیع بار بین سرور ها ، بدون توجه به زمان پاسخگویی سرور و موقیعت جغرافیایی بازدید کنندگان می باشد و به صورت نوبتی و چرخشی عمل می کند.

 

راه اندزای

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

 

 

ماژول Upstream

برای نصب تقسیم کننده بار Round Robin ، نیاز هست که از ماژول Upstream استفاده کنیم ، که تنظیمات این ماژول را با تنظیمات Nginx ترکیب می کنیم. از ماژول Upstream برای تعریف گروهی از سرور ها برای ارتباط قسمت های مختلف Nginx استفاده می کنیم.

برای انجام تنظیمات فایل تنظیمات وب سرور رو باز کنید ( در این مثال از virtual host عمومی پیش فرض استفاده می کنیم ):

 

 

سپس باید تنظمیات تقسیم بار را به فایل اضافه کنیم. ابتدا ماژول Upstream را اضافه می کنیم ، مانند زیر :

upstream backend

 

سپس باید منبع ماژول را در ادامه تنظیمات قرار دهیم :

 

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

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

در این بخش ، چگونگی تقسیم بار در چند سرور را بررسی کردیم. ولی دلایل زیادی وجود دارد که این روش ، کار آمدترین روش برای کار با داده ها نیست و روش ها موثر تر و بهتر دیگری نیز وجود دارد.

تقسیم بار بر اساس وزن –  Nginx Load Balancing With Weight

یک روش دیگر برای اختصاص کاربران به سرور ها با دقت بیشتر ، اختصاص دادن وزن مشخص به سرور مشخص هست. Nginx به ما اجازه می دهد یک شماره مشخص کننده نسبت ترافیک را که باید به هر سرور هدایت شود اختصاص دهیم.

تنظیمات Load Balancing که شامل وزن سرور می باشد، می تواند به این صورت باشد :

upstream back

 

وزن پیش فرض ۱ هست. به سرور backend2 با وزن ۲ ،  مقدار ترافیک دو برابر بیشتر از backend1 ارسال می شود و backend3 با وزن ۴ ، مقدار ترافیک دو برابر backend2 و ۴ برابر backend1 ارسال می شود.

 

تقسیم بار ترکیبی – Nginx Load Balancing With Hash

در حالت سرور ها بر اساس آدرسهای اینترنتی IP  کابران به آنها پاسخ می دهند و در بازدید مجدد کاربران ، آنها را به همان سرور ارسال می کند ( اگر آن سرور پایین نباشد ). اگر سیستم یک سرور با غیر فعال تشخیص دهد ، آن سرور را به صورت سورر خاموش علامتگذاری می کند. تمام IP هایی که قرار بوده به یک سرور خاموش فرستاده شوند، همگی به یک سرور جایگزین هدایت می شوند.

تنظیمات این حالت مشابه زیر است :

upstream back

 

 

تقسیم بار با حداکثر شکست – Nginx Load Balancing With Max Fails

در تنظیمات Round Robin ، Nginx تا زمانی که سرور پاسخگو باشد ، به ارسال داده ها به یک سرور مجازی ادامه می دهد. Max Fails  سرور هایی که در بازه زمانی مشخص پاسخگو نیستند را بررسی و از ارسال اطلاعات به آنها جلوگیری می کند.

در اینجا دو عامل مرتبط با حداکثر شکست در ارتباط هست max_fails و  fall_timeout . max_fails تعیین کنند حداکثر تعداد تلاش های ناموفق برای اتصال به سرور قبل این اینکه سرور غیر فعال در نظر گرفته شود، می باشد. fall_timeout مدت زمانی است که سرور غیر فعال در نظر گرفته می شود. بعد از اتمام این زمان ، درخواست جدید برای دسترسی به سرور و بالا بودن آن ارسال می شود. زمان پیش فرض ۱۰ ثانیه می باشد.

یک نمونه از نحوع تنظیمات به صورت زیر می باشد :

 

 

 

Leave a Reply