اطلاعیه

بستن
هنوز اطلاعیه ای در دست نیست.

آموزش نصب Varnish Cache (توسعه دهنده HTTP) و انجام تست لود با استفاده از Apache و Nginx

بستن
X
 
  • فیلتر کردن
  • زمان
  • نمایش
Clear All
پست های جدید

    آموزش نصب Varnish Cache (توسعه دهنده HTTP) و انجام تست لود با استفاده از Apache و Nginx

    در این مقاله ما میخواهیم نحوه نصب/تنظیمات وارنیش کش (Varnish Cache) به همراه تنظیمات آن روی وب سرورهای Apache و Nginx را در Debian/Ubuntu و CentOS/RedHat به شما توضیح دهیم. آیا تا به حال فکر کرده اید که زمانیکه شما به این صفحه وارد میشوید چه اتفاقی می افتد. یا زمانیکه شما روی لینکی که از طریق یک خبرنامه و یا لینکی از صفحه خانگی منطقه لینوکسی ها کلیک میکنید و به این مقاله وارد میشوید چه اتفاقی در پشت صحنه روی میدهد.

    به عبارت ساده، شما (یا در واقع مرورگرتان) یک درخواست HTTP (یا http request) به سمت وب سروری که این سایت روی آن میباشد ارسال میکند، و وب سرور یک پاسخ HTTP (یا http response) را بر میگرداند.
    Click image for larger version  Name:	varnish-logo-linux-zone-forums-2.jpg Views:	1 Size:	10.8 KB ID:	22197



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

    و این جایی است که Varnish (یک توسعه دهنده ی با عملکرد بالا برای HTTP و reverse proxy) میتواند تا حد بالایی کار شما را آسان کند. در این پست ما به شما نحوه نصب و استفاده از وارنیش به عنوان یک front-end برای آپاچی یا انجین ایکس به منظور کش کردن سریعتر درخواست های HTTP بدون لود اضافی روی وب سرور، را آموزش خواهیم داد.

    به هر حال، از آنجایی که وارنیش به صورت نرمال کش خود را در مموری (به جای ذخیره روی دیسک) ذخیره میکند ما نیاز خواهیم داشت که با دقت باشیم و فضای RAM موجود برای cache را محدود کنیم. درباره نحوه انجام دادن آن بحث خواهیم کرد.
    Click image for larger version  Name:	1-varnish-cache-server.png Views:	1 Size:	10.6 KB ID:	22198



    کلاینت ها درخواست های HTTP خود را به آنچه که آنها با عنوان یک سرویس وب سرور منظم میبینند، ارسال میکنند اما در حقیقت آنچه که این درخواست ها را دریافت میکند Varnish میباشد. وارنیش در عوض درخواست ها را به Apache یا Nginx ارجاع میدهد و پاسخ ها را در cashe خود ذخیره میکند به طوریکه درخواست های بعدی به جای اینکه از طریق عملیات پردازش دیگری در وب سرور پاسخ داده شوند مستقیما از کش وارنیش فراخونی میشوند. این موضوع زمان پاسخ را سرعت بخشیده و پردازش لود در خود وب سرور را کاهش میدهد.



    نصب Varnish

    در این پست ما فرض میکنیم که شما یک سرور LAMP یا LEMP نصب شده آماده دارید. در غیر اینصورت لطفا یکی از آنها را با استفاده از پست های زیر قبل از ادامه کار نصب کنید.

    داکیومنت های رسمی به شما پیشنهاد میکنند که وارنیش را از طریق ریپازیتوری توسعه دهنده آن نصب کنید به این دلیل که آنها همیشه آخرین ورژن ها را ارائه میدهند. شما همچنین میتوانید انتخاب کنید که پکیج را از ریپازیتوری های رسمی توزیع لینوکس خود (اگر چه کمی قدیمی باشد) نصب کنید.

    همچنین لطفا توجه کنید که ریپازیتوری های مورد نظر تنها از سیستم های 64 بیتی پشتیبانی میکنند در حالیکه برای سیستم های 32 بیتی شما باید از ریپازیتوری های رسمی توزیع مورد نظر خود استفاده کنید.

    در این پست ما Varnish را از طریق ریپازیتوری های رسمی که توسط هر توزیع پشتیبانی میشوند نصب خواهیم کرد. هدف اصلی پشت این تصمیم در حقیقت ایجاد یکپارچگی در روش نصب و اطمینان از برطرف کردن اتوماتیک مشکلات dependency (پیش نیاز) برای تمام معماری های سیستمی میباشد.

    روی Debian و Ubuntu
    کد PHP:
    # aptitude update && aptitude install varnish     [بهتر است دستورات را با sudo اجرا کنید.] 

    روی RedHat, CentOS و Fedora

    برای centos و redhat شما نیاز خواهید داشت که قبل از نصب Varnish ریپازیتوری EPEL را فعال کنید.
    کد PHP:
    # yum update && yum install varnish 

    اگر نصب با موفقیت کامل شود شما یکی از ورژن های زیر را با توجه به توزیع لینوکسی تان خواهید داشت.
    • Debian: 3.0.2-2+deb7u1
    • Ubuntu: 3.0.2-1
    • Fedora, CentOS, و RHEL ورژن 4.0.2 (وارنیش در این ورژن همانند بالا در ریپازیتوری EPEL فعال میباشد.)



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

    روی Debian, Ubuntu, CentOS/RHEL 6.x و Fedora 15-20
    کد PHP:
    # service varnish start
    # service varnish status
    # chkconfig --level 345 varnish on 

    روی CentOS/RHEL 7.x و Fedora 21
    کد PHP:
    # systemctl start varnish
    # systemctl status varnish
    # system enable varnish 

    تنظیمات Varnish

    برای کار با Varnish شما نیاز خواهید داشت که با دو فایل کانفیگ آشنا شوید.

    1 - پارامترهای فایل تنظیمات Varnish :
    • /etc/sysconfig/varnish (در RHEL/CentOS 6.x/Fedora machines) یا /etc/default/varnish (در سیستم های Debian و Ubuntu (Varnish ورژن 3.0)
    • /etc/varnish/varnish.params در سیستم های RHEL/CentOS 7 و Fedora 21 (Varnish ورژن 4.0)


    2 - فایل تنظیمات VCL (زبان تنظیمات وارنیش / Varnish Configuration Language) فایل /etc/varnish/default.vcl

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

    از آنجایی که شما در این پست با ورژن هایی متفاوتی از وارنیش روبه رو هستید ما تنظیمات مشترک را مشخص خواهیم کرد و برای اطلاعات بیشتر به داکیومنت های هر ورژن (3.0 و 4.0) مراجعه نمایید.

    همانطور که قبلا گفتیم Varnish بین Client ها و Web Server قرار میگیرد. به همین دلیل و به منظور اینکه عملیات کش برای کاربران نهایی شفاف شود ما نیاز خواهیم داشت :

    1 - Port پیش فرض را که Varnish به آن گوش میدهد را به 80 تغییر دهیم.

    2 - Port پیش فرض را که وب سرور به آن گوش میدهد را به 8080 (به جای پورت پیش فرض 80) تغییر میدهیم.

    3 - و در آخر ترافیک های ورودی از وارنیش را به وب سرور redirect میکنیم. خوشبختانه وارنیش این مورد را بعد از اینکه ما مراحل 1 و 2 را انجام دادیم خودش به صورت اتوماتیک انجام میدهد.

    جدول زیر فایل های تنظیمات و تغییراتی که ما باید به ازای هر ورژن باید ایجاد کنیم را لیست میکند.

    Click image for larger version  Name:	varnish-table-list-configuration.png Views:	1 Size:	16.9 KB ID:	22199

    تمام این تنظیمات در فایل های کانفیگ به صورت کامل توضیح داده شده اند. به هر حال، فکر میکنم ضرری ندارد که آنرا توضیح دهیم.
    کد PHP:
    VARNISH_STORAGE="malloc,${VARNISH_STORAGE_SIZE}"
    or
    VARNISH_STORAGE="malloc,512M" 
    که به این معنی است که به منظور کش کردن 512MB از بلاک مموری را اشغال خواهد کرد. شما میتوانید میزان مموری را با توجه به ریسورس های سخت افزاری تان تغییر دهید و یا انتخاب کنید که فایل های کش شده را در دیسک ذخیره کند.

    مورد دوم (که در اینجا توضیح نخواهیم داد) اینکه شما میتوانید تنها از خط پیش فرض VARNISH_STORAGE استفاده کنید که به صورت پیش فرض در فایل کانفیگ موجود است.

    اکنون فایل کانفیگ وب سرور را ویرایش میکنیم.

    Click image for larger version  Name:	varnish-webserver-configuration.png Views:	1 Size:	17.3 KB ID:	22200

    بعد از تغییرات بالا فراموش نکنید Varnish و webserver را restart کنید.


    تست Varnish

    اولین تست ایجاد یک درخواست HTTP از طریق curl و بررسی چیزی است که از طریق وارنیش کنترل میشود.
    کد PHP:
    # curl -I http://localhost 
    [APARAT]EpwVf[/APARAT]




    وارنیش همچنین شامل دو ابزار ساده نیز میباشد :
    • نمایش log های Varnish به صورت real time که varnishlog نامیده میشود.
    • نمایش آمار کش Varnish که varnishstat نامیده میشود.


    به عنوان تست بعدی که در تصویر بعد مشاهده میکنید ما هم log و هم آمار وارنیش را روی سرور CentOS 7 (در حقیقت dev1 در نیمه بالایی تصویر) و روی یک سرور Debian 7.5 (در حقیقت dev2 در نیمه پایینی تصویر) هنگامیکه درخواست های HTTP ارسال و پاسخ ها دریافت میشوند نمایش خواهیم داد.

    سومین و آخرین تست ما شامل آنالیز و تحلیل وب سرور و وارنیش با ابزار ab و همچنین مقایسه زمان response و لود CPU در هر مورد میباشد. در این مثال ما از سرور CentOS 7.0 استفاده خواهیم کرد اما شما میتوانید هر توزیع دیگری را استفاده کنید و نتایج مشابهی به دست آورید. میانگین لود (load avarage) را در بالای خروجی و request ها در خط دوم خروجی ab مشاهده نمایید.

    با استفاده از ab، ما 50 درخواست همزمان در یک لحظه (با استفاده از آپشن -c 50) را ارسال خواهیم کرد و تست را 1000000 بار تکرار میکنیم. (با استفاده از -n 1000000). وارنیش یک تعداد بالاتری از درخواست ها را در ثانیه ارسال میکند و میانگین لود بسیار پایین تری را مصرف میکند.

    نکته : لطفا به خاطر داشته باشید که وارنیش روی پورت 80 (پورت پیش فرض HTTP) در حال listen کردن است در حالیکه Apache روی پورت 8080 لیسن میکند. همچنین به میزان زمان مورد نیاز برای تکمیل هر تست دقت کنید.
    کد PHP:
    # ab -c 50 -n 100000 http://localhost/index.html 
    [APARAT]RXhdm[/APARAT]




    نتیجه:

    در این مقاله ما درمورد نحوه ی راه اندازی کشینگ وارنیش در مقابل یک وب سرور (آپاچی یا انجینکس) صحبت کردیم.توجه کنید که ما عمیقا روی فایل کانفیگ default.vcl بحث نکردیم که برای ما امکان تغییرات دلخواه روی پالیسی های caching را فراهم میاورد.
    برای مثالهای بیشتر پیشنهاد میکنیم که به داکیومنتهای رسمی مراجعه نمایید.(لینکهایی که در ابتدای این مقاله جایی که فایلهای کانفیگ وارنیش را لیست کردیم مشاهده نمایید )
    آخرین ویرایش توسط Habili; در تاریخ/ساعت 11-01-2021, 10:41 AM.

    #2
    باسلام من توی سنتوس 7 مراحل بالا رو رفتم بعد از نصب ورنیش راه اندازی نشد خطا زیر رو داد
    کد PHP:
    # systemctl status varnish.service
    ● varnish.service Varnish Cachea high-performance HTTP accelerator
       Loaded
    loaded (/usr/lib/systemd/system/varnish.servicedisabledvendor preset:       disabled)
       
    Activefailed (Result: exit-codesince Sat 2017-10-07 06:22:08 CEST1min 15s ag      o
      Process
    8344 ExecStart=/usr/sbin/varnishd -/var/run/varnish.pid -f $VARNISH_VCL_      CONF -${VARNISH_LISTEN_ADDRESS}:${VARNISH_LISTEN_PORT} -${VARNISH_ADMIN_LISTEN_AD      DRESS}:${VARNISH_ADMIN_LISTEN_PORT} -S $VARNISH_SECRET_FILE -u $VARNISH_USER -g $VARN      ISH_GROUP -s $VARNISH_STORAGE $DAEMON_OPTS (code=exitedstatus=126)


    Oct 07 06:22:08 sv555.p..........................com systemd[1]: Starting Varnish Cache...
    Oct 07 06:22:08 sv555.p..........................com varnishd[8344]: Message from C-compiler:
    Oct 07 06:22:08 sv555.p..........................com varnishd[8344]: /bin/sh: /usr/bin/gcc:...
    Oct 07 06:22:08 sv555.p..........................com varnishd[8344]: /bin/shline 0exec:...
    Oct 07 06:22:08 sv555.p..........................com varnishd[8344]: Running C-compiler fai...
    Oct 07 06:22:08 sv555.p..........................com varnishd[8344]: VCL compilation failed
    Oct 07 06
    :22:08 v555.p..........................com systemd[1]: varnish.servicecontrol p...
    Oct 07 06:22:08 sv555.p..........................com systemd[1]: Failed to start Varnish Ca...
    Oct 07 06:22:08 sv555.p..........................com systemd[1]: Unit varnish.service enter...
    Oct 07 06:22:08 sv555.p..........................com systemd[1]: varnish.service failed.
    HintSome lines were ellipsized, use -l to show in full
    آخرین ویرایش توسط Habili; در تاریخ/ساعت 10-07-2017, 06:57 PM.

    کامنت


      #3
      سلام این پیغام میگه که سرویس وارنیش شما استارت نشده. با دستور systemctl start varnishd اونو استارت کنید.

      من قلبی بزرگ با رویاهایی بزرگ دارم. دانسته هایمان را با هم به اشتراک بگذاریم.

      کامنت


        #4
        نوشته شده توسط amir مشاهده پست
        سلام این پیغام میگه که سرویس وارنیش شما استارت نشده. با دستور systemctl start varnishd اونو استارت کنید.
        با تشکر از جوابتون خدمتتون عرض کنم که اونم زدم ارور میداد
        systemctl start varnishd
        Failed to start varnishd.service: Unit not found.

        کامنت


          #5
          ظاهرا وارنیش نصب نشده روی سیستم تون. کامندی varnish رو بزنید ببینید چه ارروری رو برمیگردونه.

          من قلبی بزرگ با رویاهایی بزرگ دارم. دانسته هایمان را با هم به اشتراک بگذاریم.

          کامنت


            #6
            Package varnish-4.0.5-1.el7.x86_64 already installed and latest version

            کامنت

            درباره انجمن منطقه لینوکسی ها

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

            شبکه های اجتماعی
            در حال انجام ...
            X