nginx反代+varnish緩存+後端LAMP平臺集羣實現

 較爲完善的集羣實現方式,前端兩臺LVS主機進行調度轉發到前端的兩臺nginx反代服務器,由nginx反代服務器將請求資源轉發到後端的varnish主機中,若varnish緩存服務器中存在所請求資源的緩存,則由varnish主機向nginx反代服務器進行響應,再有nginx服務器向客戶端進行響應(不向調度器響應是因爲採用的是LVS DR模型)。若varnish中不存在緩存,則直接向後端RS主機請求資源,到達varnish後,varnish會判斷該資源是否能夠緩存,若可以被緩存,則緩存下來待下次資源訪問時由緩存服務器對nginx進行響應,大大減小了後端RS的壓力。後端RS分爲動態資源服務器,靜態資源服務器以及圖片資源服務器,訪問不同資源則由varnish進行動靜分離操作,向後端不同主機進行資源申請。

  nginx服務器:

     第一臺nginx本機IP:

        eno16777736:192.168.72.2

        eno33554976:172.16.25.1

     第二臺nginx本機IP:

        eno16777736:192.168.72.3

        eno33554976:172.16.25.2

      keepalived高可用虛擬IP:

        eno16777736:192.168.72.20

        eno33554976:172.16.25.100

      keepalived配置:

      QQ截圖20171211121121.jpg

      QQ截圖20171211121151.jpg

      QQ截圖20171211123101.jpg

     keepalived的配置項在這裏就不再講述了,前面都有講過。主要就是對nginx的狀態進行一個判斷

     若nginx down掉了,則將權重值-10,MASTER降爲BACKUP(搶佔模式)。當MASTER中的nginx

     啓動後,又會自動成爲MASTER,虛擬IP就由MASTER掌控。


     nginx反代配置:

     172.16.25.77爲後端varnish的IP,使用proxy_pass的方式反代,實際上再加一臺varnish服務器

     只需要修改upstream中的內容,使用hash一致性算法對varnish進行高可用。

     QQ截圖20171211123213.jpg

     

     varnish服務器:

         IP:172.16.25.77

         yum install -y varnish

         配置文件/etc/varnish/varnish.param:運行時參數的配置,如varnish線程池得多少,每個線程池的線程數目有多少等。

         配置文件/etc/varnish/default.vcl進行編輯:varnish運行的策略庫,根據該策略庫判斷數據是否緩存等。

         前端nginx反代到後端時採用的是80端口,所以需要將varnish監聽在80端口這樣才能正確獲取到前端請求。

         修改/etc/varnish/varnish.param

         將VARNISH_LISTEN_PORT修改爲80端口,原來爲6081,該端口爲服務端口,6082爲管理端口

         QQ截圖20171211124100.jpg

        

         /etc/varnish/default.vcl配置:

         設置反代到後端的兩個主機,可以進行健康狀態監測,如

         probe = {

               url = /health.html

               timeout = 3s

               interval = 2s

               window = 5

               threahold = 3 (5次檢測有三次成功則表示後端RS正常)

        }

         QQ截圖20171211124742.jpg

         vcl_purge爲緩存裁剪,對不需要的緩存進行刪除,常用於緩存更新。

         vcl_recv爲所有請求數據都必須經過的一個狀態引擎的表示,在這裏對數據進行靜態分離,

         當請求的方法爲dele,則表示對該資源進行裁剪,當請求的資源存在.php則表示該資源爲

         動態資源,發往動態資源服務器web2,否則發往靜態資源服務器web1.在這裏可以對資

         源服務器進行擴展,若動靜態資源服務器有多臺,則可以設置vcl_init

         如

         vcl_init {

            new websrv = directors.backend_roundrobin();

            websrv.add_backend(webstat1);

            websrv.add_backend(webstat2);

         }

         將兩臺靜態服務器 都添加至websrv中,類似於nginx中的upstream

         調用時使用set req.backend_hint = websrv.backend();即可。

         注意:在使用組調度方式時,需要在配置文件頂部添加

         QQ截圖20171211130220.jpg

         QQ截圖20171211125147.jpg

     啓動varnish服務

     systemctl start varnish.service

     使用varnishadm加載default.vcl文件

     QQ截圖20171211130629.jpg

   

  後端RS的LAMP配置在這裏就不多說了;

    運行結果:

     訪問靜態資源

     QQ截圖20171211130750.jpg

     訪問動態資源

      QQ截圖20171211130822.jpg

       訪問phpMyAdmin

       QQ截圖20171211130929.jpg

        

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章