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