Varnish是一款高性能的開源HTTP加速器,其採用全新的軟件體系機構,和現在的硬件體系緊密配合,與傳統的 squid 相比,varnish 具有性能更高、速度更快、管理更加方便等諸多優點,很多大型的網站都開始嘗試使用 varnish 來替換 squid,這些都促進 varnish 迅速發展起來。
Varnish 的作者Poul-Henning Kamp是FreeBSD的內核開發者之一,他認爲現在的計算機比起1975年已經複雜許多。在1975年時,儲存媒介只有兩種:內存與硬盤。但現在計算機系統的內存除了主存外,還包括了CPU內的L1、L2,甚至有L3快取。硬盤上也有自己的快取裝置,因此Squid Cache自行處理物件替換的架構不可能得知這些情況而做到最佳化,但操作系統可以得知這些情況,所以這部份的工作應該交給操作系統處理,這就是 Varnish cache設計架構。
緩存類型:代理式緩存(遞歸方式);旁掛式緩存(迭代)
緩存機制:過期機制(Expires)、條件式緩存(通過最近文件修改時間戳或Etag的擴展標籤來辨別)
官方網站:http://varnish-cache.org/releases/index.html
安裝varnish與配置 :
rpm安裝:
curl -s https://packagecloud.io/install/repositories/varnishcache/varnish61/script.rpm.sh | sudo bash
sudo yum install varnish-6.1.1-1.el7.x86_64
或,下載rpm包,然後執行:
wget https://packagecloud.io/varnishcache/varnish61/packages/el/7/varnish-6.1.1-1.el7.x86_64.rpm
rpm -ivh varnish-6.1.1-1.el7.x86_64.rpm
或下載rpm包後執行:yum install varnish-devel.x86_64 varnish-libs-devel.x86_64 -y
啓動: systemctl start varnish或service varnish start
Varnish配置文件參考手冊: https://docs.varnish-software.com/
配置文件修改: vim /etc/varnish/default.vcl ,一個案例演示:黃色是服務器主機名,綠色是IP
backend imgsrv1 {
.host = "192.168.10.11";
.port = "80";
}
backend imgsrv2 {
.host = "192.168.10.12";
.port = "80";
}
backend appsrv1 {
.host = "192.168.10.21";
.port = "80";
}
backend appsrv2 {
.host = "192.168.10.22";
.port = "80";
}
sub vcl_init {
new imgsrvs = directors.random();
imgsrvs.add_backend(imgsrv1,10);
imgsrvs.add_backend(imgsrv2,20);
new staticsrvs = directors.round_robin();
appsrvs.add_backend(appsrv1);
appsrvs.add_backend(appsrv2);
new appsrvs = directors.hash();
appsrvs.add_backend(appsrv1,1);
appsrvs.add_backend(appsrv2,1);
}
sub vcl_recv {
if (req.url ~ "(?i)\.(css|js)$" {
set req.backend_hint = staticsrvs.backend();
}
if (req.url ~ "(?i)\.(jpg|jpeg|png|gif)$" {
set req.backend_hint = imgsrvs.backend();
} else {
set req.backend_hint = appsrvs.backend(req.http.cookie);
}
}
varnish的幾個命令行工具介紹:
varnishlog 把每一個請求拆開詳細顯示
varnishtop 把請求method按照速率做一個簡單排序
varnishstat 動態顯示請求
參數:-l -f FILED_NAME 只顯示特定性一次;
-l 可用於-f選項指定的字段名稱列表
varnishncsa 按照ncsa格式顯示日誌
varnish的訪問日誌一般在內存中,容量大概只有80-90M,用不了多久就會被覆蓋,如果不想別覆蓋,可以把varnishncsa當日志服務啓動(建議不開啓日誌功能,容易產生干擾)
varnish程序的幾個重要文件:
/etc/varnish/varnish.params: 配置varnish服務進程的工作特性,例如監聽的地址和端口,緩存機制;
/etc/varnish/default.vcl:配置各Child/Cache線程的緩存策略;
主程序:/usr/sbin/varnishd