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

Varnish 缓存加速

时间:2015-09-07 21:14:51      阅读:306      评论:0      收藏:0      [点我收藏+]

标签:

Varnish可以有效降低web服务器的负载,提升访问速度。按照HTTP协议的处理过程,web服务器接受请求并且返回处理结果,理想情况下服务器要在不做额外处理的情况下,立即返回结果,但实际情况并非如此。

当把Varnish部署上之后,web请求的处理过程会有一些变化。客户端的请求将首先被Varnish接受。Varnish将分析接收的请求,并将其转发到后端的web服务器上。后端的web服务器对请求进行常规的处理,并将依次将处理结果返回给Varnish

但Varnish的功能并非仅限于此。Varnish的核心功能是能能将后端web服务器返回的结果缓存起来,如果发现后续有相同的请求,Varnish将不会将这个请求转发到web服务器,而是返回缓存中的结果。这将有效的降低web服务器的负载,提升响应速度,并且每秒可以响应更多的请求。Varnish速度很快的另一个主要原因是其缓存全部都是放在内存里的,这比放在磁盘上要快的多。诸如此类的优化措施使得Varnish的相应速度超乎想象。但考虑到实际的系统中内存一般是有限的,所以需要手工配置一下缓存的空间限额,同时避免缓存重复的内容。 



安装命令

sudo wget http://repo.varnish-cache.org/source/varnish-3.0.3.tar.gz

sudo tar -zxvf varnish-3.0.3.tar.gz 
cd varnish-3.0.3
sh autogen.sh 
sh configure
( make && make install )
make
make install

启动命令.
cd etc/
 vi default.vcl

/usr/local/test/varnish-3.0.3/bin/varnishd/varnishd -f /usr/local/test/varnish-3.0.3/etc/default.vcl 

妈个鸡 竟然报错。

原来HTML 分开了行 他就不认识了。 语法跟JAVA拼接字符串一样 FUCK。。




ps -ef | grep varnish

技术分享

netstat -ntlp | grep varnish   查看 varnish 端口
curl -I http://127.0.0.1:80/pub/image/233/100115936744.png

技术分享

  1      从命令执行结果可知,PID为22378和22379的进程是varnish的日志输出进程,而PID为30685的进程是varnishd的主进程,并且派生出了一个PID为390的子进程。这点跟apache类似。
如果varnish正常启动的话,80端口和3500端口应该处于监听状态,通过如下命令可以查看:
netstat -antl|grep 80
netstat -antl|grep 3500
netstat -antl|grep 30001

        其中,80端口为varnish的代理端口,3500为varnish的管理端口。

2、查看varnish缓存效果与状态
 可以通过浏览器访问对应的网页,查看varnish缓存的效果,如果varnish缓存成功的话,第二次打开网页的速度会明显比第一次快,但是这种方式并不能够完全说明问题,下面通过命令行方式,通过查看网页头来查看命中情况,操作如下:

  1. [root@varnish-server ~]# curl -I http://www.ixdba.net/a/mz/2010/0421/11.html  
  2. HTTP/1.1 200 OK  
  3. Server: Apache/2.2.14 (Unix) PHP/5.3.1 mod_perl/2.0.4 Perl/v5.10.1  
  4. Last-Modified: Sat, 10 Jul 2010 11:25:15 GMT  
  5. ETag: "5e850b-616d-48b06c6031cc0"  
  6. Content-Type: text/html  
  7. Content-Length: 24941  
  8. Date: Fri, 09 Jul 2010 08:29:16 GMT  
  9. X-Varnish: 1364285597  
  10. Age: 0  
  11. Via: 1.1 varnish  
  12. Connection: keep-alive  
  13. X-Cache: MISS from www.ixdba.net 

  #这里的"MISS"表示此次访问没有从缓存读取
再次打开这个页面,查看网页头信息:
 

  1. [root@varnish-server ~]# curl -I http://www.ixdba.net/a/mz/2010/0421/11.html  
  2. HTTP/1.1 200 OK  
  3. Server: Apache/2.2.14 (Unix) PHP/5.3.1 mod_perl/2.0.4 Perl/v5.10.1  
  4. Last-Modified: Sat, 10 Jul 2010 11:25:15 GMT  
  5. ETag: "5e850b-616d-48b06c6031cc0"  
  6. Content-Type: text/html  
  7. Content-Length: 24941  
  8. Date: Fri, 09 Jul 2010 08:30:35 GMT  
  9. X-Varnish: 1364398612 1364285597  
  10. Age: 79  
  11. Via: 1.1 varnish  
  12. Connection: keep-alive  
  13. X-Cache: HIT from www.ixdba.net   

 #由“HIT”可知,第二次访问此页面时,是从缓存中读取内容了,也就是缓存命中。


