1. 程式人生 > >nginx反代+varnish緩存+後端LAMP平臺集群實現

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

nginxvarnishlamp

較為完善的集群實現方式,前端兩臺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配置:

? ? ??技術分享圖片

? ? ??技術分享圖片

? ? ??技術分享圖片

? ? ?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進行高可用。

? ? ?技術分享圖片

? ? ?

? ? ?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為管理端口

? ? ? ? ?技術分享圖片

? ? ? ??

? ? ? ? ?/etc/varnish/default.vcl配置:

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

? ? ? ? ?probe = {

? ? ? ? ? ? ? ?url = /health.html

? ? ? ? ? ? ? ?timeout = 3s

? ? ? ? ? ? ? ?interval = 2s

? ? ? ? ? ? ? ?window = 5

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

? ? ? ? }

? ? ? ? ?技術分享圖片

? ? ? ? ?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();即可。

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

? ? ? ? ?技術分享圖片

? ? ? ? ?技術分享圖片

? ? ?啟動varnish服務

? ? ?systemctl start varnish.service

? ? ?使用varnishadm加載default.vcl文件

? ? ?技術分享圖片

? ?

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

? ? 運行結果:

? ? ?訪問靜態資源

? ? ?技術分享圖片

? ? ?訪問動態資源

? ? ??技術分享圖片

? ? ? ?訪問phpMyAdmin

? ? ? ?技術分享圖片

? ? ? ??

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