How To Use HAProxy As A Layer 7 Load Balancer For WordPress and Nginx On Ubuntu 14.04

HAProxy-Load-Balancing

آموزش استفاده از تقسیم کننده بار HAProxy لایه ۷ برای WordPress و Nginx در Ubuntu 14.04

 

How To Use HAProxy As A Layer 7 Load Balancer For WordPress and Nginx On Ubuntu 14.04

 

معرفی

در این آموزش قصد داریم تا استفاده از HAProxy را به عنوان تقسیم کننده بار لایه ۷ برای سرویس دادن به چند برنامه با یک دامنه و آدرس IP آموزش دهیم. تقسیم بار باعث بهتر شدن کارایی ، پایداری و انعطاف پذیری زیرساخت شما می شود.

اگر شما یک نام دامنه دارید که باید چندین برنامه روی آن سرویس دهی کنند ، پراکسی داخلی لایه ۷ و تقسیم بار برای سایت شما مناسب است ، زیرا درخواست های http برای اینکه کدام برنامه به این ترافیک باید پاسخ دهد انتخاب می شود.

در این آموزش از وردپرس و یک وب سایت استاتیک برای مثال استفاده شده و مفاهیم به صورت پایه و عمومی بیان شده اند که برای برنامه های تحت وب دیگر باید مشابه همین روش عمل کنید.

 

پیش نیاز ها

قبل از شروع آموزش باید دو برنامه تحت وب در حال اجرا بر روی دو سرور متفاوت داشته باشید. در اینجا از یک وب سایت استاتیک با میزبانی Nginx و WordPress به عنوان دو برنامه تحت وب استفاده می کنیم. اگر می خواهید که دقیقا مانند همین آموزش عمل کنید ، تنظیماتی که سرور ها بر اساس آن انجام شده به صورت زیر می باشد :

طرحی که با آن آموزش را شروع می کنیم به صورت زیر است :

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

Haproxy-www : سرور HAProxy ، برای تقسیم بار و پراکسی داخلی ( معکوس )

WordPress-2 : دومین سرور برنامه تحت وب WordPress ( فقط در صورت تقسیم بار اجزا WordPress نیاز است)

Web-2 : دومین وب سرور Nginx فقط در صورت تقسیم بار اجزا Nginx نیاز است )

 

اگر با کلمات و مفاهیم تقسیم بار ( Load Balancing ) مانند تقسیم بار لایه ۷ ( Layer 7 Load Balancing ) ، سرور های backend یا ACL ها آشنایی ندارید ، در این مقاله این مطالب توضیح داده شده اند : An Introduction to HAProxy and Load Balancing Concepts .

 

هدف ما

در انتهای این آموزش ما می خواهیم به زیر ساختی مشابه به این برسیم :

layer_7_load_balancing-goal

در اینجا کاربران شما از طریق http://example.com به هر دو سرور شما دسترسی دارند. تمام درخواست هایی که با  http://example.com/wordpress شروع می شوند به سرور WordPress  ارجاع داده می شوند ، و تمام درخواست های دیگر به سرور Nginx ارجاع داده می شوند. توجه کنید که برای نمایش سایت لزوما نیاز به استفاده از تقسیم بار برنامه ها نیست ، ولی در این آموزش این کار را انجام می دهیم.

 

نصب HAProxy

برای نصب HAProxy یک سرور مجازی جدید ایجاد می کنیم که در این آموزش نام آن را haproxy-www گذاشتیم.

در سرور مجازی haproxy-www با استفاده از دستور apt-get اقدام به نصب HAProxy می کنیم :

در ادامه باید سرویس HAProxy را بوسیله اسکریپت init فعال کنیم که با روشن و خاموش شدن سرور مجازی سرویس پراکسی نیز فعال شود :

مقدار ENABLED را به ۱ تغییر می دهیم تا سرویس HAProxy در اسکریپت init فعال شود :

فایل را ذخیره کرده و خارج شوید. الان سرویس HAProxy همزمان با روشن و خاموش شدن سرور مجازی فعال و قطع می شود. البته با استفاده از دستور service نیز می توانید سرویس HAProxy را کنترل کنید. در ادامه وضعیت سرویس را بررسی می کنیم :

