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

[经验分享] Linux_Varnish_(2)

[复制链接]

尚未签到

发表于 2018-5-19 14:03:26 | 显示全部楼层 |阅读模式
  官方文档:http://www.varnish-cache.org/#
    DSC0000.jpg
Varnish
   TLS:4.1 4.0
DSC0001.jpg
        下载地址:
http://www.varnish-cache.org/releases/install_redhat.html#install-redhat
架构图:
                     DSC0002.jpg
        varnish的配置文件是C语言格式,要想被程序读取,必须把配置文件手动编译成二进制代码(执行一条命令就可以)
        Management每隔几秒钟会探测child/cache进程是否存活,(类似whtch dog)
        Accept:接收并相应请求,并不负责处理
        Worker threads:负责处理请求,可能存在多进程.每个进程并发响应多请求.
        Log file:不指日志 而是在内存中用来保存日志所生成的工作区 (包括统计数据)
                varnishstat:用来查看统计数据
                varnishncsa/varnishlog:用来查看日志信息
                carnishtop:排名显示

         整个child/cache模块中的进程必须共享数据才能协调工作,这块共享内存则可以成为log file/shared memory log(所以logfile中有锁机制)
                每一个线程要想在log file中写数据 则必须有锁权限
                 

varnish的工作特性:
         当进程启动时,会占用大概90MB的内存空间,形成工作区,主要用来保存日志信息,(采用轮循机制),所以如果要保存日志,必须有进程负责读取工作区的数据并写入到硬盘中,
      

*************************************************安装步骤*********************
DSC0003.jpg
       ]# yum install varnish
************************************varnishde配置
    程序环境 :
    Centos 7:
            /etc/varnish/varnish.params: 配置varnish服务进程的工作特性:
    Centos6
           /etc/sysconfig/varnish*
                大多数操作并不依赖于配置文件 而是基于varnish's command line进行配置和查询
         /etc/varnish/default.vcl:配置child/Cache线程的工作属性:
         主程序:
                /usr/sbin/varnishd
         CLI interface:
                /usr/bin/carnishadmin
        Shared Memory Log 交互工具:
                /usr/bin/varnishhist
                /usr/bin/varnishlog
                /usr/binvarnishncsa
                /usr/bin/varnishstat
                /usr/bin/varnishtop
        测试工具:
                /usr/bin/varnishtest
                varnish_reload_vcl     vcl文件重载程序
启动服务:
    Stsremd Unit :
    /usr/lib/systemd/system/varnish.service
            carnish服务
    /usr/lib/systemd/system/varnishlog.service
    /usr/lib/systemd/system/varrishncsa.service
                日志持久化服务(用于把内存中的文件读取出来保存在磁盘上)用于不同格式的日志
********************************************************************
    varnish缓存数据机制:
           1.malloc[,size]     存储在内存中
           2.file[,parh[,size[,granularity]]] 存储到文件中 单个文件 黑盒机制(和nginx不同 是一个文件 不是bash分级)重启后失效
           3. persistent,path,size    重启后依然有效  在开发阶段 不可用 (黑盒)
********************************************************************
    Varnish程序的选项: man varnishd   (配置服务的属性的)
      程序选项:命令行选项
          -a address[:port][,address[:port][...]   在指定的地址上监听请求 默认本机
          -b host[:port] 指明后端服务器 ip地址
          -T   管理接口
          -s [name=]type[,options] : 定义缓存存储机制
          -f 指明VCL配置文件
          -F 运行与前台:
                ...
      运行时参数:
          -r param[,param..]read only 设定参数只读
          -p raram=value 设定运行的参数
        大多数参数都有默认值.可以在配置文件 /etc/barnish/varnish.params定义:
         
VARNISH_VCL_CONF=/etc/varnish/default.vcl  配置文件
           VARNISH_LISTEN_PORT=6081     监听端口(代理接口) 如果是前段一级代理 则可改为80端口
           VARNISH_ADMIN_LISTEN_ADDRESS=127.0.0.1  监听地址(管理)
           VARNISH_ADMIN_LISTEN_PORT=6082     管理监听地址
           VARNISH_SECRET_FILE=/etc/varnish/secret    varnishadmin的与共享密钥
           VARNISH_STORAGE="file,/var/lib/varnish/varnish_storage.bin,1G"    默认缓存存储位置及类型
           VARNISH_TTL=120   如果后端服务器没指明ttl  默认ttl缓存时常
           VARNISH_USER=varnish    默认运行身份
             VARNISH_GROUP=varnish   组身份
           DAEMON_OPTS="-p thread_pool_min=5 -p thread_pool_max=500 -p thread_pool_timeout=300"
           其他参数 -p指明  其他项请参考 ]# man varnish
*******************************
    虽然内存速度很快 但久而久之会产生内存碎片  速度下降很严重 所以一般还是基于pcie接口的ssd做磁盘缓存
*******************************
    VCL配置文件:
