較爲完善的集羣實現方式,前端兩臺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