طبق خروجی می بینیم که سرویس فعال نیست و این مسئله خوبی است ، چون باید قبل از راه اندازی سرویس آن را پیکربندی کنیم تا بتوانیم از سرویس HAProxy استفاده کنیم. الان به پیکربندی و تنظیمات سرویس مربوطه می پردازیم.

 

پیکربندی HAProxy

پیکربندی HAProxy به قسمت عمده تقسیم می شود :

  • عمومی ( General ) : تنظیم پارامتر های پردازش عمومی
  • پراکسی ها ( Proxies ) : شامل پارامتر های default , listen , frontend و backend

 

پیکربندی HAProxy : عمومی

تمام تنظیمات HAProxy باید بر روی سرور مجازی haproxy-www انجام شود.

در ابتدا یک کپی از فایل تنظیمات پیش فرض haproxy.cfg تهیه می کنیم :

حالا فایل haproxy.cfg را با یک ویرایشگر متن باز می کنیم :

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

در قسمت default خطوط زیر را پیدا کنید :

انتخاب http برای mode برنامه HAProxy را برای تقسیم بار در لایه ۷ یا لایه کاربرد آماده می کند. این به این معنی است که تقسیم کننده بار به محتوای درخواست های http نگاه می کند و آنها را بر اساس قوانین تعیین شده به سرور مناسب ارجاع می دهد. اگر با این مفاهیم آشنایی ندارید ، لطفا قسمت انواع تقسیم بار را در مطلب معرفی HAProxy مطالعه کنید.

از حالت ویرایش فایل تنظیمات خارج نشوید ، در ادامه تنظیمات پراکسی را انجام می دهیم.

 

پیکربندی HAProxy : Proxies

تنظیمات Frontend

اولین چیزی که اضافه می کنیم یک frontend است. اولین کاری که برای پراکسی داخلی لایه ۷ و تقسیم بار انجام می دهیم ، تعریف یک ACL است که برای هدایت ترافیک به سرورهای backend استفاده می شود. ACL های زیادی وجود دارد که می تواند در HAProxy استفاده شود ، که در این آموزش فقط یکی از آنها را بیان می کنیم. برای مطالعه لیست کامل ACL های HAProxy مستندات رسمی آن را مطالعه کنید : HAProxy ACLs

در انتهای قسمت تنظیمات frontend www را که در زیر آورده شده، اضافه کنید. دقت کنید که به جای haproxy_www_public_IP ، آدرس عمومی سرور مجازی haproxy-www را قرار دهید :

در ادامه به توضیح خطوط پیکربندی عنوان شده می پردازیم :

frontend www : یک frontend با نام www تعریف می کنیم ، که از آن برای مدیریت ترافیک www ورودی استفاده می کنیم.

bind haproxy_www_public_IP:80 : قسمت haproxy_www_public_IP را با آدرس IP عمومی سرور مجازی haproxy-www جایگزین کنید. این خط مشخصات آدرس IP و پورت شبکه ترافیکی که قسمت frontend سرور HAProxy باید آن را مدیریت کند را عنوان می کند.

option http-server-close : حالت HTTP connection-close را بر روی سرور فعال می کند که قابلیت پشتیبانی از  HTTP keep-alive و pipelining را در سمت کاربر حفظ می کند.

acl url_wordpress path_beg /wordpress : در اینجا یک ACL با نام url_wordpress تعیین شده و برای ارزیابی صحت درخواست هایی است که مسیر آن ها با مقدار “wordpress/ ” شروع می شوند مانند http://example.com/wordpress/hello-world

use_backend wordpress-backend if url_wordpress : مشخص می کند که درخواست هایی که با ACL url_wordpress مطابقت دارند به سرور wordpress-backend هدایت شوند ، که این سرور را ادامه تعیین می کنیم.

default_backend web-backend : در اینجا مشخص می کنیم که ترافیک هایی که با قسمت use_backend تطابق ندارند به سرور web-backend هدایت شوند ، که در مرحله بعدی این سرور را تعیین می کنیم.

 

تنظیمات Backend