default.vcl  C语言格式. 配置cache的工作的机制的:"域"专有类型的配置语言(每个配置端有一个花括号)
         state engine:状态引擎:
         VCL有多个状态引擎,状态之间存在关联性,但彼此隔离 ,每个状态引擎使用return(x)指明
        关联至哪个下一个引擎
   ********************************************较老版本(3.0)的简单处理逻辑
                                 DSC0004.jpg
   方阔中是状态引擎
   请求处理流程:

  (1) 接收请求:vcl_recv;判断其是否可缓存;
   (a) 可缓存:vcl_hash
  (i) 命中:vcl_hit
  (ii)未命中:vcl_miss --> vcl_fetch
   (b) 不可缓存:vcl_fetch
  (2) 响应:vcl_deliver
  
  vcl_recv --> vcl_hash --> vcl_hit --> vcl_deliver
  vcl_recv --> vcl_hash --> vcl_miss --> vcl_fetch -->(有可能先缓存-->) vcl_deliver
  vcl_recv --> vcl_fetch --> vcl_deliver     请求的是不可缓存数据  (不可缓存数据 是否做缓存要看规则)
  vcl_recv --> vcl_pipe     (客户端请求 varnish理解不了  直接发给后端服务器)
                      
      ******************************************** 3.0版本图2 DSC0005.jpg
               
***************************************************************** 完整处理逻辑
             DSC0006.jpg
                          

                   

***********************************************以上为varnish3.0
DSC0007.jpg
其他变更:
DSC0008.jpg
    请参考  http://varnish-cache.org/docs/4.0/whats-new/upgrading.html


  Varnish 4:vcl状态引擎切换流程;
  request: vcl_recv --> vcl_hash
  (1) hit: vcl_hit --> vcl_deliver
  (2) pass, hit_for_pass: vcl_pass --> vcl_backend_fetch --> vcl_backend_response --> vcl_deliver
  (3) miss: vcl_miss --> [ vcl_pass-->]   vcl_backend_fetch --> vcl_backend_response --> vcl_deliver
  (4) purge: vcl_purge --> vcl_synth
  (5) pipe: vcl_pipe
  (6) busy: vcl_waiting
  
  两个特殊的引擎:
  vcl_init:在处理任何请求之前要执行的vcl代码;主要用于初始化VMODs;
  vcl_fini:所有请求都已经结束,在vcl配置被丢弃时调用;主要用清理VMODs;
  

***************************************************以上为varnish4.X模型**********************
4.

********************************实验过程
    由于实验不使用nginx做反代.所以 varnish为一级代理
                修改配置文件 /etc/barnish/varnish.params
                    
VARNISH_LISTEN_PORT=80
                修改配置文件  /etc/varnish/defaut.vcl
                            执行命令: varnish_reload_vcl   将配置文件读取
                     修改后端服务器地址为C7R3
                     DSC0009.jpg
        执行命令: varnish_reload_vcl   将配置文件读取
      DSC00010.jpg   
         并在C7R3上安装httpd服务,给定主页内容 server test 1,启动服务;
       直接请求 http://172.16.79.73  不经过varnish 首部如下: DSC00011.jpg
继续请求 http://172.16.79.71  经过varnish 首部如下
         DSC00012.jpg
    代理缓存生效
       ************************************varnishadmin管理命令
         DSC00013.jpg
    默认配置文件只允许从本机连入 Varnish命令  所以在本机上执行varnishadmin 命令 :
      选项:
        -T 指明Varnish服务器地址 可以不用交互模式
        -S 指明共享密钥
   在本机执行或在授权机执行:
    ]#  varnishadm -S /etc/varnish/secret  -T 127.0.0.1:6082 (在本机可以直接执varnishadmin)
         进入交互式模式 : help查看交互模式下的命令
                DSC00014.jpg
            vcl.list:显示列表    ist可能列出很多版本,但只能激活一个版本
            vcl.load:加载并编译
            vcl.use:激活
            vcl.discard 删除(先反激活)
       运行参数相关:
             param.show -l 显示列表
             param.show <param> 显示指定参数
             param.set < param><value> 设置参数的值
        缓存存储列表
            srorag.list
        后端服务器:
            backend.lish
***********************************************VCL 文件格式****************

  vcl语法格式: vim /etc/varnish/defaut.vcl
  https://www.varnish-cache.org/docs/4.0/users-guide/vcl-syntax.html
  
  (1) 支持注释符//,/*... */, #;
  (2) sub $name:定义子例程;sub vcl_recv {...};     通常指的是 cvl的状态引擎
  (3) 不支持循环,支持条件判断;
  (4) 有大量的内建变量,生效位置有特定要求;
  (5) 使用终止语句return,来决定下一个状态引擎;没有返回值;
  (6) 操作符:=,==, !, ~, &&, ||,>, <, >=, <=
        
DSC00015.jpg
例如修改:

  sub vcl_deliver {
      if (obj.hits>0) {         #obj.hits(内奸变量 当前资源的命中次数  真是当次请求 的变量)大于0
  set resp.http.X-Cache = "HIT";   #设定resp.http.X-Cache=hit   X-Cache首部不存在就加进去
  } else {
  set resp.http.X-Cache = "MISS";      #设定...MISS
  }
  } 这样请求资源就可看到是从cache返回的还是从 后端服务器返回的
要想生效配置:
]#varnishadmin
DSC00016.jpg
执行 vcl.load test1 default.vcl    #翻译default.vcl到配置test1
列出当前配置列表 (active 表示当前生效 acailable 表示可用 并未生效)
vcl.use test1 (使用test1 配置)
vcl.list      (查看状态)
    ********************再次用浏览器查看首部
            http://172.16.79.71    varnish的服务器
             DSC00017.jpg
    X-Cache:MISS    #因为是第一次访问
    第二次访问  X-Cache:HIT       ps:为毛我的浏览器跟shi一样坑....别人访问正常
  

运维网声明 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-462058-1-1.html 上篇帖子: Linux中的文件查找 下篇帖子: linux QT 配置
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

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

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

扫描微信二维码查看详情

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


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


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


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



合作伙伴: 青云cloud

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