码迷,mamicode.com
首页 > 其他好文 > 详细

varnish基础入门使用

时间:2018-07-26 00:21:38      阅读:222      评论:0      收藏:0      [点我收藏+]

标签:部分   set   nec   file   报文   ffffff   cti   多少   read   

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


varnish基础入门使用

标签:部分   set   nec   file   报文   ffffff   cti   多少   read   

原文地址:http://blog.51cto.com/12580678/2150227

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!