بعد از انجام تنظیمات frontend ، ادامه تنظیمات را با تنظیم اولین سرور backend و با اضافه کردن خطوط زیر به فایل تنظیمات ادامه می دهیم. دقت کنید که به جای web_1_private_IP مقدار مناسب جایگزین کنید :

در ادامه به توضیح خطوط ای که نوشتیم می پردازیم :

server web-1 : یک سرور backend را با نام web-1 را مشخص می کند که در اینجا معین کردیم که سرور  روی پورت ۸۰ منتظر درخواست شبکه می باشد و همچنین آدرس IP سرور backend را نیز باید جایگزین کنید.  گزینه check تعیین می کند که سرور تقسیم کننده بار سلامت اتصال به این سرور را به صورت مرتب بررسی کند.

 

در ادامه سرور backend برای برنامه WordPress را مشخص می کنیم :

توضیح خطوط تنظیمات سرور backend برنامه WordPress :

backend wordpress-backend : تعریف یکی سرور backend با نام wordpress-backend

reqrep : وقتی ترافیکی به سرور WordPress ارسال می شود ، درخواست های wordpress/ را با / بازنویسی می کند. اگر برنامه WordPress

در سرور اصلی نصب شده باشد لازم به این کار نیست ، ولی ما می خواهیم که از طریق wordpress/ در سرور HAProxy ما قابل دسترسی باشد.

server wordpress-1 : یک سرور Backend با نام wordpress-1 را مشخص می کند که در اینجا معین کردیم که سرور  روی پورت ۸۰ منتظر درخواست شبکه می باشد و همچنین آدرس IP سرور backend را نیز باید جایگزین کنید. گزینه check نیز سرور تقسیم کننده بار را در حالتی قرار می دهد که به صورت مرتب اتصال با سرور را بررسی کند.

 

تنظمیات HAProxy : stat

برای گزارش گیری و مشاهده روند مدیریت HAProxy بر روی مدیریت ترافیک ورودی باید stat را فعال کنید. برای این کار خطوط زیر را به فایل تنظیمات اضافه کنید :

