varnish:缓存、加速器,反向HTTP代理
varnish通过可以基于文件系统接口进行访问的共享内在区域来记录日志(shared memory log),共享内存日志大小默认一般为90MB,
分为两部分:前一部分为计数器,后一部分请求相关的数据
管理进程:编译VCL并应用新配置;监控vanish;初始化varnish;CLI接口;
Child/cache:
Acceptor:接收新的连接请求;
worker threads:处理用户请求;
Expiry:清理缓存中的过期对象;
vcl: Varnish Configuration Language
缓存策略配置接口;
基于“域”的简单编程语言;
varnish如何存储缓存对象:
file: 单个文件;不支持持久机制;
malloc: 内存;使用malloc()库调用在varnish启动时向内在申请指定大小的空间
persistent:基于文件的持久存储;
malloc-syntax: malloc[,size]
file-syntax: file[,path[,size[,granularity]]]
安装:yum install varnish epel源
配置文件:
配置进程相关参数:/etc/varnish/varnish.params
配置缓存功能:/etc/varnish/default.vcl
命令行工具:varnishadm -S /etc/varnish/secret -T IP:PORT 6082
缓存处理的步骤:接收请求 --> 解析请求 (提取请求的URL及各种首部)--> 查询缓存 --> 新鲜度检测 --> 创建响应报文 --> 发送响应 --> 记录日志
请求处理流程:
(1)请求的为可缓存:
a.命中:通过本地缓存响应
b.未命中:到后端服务器取得相应内容;
可缓存对象:先缓存再响应
缓存:定义缓存时间;自定义缓存键
不可缓存:不缓存直接响应
(2)请求的为不可缓存:直接到后端服务器取得相应内容
配置vcl使用:
1.定义在vcl_deliver中,向响应给客户端的报文添加一个自定义首部X-Cache;
if (obj.hits>0) {
set resp.http.X-Cache = "HIT"; "HIT via" + " # " + server.ip;显示后端响应的服务器IP
} else {
set resp.http.X-Cahce = "MISS";
}
2.强制对某资源的请求,不检查缓存#以login、admin开头的不予缓存;
vcl: backend, backend的调用,健康状态检测的定义,负载均衡的实现,根据资源类型不同完成分发,控制哪些内容不查或查询缓存
3.backend server定义
backend name {
.attribute = "value";
}
常用选项:
.host: BE主机的IP;
.port:BE主机监听的PORT;
.probe: 对BE做健康状态检测;
.max_connections:并连接最大数量;
4.backend server的健康状态检查定义:
.url: 判定BE健康与否要请求的url;
.expected_response:期望响应状态码;默认为200;
.interval = 1s;间隔多长时间
.window = 8;基于最近多少次探测来做健康判断
.threadhold = 4;基于多少次探测成功多少次
.timeout = 2s;超时时间
例如:多个backend server基于不同的资源类型请求来调度,并做健康状态检测,实现动静分离
5.实现负载均衡:
import directors; #加载负载均衡
sub vcl_init {
new mycluster = directors.round_robin(); 定义负载均衡器名称:new NAME ,指明调度方法
mycluster.add_backend(websrv1);
mycluster.add_backend(websrv2);
}
vcl_recv {
set req.backend_hint = mycluster.backend();
}
调度算法:fallback, random, round_robin, hash
原文地址:http://blog.51cto.com/12580678/2150227