zoukankan      html  css  js  c++  java
  • 编译安装 varnish-4.1.2和yum 安装 varnish-4.0.3

         vanish可以让用户自己选择缓存数据是存于内存还是硬盘,存于内存一般基于二八法则即常访问的数据是磁盘存储的总数据五分之一,因此内存也应该是硬盘文件大概
    五分之一。如果有多台vanish则,总内存满足即可,由前端代理服务器实现负载调度。最后由于缓存需要平凡的刷新,因此内存也不要过大,否则会浪费在内存调度算法上。
    一般7500转每分的磁盘只能完成每秒80左右的随机io,为了增加磁盘io,则可以做raind0,固态硬盘擦写十万次,是指写满整个磁盘才算一次。
          缓存的保持有两种方式为文档请求机制和时间过期机制,时间过期是指包含在客户端头部包括exprire(http1.0中)指缓存过期的绝对时间,cache-control(http1.1)

    指缓存过期的相对时间。cache-control中有很多控制机制,其中用的最多的max-age,相对时间一般为具体值如200是,当expire和cache-control同时存在时,以cache-conrol

    为中。

         Vanish缓存的保持有三种方法.file Malloc persistent等,前两种在服务器重启后缓

    存数据会丢失。vanish系统配置文件为/etc/sysconfig/vanish

    1.首先去官网下载

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

    2.解压缩 安装所需其他库文件

       tar zxf  varnish-4.1.2.tar.gz

      编译安装过程可能会缺少以下包  libedit-devel  pcre-devel  ncurses-devel

      yum -y install libedit-devel 

      yum -y install pcre-devel 

      yum -y install ncurses-devel

      ./configure --prefix=/usr/local/varnish 

            --bindir=/usr/local/varnish/bin  

            --sbindir=/usr/local/varnish/sbin

    3.安装

     make && make install    

    4.生成配置文件

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

    5.启动

    sbin/varnishd -f var/varnish/default.vcl -s malloc,1G -T 127.0.0.1:2000 -a 0.0.0.0:80

    6.使用yum安装varnish-4.0.3 另外也可以yum安装,由于varnish存在于epel源中因此

      yum install epel-release

      yum clean all

      yum list repo    更新并查看epel源是否已经存在
      rpm --nosignature -i https://repo.varnish-cache.org/redhat/varnish-4.0.el7.rpm
      yum install varnish

      yum 安装后varnish的配置文件为/etc/varnish/varnish.params  其中定义了varnish的默认acl为/etc/varnish/default.acl

      systemctl start varnishd.service                                启动varnish

      varnishadm -S /etc/varnish/secret -T 127.0.0.1:6082 登录varnish的管理接口 默认的 varnish的管理端口为6082

     使用以下命令编译修改的vcl

     再使用如下命令启用编译后的vcl

     默认的如果没有default的backend 则会使用第一个定义的backend 否则会使用defaultbackend

     

     在使用varnishstat查看varnish的命中情况时 报错

     

     使用ps -ef | grep varnishd 查看_.vsm文件所在

     

    使用 lsof -p 3031 查看

     

    创建varnishstat 所需的文件

     

     因此可以正常运行varnishstat了

     注意:缓存一般由键-值组成,当设定cookie后 缓存就会由键-值-cookies 组成 只有相同用户请求相同资源才会命中,因此为了提高命中率。必须在vcl_recv中移除cookie,

    且在vcl_fetch 中

    acl 4.0 语法讲解

    vcl 4.0;                         //4.0定义必须声明
    import directors;           //4.0定义必须声明
    backend web1 {
      .host = "172.16.1.2";
      .port = "80";
     
    }

    backend web2 {
       .host = "172.16.1.3";
       .port = "80";
       .probe = {
         .url = "/index.html";
         .window = 5;
         .threshold = 2;
         .interval = 3s;
       }
    }
    sub vcl_init {  //3.0中无,4.0中在使用director做负载均衡时必须使用此指令
    #  new round_robin_director = directors.round_robin();
       new random_director = directors.random();
       random_director.add_backend(web1, 10);
       random_director.add_backend(web2, 5);

    }
    #directors websrvs random {      //3.0中定义方式
    #   {
    #     .backend = web1;
    #     .weight = 2;
    #   }
    #   {
    #     .backend = web2;
    #     .weight = 1;
    #   }
    #
    #}

    acl purgers {
     "127.0.0.1";
     "172.16.0.0"/16;
    }


    sub vcl_recv {
     
    # set req.backend = webservs;     //3.0中定义方式
       set req.backend_hint = random_director.backend();
    # if (req.url ~ ".(jpg|png|css)$") {
    #   set req.backend = web1;
    # } else {
    #
    #   set req.backend = web2;
    #}
     
     if (req.method == "PURGE") {
       if (!client.ip ~ purgers){
    #   error is used 3.0,now is replaced by synth
    #      error 405 "method not allow";
           return(synth(405,"method not allowed"));
       }
       return (purge);
     }

     if (req.url ~ "test.html") {  //若请求的为test.html则不查询缓存

        return(pass);

      }
      return(hash);  //3.0中return(lookup),4.0中返回return(hash)而在vcl_hash中才返回lookup

    }


    #sub vcl_hit {     //3.0中定义方式,4.0中 purge 只能使用在vcl_recv中,且只能return
    #  if (req.method == "PURGE"){
    #      return (purge);
    #    error 200 "Purged OK";  //3.0中定义方式,4.0中使用synth输入错误信息
    #     return(synth(200,"purged OK"));
    #  }

    #}


    sub vcl_miss {
      if (req.method == "PURGE"){
    #      purge;                               //4.0中purge只能用在vcl_recv中,且只能return(purge)
    #      error  404 "not in cache";
           return(synth(404,"not in cache"));
       }

    }


    sub vcl_pass {
       if (req.method == "PURGE"){
    #     error 502 "purged on a passed object";
          return(synth(502,"purged on a passed object"));
       }

    }


    #sub vcl_fetch {    vcl_feth is used in varnish 3.0, now 4.0 is replaced by vcl_backend_response
     sub vcl_backend_response {

      if (bereq.url ~ ".(jpg|gif|png)$") {
        set beresp.ttl = 3600s;
      }
      if (bereq.url ~ ".(css|js|html)$") {
        set beresp.ttl = 1200s;
      }

    }

    sub vcl_deliver{   //vcl_deliver即最终返回给用户时修改response中的信息

     if (obj.hits > 0) {

        set resp.http.X-Cache = "hit from " + server.ip;
      } else {


        set resp.http.X-Cache = "miss";
      }

    }

     HTTP缓存详细查看

     http://www.cnblogs.com/_franky/archive/2011/11/23/2260109.html

  • 相关阅读:
    Win7 SP1 安装SQL Server 2012时提示“此计算机上的操作系统不符合 SQL Server 2012的最低要求”
    ajax jsonp跨域
    Caused by: Unable to locate parent package [json-package] for [class com.you.action.ColumnAction]
    PHP MVC自己主动RBAC自己主动生成的访问路由
    Service与Activity与交流AIDL
    SVN常见错误两项纪录
    EL表达式语言
    oracle11g ASM(修复损坏的磁盘组头asm修复2)
    如何使用iOS 8 指纹识别,代码、示例
    EXCEL Pivot table manipulate
  • 原文地址:https://www.cnblogs.com/betajj-blog/p/5549082.html
Copyright © 2011-2022 走看看