listen stats :1936 : برای تنظیم پورت صفحه آمار HAProxy روی ۱۹۳۶( http://haproxy\_www\_public\_IP:1936 )

stats scope : جمع آوری آمار از frontend و backend

Stat usri / : تنظیم آدرس URI صفحه stat بر روی /

stats realm Haproxy\ Statistics : فعال کردن گزارش گیری و احراز هویت

stats auth haproxy:password : تعیین مشخصات صفحه احراز هویت که باید نام کاربری و رمز عبور را در اینجا تغییر دهید

فایل تنظیمات رو ذخیره کرده و خارج شوید. بعد از راه اندازی HAProxy صفحه نمایش آمار از طریق آدرس http://haproxy\_www\_public\_ip:1936/ قابل دسترسی خواهد بود. سرویس HAProxy آماده راه اندازی است ، اما قبل از راه اندازی باید گزارش گیری سرویس را فعال کنیم.

 

فعال کردن گزارش گیری HAProxy

فعال کردن گزارش گیری HAProxy خیلی ساده است. ابتدا فایل rsyslog.conf را ویرایش می کنیم :

خطوط زیر را پیدا کرده و از حالت توضیح خارج کنید تا دریافت UDP syslog فعال شود. در نهایت باید به صورت زیر باشد :

حالا باید سرویس rsyslog را مجددا راه اندازی کنیم تا تنظیمات اعمال شوند :

Sudo service rsyslog restart

گزارش گیری HAProxy فعال شد و وقتی سرویس HAProxy راه اندازی شود فایل گزارش در مسیر var/log/haproxy.log/ ایجاد می شود.

 

به روز رسانی پیکربندی WordPress

الان باید آدرس برنامه WordPress تغییر کند و برای این کار باید دو تا از تنظیمات WordPress را تغییر دهیم.

بر روی سرور WordPress فایل wp-config.php را ویرایش کنید. این فایل در جایی است که WordPress را نصب کرده اید :

خط define(‘DB_NAME’, ‘wordpress’); را پیدا کنید و در بالای این خط ، خطوط زیر را قرار دهید ، دقت کنید که در هنگام قرار دادن خطوط جدید مقادیر آدرس IP را جایگزین کنید :

فایل را ذخیره کرده و خارج شوید. الان آدرس WordPress برای اشاره به تقسیم کننده بار تنظیم شده و به جای سرور اصلی WordPress قرار دارد و به داشبورد wp-admin دسترسی دارید.

 

راه اندازی HAProxy

در سرور haproxy-www ، سرویس HAProxy را راه اندازی کنید تا تنظیمات انجام شده اعمال شوند :

 

پایان پراکسی معکوس

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

layer_7_proxy_no_lb

مطابق frontend که به تازگی آن را تنظیم کردیم ، در اینجا بیان می کنیم که چطور می خواهیم ترافیک را ارجاع دهیم :

http://example.com/wordpress : تمام درخواست هایی که با wordpress/ شروع می شوند به سرور wordpress-backend ارسال می شوند. ( که در اینجا سرور wordpress-1 است )

http://example.com/ : بقیه درخواست ها به سرور web-backend ارسال می شوند. ( در اینجا سرور web-1 می باشد)

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

 

چطور تقسیم بار را انجام دهیم

تقسیم بار web-1

برای راه اندازی ساده و اولیه یک وب سرور تنها کاری که باید انجام دهید باید یک وب سرور با تنظیمات و محتوای یکسان به عنوان سرور اصلی ایجاد کنید. در اینجا نام این سرور را web-2 قرار می دهیم.

شما دو گزینه برای ساخت سرور مجازی جدید دارید :

۱- می توانید از سرور web-1 با snapshot یک سرور جدید ایجاد کنید که نیاز به دسترسی خاصی دارد.

۲- این سرور را از اول نصب و تنظیم کنید. یک کپی یکسان از همان برنامه ها و تنظیمات ایجاد کنید سپس محتویات وب سرور اصلی Nginx را از سرور web-1 به سرور web-2 بوسیله rsync انتقال دهید. ( مستندات آموزش rsync )

بعد از ایجاد یک کپی از سرور ، باید یک web-backend نیز در تنظیمات HAProxy اضافه کنید.

در haproxy-www فایل haproxy.cfg را ویرایش کنید :

قسمت web-backend را پیدا کنید :

در خط بعد سرور web-2 را اضافه کنید :

فایل را ذخیره کرده و خارج شوید ، سپس برای اعمال تنظیمات HAProxy را مجددا بارگذاری کنید :

الان شما برای مدیریت ترافیک های غیر از WordPress ، دو سرور web-backend دارید.

 

تقسیم بار سرور wordpress-1

Load Balancing یک برنامه مانند WordPress و پیچیده تر از تقسیم بار یک وب سرور استاتیک است زیرا شما باید نگران چیزهایی مثل همگام سازی فایل های آپلود شده و کاربران اضافی پایگاده داده باشید.

همه مراحل اضافی که نیاز هست ، یک سرور یکسان WordPress می باشد که در آموزش تقسیم بار  How To Use HAProxy as a Layer 4 Load Balancer for WordPress نحوه ساخت آن گفته شده است. شما باید مراحل زیر را طبق آموزش برای ایجاد سرور دوم WordPress با نام wordpress-2 انجام دهید :

  1. Create Your Second Web Application Server
  2. Synchronize Web Application Files
  3. Create a New Database User

وقتی به قسمت Not Yet Load Balanced رسیدید دست نگه دارید.

وقتی شما wordpress-2 را ایجاد کردید و پایگاه داده به درستی تنظیم شده باشد ، یعنی اینکه سرور wordpress-2 را به درستی در پیکربندی HAProxy ایجاد شده است.

در سرور haproxy-www فایل haproxy.cfg را ویرایش کنید :

قسمت wordpress-backend را که به صورت زیر است ، پیدا کنید :

سپس سرور wordpress-2 را در خط بعدی اضافه کنید :

فایل را ذخیره کرده و خارج شوید. برای اعمال تغییرات HAProxy را مجددا بار گذاری کنید :

الان شما برای مدیریت ترافیک های WordPress ، دو سرور wordpress-backend دارید.

 

نتیجه

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

علاوه بر این اگر شما به دنبال راه های دیگری برای بهبود عملکرد WordPress خود هستید ، نگاهی به MySQL replication بیاندازید.

 

Leave a Reply