缓存命中率的高低直接说明了varnish的运行状态和效果,较高的缓存命中率说明了varnish运行状态良好,web服务器的性能也会提高很多,反之,过低的缓存命中率说明varnish的配置可能存在问题,那么就需要进行调整,因此,从整体上了解varnish的命中率和缓存状态,对于优化和调整varnish至关重要。
varnish提供了一个varnishstat命令,通过它可以帮我们获得很多重要的信息。
下面是一个varnish系统的缓存状态:

  1. [root@varnish-server ~]#/usr/local/varnish/bin/varnishstat  -n /data/varnish/cache  
  2. Hitrate ratio:       10      100      113  
  3. Hitrate avg:     0.9999   0.9964   0.9964  
  4.  
  5.         9990        68.92        49.70 Client connections accepted  
  6.       121820       953.84       606.07 Client requests received  
  7.       112801       919.88       561.20 Cache hits  
  8.           68         0.00         0.34 Cache misses  
  9.         2688        33.96        13.37 Backend conn. success  
  10.         6336         1.00        31.52 Backend conn. reuses  
  11.         2642        33.96        13.14 Backend conn. was closed  
  12.         8978        29.96        44.67 Backend conn. recycles  
  13.         6389         1.00        31.79 Fetch with Length  
  14.         2630        32.96        13.08 Fetch chunked  
  15.          444          .            .   N struct sess_mem  
  16.           23          .            .   N struct sess  
  17.           64          .            .   N struct object  
  18.           78          .            .   N struct objectcore  
  19.           78          .            .   N struct objecthead  
  20.          132          .            .   N struct smf  
  21.            2          .            .   N small free smf  
  22.            3          .            .   N large free smf  
  23.            6          .            .   N struct vbe_conn  
  24.           14          .            .   N worker threads  
  25.           68         1.00         0.34 N worker threads created  
  26.            0         0.00         0.00 N queued work requests  
  27.         1201        11.99         5.98 N overflowed work requests  
  28.            1          .            .   N backends  
  29.            4          .            .   N expired objects    
  30.         3701          .            .   N LRU moved objects  
  31.       118109       942.85       587.61 Objects sent with write  
  32.         9985        71.91        49.68 Total Sessions  
  33.       121820       953.84       606.07 Total Requests  




最后这个鸟样。

  1. backend default {
  2. .host = "172.28.5.131";
  3. .port = "3001";
  4. .connect_timeout = 5s;
  5. .first_byte_timeout= 5s;
  6. # .probe = {
  7. # health check
  8. # .url = "/check.txt";
  9. # .interval = 5s;# .timeout = 5s;
  10. # .window = 5;
  11. # .threshold = 3;
  12. # }
  13. }
  14. sub vcl_recv {
  15. # if (req.restarts == 0) {
  16. # if (req.http.x-forwarded-for) {
  17. # set req.http.X-Forwarded-For = req.http.X-Forwarded-For "," client.ip;
  18. # } else {
  19. # set req.http.X-Forwarded-For = client.ip;
  20. # }
  21. # }
  22. if (req.request != "GET" && req.request != "HEAD" && req.request != "PUT" && req.request != "POST" && req.request != "TRACE" && req.request != "OPTIONS" && req.request != "DELETE") {
  23. /* Non-RFC2616 or CONNECT which is weird. */
  24. return (pipe);
  25. }
  26. if (req.request != "GET" && req.request != "HEAD") {
  27. /* We only deal with GET and HEAD by default */
  28. return (pass);
  29. }
  30. if (req.http.Authorization || req.http.Cookie) {
  31. /* Not cacheable by default */
  32. return (pass);
  33. }
  34. return (lookup);
  35. }
  36. sub vcl_pipe {
  37. # Note that only the first request to the backend will have
  38. # X-Forwarded-For set. If you use X-Forwarded-For and want to
  39. # have it set for all requests, make sure to have:
  40. # set bereq.http.connection = "close";
  41. # here. It is not set by default as it might break some broken web
  42. # applications, like IIS with NTLM authentication.
  43. return (pipe);
  44. }
  45. sub vcl_pass {
  46. return (pass);
  47. }
  48. sub vcl_hash {
  49. # set req.hash += req.url;
  50. # if (req.http.host) {
  51. # set req.hash += req.http.host;
  52. # } else {
  53. # set req.hash += server.ip;
  54. # }
  55. # return (hash);
  56. }
  57. sub vcl_hit {
  58. # if (!obj.cacheable) {
  59. # return (pass);
  60. # }
  61. return (deliver);
  62. }
  63. sub vcl_miss {
  64. return (fetch);
  65. }

  66. sub vcl_fetch {
  67. # if (!beresp.cacheable) {
  68. # return (pass);
  69. # }
  70. # if (beresp.http.Set-Cookie) {
  71. # return (pass);
  72. # }
  73. return (deliver);
  74. }
  75. sub vcl_deliver { set resp.http.x-cache=obj.hits; return (deliver); }
  76. # 显示x_cache 用。
  77. sub vcl_error {
  78. # set obj.http.Content-Type = "text/html; charset=utf-8";
  79. # synthetic {
  80. # "<?xml version="1.0" encoding="utf-8"?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN""http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"><html><head><title>"
  81. # }
  82. #
  83. # obj.status " " obj.response {
  84. # "</title></head><body><h1>Error "
  85. # }
  86. #
  87. # obj.status " " obj.response {
  88. # "</h1><p>"
  89. # }
  90. #
  91. # obj.response {
  92. # "</p><h3>Guru Meditation:</h3><p>XID: "
  93. # }
  94. # req.xid {
  95. # "</p><hr><p>Varnish cache server</p></body></html>"
  96. # };
  97. return (deliver);
  98. }

文件删除了所有的 #内容。技术分享




wget -O varnishd https://raw.github.com/gist/3671408/3a51578bbd60a4cf8317bdc9508527b81eb23da5/varnishdcp varnishd /etc/init.d/varnishdchmod +x /etc/init.d/varnishd/etc/init.d/varnishd start


ps -ef|grep varnish


























附件列表

     

    Varnish 缓存加速

    标签:

    原文地址:http://www.cnblogs.com/rocky24/p/a07ef67ef093c646a563c25b92b80e14.html

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