设为首页 收藏本站
查看: 1309|回复: 0

[经验分享] 【varnish】分流测试案例分析

[复制链接]
累计签到:1 天
连续签到:1 天
发表于 2014-9-4 09:13:58 | 显示全部楼层 |阅读模式
1.先解释varnish是什么?[摘]

   Varnish 是一款高性能开源的Http加速器(其实是反向代理)。

   工作流程:与服务器软件类似,分为master(management)进程和child(worker,主要做cache的工作)进程。master进程读入命令,进行一些初始化,然后fork并监控child进程。child进程分配若干线程进行工作,主要包括一些管理线程和很多woker线程。

1.vcl_recv,首先接收请求,判断是否要进一步处理,还是直接转发给后端(pass)等。 此过程中可以使用和请求相关的变量,例如客户端请求的url,ip,user-agent,cookie等,此过程中可以把不需缓存的地址,通过判断(相等、不相等、正则匹配等方法)转给后端,例如gif/png/jpg/css/js等静态文件;
2.vcl_fetch,当从后端服务器获取内容后会进入此阶段,除了可以使用客户端的请求变量,还可以使用从后端获取的信息(bersp),如后端返回的头信息,设置此信息的缓存时间TTL等;
3.vcl_miss 缓存未命中时中要做的处理
4.vcl_hit 缓存命中后做的处理
5.vcl_delever 发送给客户端前的处理
6.vcl_pass 交给后端服务器
7.vcl_hash 设置缓存的键值key

首次请求时过程如下:
recv->hash->miss->fetch->deliver
缓存后再次请求:
recv->hash->hit->deliver(fetch的过程没了,这就是我们要做的,把要缓存的页面保存下来)
直接交给后端pass的情况:
recv->hash->pass->fetch->deliver(直接从后端获取数据后发送给客户端,此时Varnish相当于一个中转站,只负责转发)


*详细请求过程可以参考./bin/varnishlog中的输出日志2.为什么要进行varnish分流?

   Varnish makes websites fly!

   可以把整个网页内容缓存到内存(或文件)中,并设置不同类型的页面缓存不同时间(TTL),同时提供缓存的更新(purge)。
此外还可以设置多个后端服务器,支持后端服务器的健康检查,Header甚至url地址的重置修改,以及ESI(Edge Side Includes)功能(与nginx的ssi类似)


3.如何安装和配置?

【摘自】http://www.wangnow.com/article/17-varnish-makes-websites-fly

   一、安装
         下载源文件http://www.varnish-cache.org/releases,或者选择相应的编译版本直接安装(如直接安装方式以下步骤可跳过)

       $ tar zxf varnish-2.1.5.tar.gz

        $ cd varnish-2.1.5/


#假设安装在/data/app/varnish下,详细安装设置查看帮助./configure --help

       $ ./configure --prefix=/data/app/varnish

      $ make

    $ make install


注意,如果配置中提示一个或者其中几个警告信息的话,是没有安装对应的支持库

    configure: WARNING: xsltproc not found – not building documentation

    checking for rst2man... no

    checking for rst2man.py... no

    configure: WARNING: rst2man not found – not building man pages

    checking for clock_gettime in -lrt... yes

    checking for dlopen in -ldl... yes

    checking for library containing initscr... no

    configure: WARNING: curses not found; some tools will not be built


直接安装对应扩展库即可,否则varnishhist varnishtop varnishsizes varnishstat这些工具不会安装

  sudo apt-get install xsltproc  rst2man libncurses5-dev


二、配置
首先,修改Varnish的配置文件default.vcl,默认在安装目录的./etc/varnish/下,当然,在哪并不重要,可以在启动服务的时候指定配置文件(关键你要记得位置……)
#开头的是注释标记,.host表示的是后端服务器的地址或者域名,.port其对应的端口号(这里为了方便测试,Varnish和web服务器都位于一台机子上,我们用Varnish监听8080端口,暂时先不修改原web服务器的80端口)

backend default {

     .host = "127.0.0.1";

     .port = "80";

}


运行Varnish

sudo ./sbin/varnishd -f /data/app/varnish/etc/varnish/default.vcl -s malloc,32M\

-T 127.0.0.1:2000 -a 0.0.0.0:8080 -F


验证页面有Varnish的标准

直接访问localhost:8080即可看到经过Varnish输出的页面了!
通过Firebug或者curl -I查看http头信息:

Server: nginx

Content-Type: text/html

Last-Modified: Sat, 09 Apr 2011 15:51:38 GMT

Content-Encoding: gzip

Content-Length: 134

Date: Thu, 05 May 2011 14:15:59 GMT

X-Varnish: 1047954835 1047954830

Age: 7

Via: 1.1 varnish

Connection: keep-alive

首先可以看Age字段,如果是大于0的话,说明是从缓存命中的。其次查看X-Varnish字段,如果是两个数字例如X-Varnish: 1668515406 1668515405

代表的是Varnish两次请求id(req.xid):一个为发起请求的id,另外一个是获取缓存的id,而缓存未命中或者pass到后端的情况都是一个数值(当然你可以在deliver过程中修改这些头信息或者直接隐藏掉)


Notice:

如果后端程序设置了类似这样的头信息Cache-Control: max-age=300
会重置默认的缓存时间TTL,当然你可以在配置文件中重置这个时间


4.如何测试varnish数据准确性?

(1)分流code一般记录在查审

   /usr/local/varnish/etc/varnish/default.vcl

(2)一定优先保证测试数据是正确的

(3)访问页面查看请求url日志记录

  sudo tail -f /var/log/messages

(4)所有准备都做好清除Varnish后重新访问页面

  sudo /etc/init.d/varnish restart




运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-24356-1-1.html 上篇帖子: haproxy的安装与配置 下篇帖子: Linux安装配置varnish web加速器 案例分析
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表