Varnish部署


上缓存服务器的目的:1、减少clint对后端服务器的访问压力。2、在静态资源较多的情况下,服务端可以快速对clint的访问做出相应。
缓存服务器目前比较有名气,市面上缓存代理服务器使用比较多的Varnish/squid。
squid的主要是缓存大文件。Varnish主要缓存静态资源,如图片。
Varnish版本的区别:新版本Varnish5,client/backend分离,新的vanishlog查询语言,安全方面据说有提升。
首先是必须定义版本号: vcl 4.0。VMOD’s更独立化,官方推荐是加载Standard VMOD’s(std)。
另外director已变为VMOD,如需使用,需要import directors。
vcl_fetch函数被vcl_backend_response和vcl_backend_fetch代替,且req.*不再适用vcl_backend_response,只能使用bereq.*。
至于vcl_backend_fetch貌似没哪个doc见到详细用法。
error变更为return(synth(http_code,message)),req.backend成了req.backend_hint,req.request变更为req.method,obj为只读对象了。
vcl_synth采用resp.*,而非原来的obj.*。
vcl_error变更为vcl_backend_error,必须使用beresp.*,而不是obj.*。
关键字”purge;”命令,已被去除。在vcl_recv使用return(purge)。
hit_for_pass通过set beresp.uncacheable = true;来指定。
vcl_recv必须将lookup变更返回hash,vcl_hash必须将hash变更返回lookup,vcl_pass必须将pass变更返回fetch。
req.backend.healty被std.healthy(req.backend)代替,但是设置不了grace,鸡肋,被抛弃了,现在仅能做的就是keepalive的作用了。
req、bereq,resp、beresp之间不同,可被使用的位置不同。
server.port、client.port分别变更为std.port(server.ip)、std.port(client.ip),跟上面healthy一样,需要import std。
session_linger变更为timeout_linger,sess_timeout变更为timeout_idle,sess_workspace被抛弃了。
remove被完全弃用了,不过我一直用unset的说。
return(restart)变更为return(retry),vcl_backend_fetch会被使用到。
自定义sub函数不能以vcl_开头,调用方式call udf。

部署架构:单节点/双节点1、如果你们的服务在云节点部署那久简单了,流行的云平台都有负载均衡器(HA/LB)等等,部署2台Varnish 挂载后端nginx 就完事了。2、如果你们自建机房,Varnish的前端代理可以选择(Nginx/HA),这2套开源软件都比较流行,做代理性能也不错。
下面是大致的Varnish逻辑图:第一种全部单节点:

第二种Varnish双节点,Nginx单节点:
第三种双节点:
Varnish的安装上篇已经写过,请参考之前的博客;
Varnish配置参数:
Varnish的配置文件,这块使用的版本4.0的,其他版本还是有区别的,Varnish官网到5版本了。

需要配置文件参考的可以直接博客回复;Varnish的常用命令:
重新载入配置文件:varnish_reload_vcl
查看Varnish的日志常被缓存的资源:varnishlog
另一种查看日志的姿势:varnishncsa
Varnish的管理端口命令:varnishadm
查看varnish命中比率:varnishstat图标查看varnish命中:varnishhist配置测试第一种测试:直接略过Varnish,直接访问nginx测试:
通过linux自带命令curl访问查看nginx日志:
第二种访问域名,域名解析在Varnish这台主机:curl域名测试:查看结果:
第三种:通过web 浏览器访问,查看命中:
第四种测试:改变index.html文件内容,测试结果:第一次都不会命中,第二次/第三次全部命中。
配置Varnish,只要是test.html文件就pass,测试结果:
以下是return (pass)和return (pipe)的区别,摘录别人的博客:
调用 pass 函数,从后端服务器调用数据调用 pipe 函数,建立客户端和后端服务器之间的直接连接,从后端服务器调用数据调用hash函数,从缓存中查找应答数据并返回,如果查找不到,则调用pass函数从后端服务器调用数据 。
http 建立连接的过程 http 请求的类型:get post head先说http建立连接的过程当浏览器想要获得一个网页内容时,如在浏览器输入www.google.com。这时浏览器开始跟服务器建立连接,先执行三次握手,确认建立连接。之后浏览器会发送请求,一个网页包含多个内容,如图片,正文,html代码,css代码,js代码。如果在html 1.0版本中,请求一个文件是需要建立一次连接的,多个请求多个连接。开销是很大的。而在HTML 1.1中,具有了长连接的特性,允许在keep-live 时间内保持连接,在这段时间内无须再建立连接就可以发送多个请求。请求完成 或 keep-live时间到限,连接断开。HTTP 请求的类型:HTTP 请求的类型有几种,下面是主要的几种: GET : 请求指定的页面信息,并返回实体主体。 HEAD: 只请求页面的首部。 POST: 请求服务器接受所指定的文档作为对所标识的URI的新的从属实体。说白了,请求一个静态的HTML页面就是用get类开发云主机域名型,而如果你在新浪微博上发一条微博,其实就是post 类型。总结来说,get是请求相关URI并接受服务器的返回数据。为了接收数据。post是发送数据给服务器,服务器需要对这些数据做相应的处理。为了发送数据。以上都明白的话,就可以解答这三个问题了:pass和pipe都从后端服务器取数据,它们之间有什么不同呢? 什么情况下用pass,什么情况下用pipe呢? 什么样的数据会被缓存在varnish中呢? 问:pass和pipe都从后端服务器取数据,它们之间有什么不同呢? 答:当vcl_recv调用 pass 函数时,pass将当前请求直接转发到后端服务器。而后续的请求仍然通过varnish处理。例如,建立了HTTP连接之后,客户端顺序请求 a.css 、a.png两个文件,“当前请求”指的是第一个请求,即a.css,a.css被直接转发到后端服务器,不被缓存。而后续的a.png则再由varnish来做处理,varnish会判断a.png 如何处理。总结:一个连接中除了当前请求,其它请求仍然按照正常情况由varnish处理。而pipe模式则不一样,当vcl_recv判断 需要调用 pipe 函数时,varnish会在客户端和服务器之间建立一条直接的连接 ,之后客户端的所有请求都直接发送给服务器,绕过varnish,不再由varnish检查请求,直到连接断开。什么情况下用pass,什么情况下用pipe呢? 答:pass 通常只处理静态页面。即只在GET 和 HEAD 类型的请求中时才适合调用pass函数。另外,需要注意的一点是,pass模式不能处理POST请求,为什么呢?因为POST请求一般是发送数据给服务器,需要服务器接收数据,并处理数据,反馈数据 。是动态的,不作缓存。示例代码如下:if (req.request !=”GET” && req.request != “HEAD”){ return (pipe); } 那什么情况下用pipe?由以上陈述可以知,类型是POST时用pipe,但是也许还不太清晰。举个例子,当客户端在请求一个视频文件时,或者一个大的文档,如.zip .tar 文件,就需要用pipe模式,这些大的文件是不被缓存在varnish中的。什么样的数据会被缓存在varnish中呢? 答:varnish只缓存静态数据。在网上搜到的varnish缓存策略,可以解答这个问题:varnish缓存策略缺省是根椐后端返回的http状态码决定是否缓存。可以缓存的状态码如下:200 203 300 301 302 410 404
这位大师的博客链接:http://yeelone.blog.51cto.com/1476571/772369/

相关推荐: linux中的分区和目录

一、目录和分开发云主机域名区区别:Linux的分区是物理上的概念,从物理上将存储空间分开;Linux的目录是逻辑上的概念,Linux的目录树实际上是一个分区之间的数据逻辑结构关系,不是物理结构;联系:一个分区必须挂载在一个目录下才能使用,分区可以挂载到任何目录…

免责声明:本站发布的图片视频文字,以转载和分享为主,文章观点不代表本站立场,本站不承担相关法律责任;如果涉及侵权请联系邮箱:360163164@qq.com举报,并提供相关证据,经查实将立刻删除涉嫌侵权内容。

(0)
打赏 微信扫一扫 微信扫一扫
上一篇 04/02 13:55
下一篇 04/02 15:26