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

[经验分享] Varnish工作原理及配置详解

[复制链接]
累计签到:1 天
连续签到:1 天
发表于 2014-9-22 09:47:34 | 显示全部楼层 |阅读模式
1.基本概念
     在当前主流的Web架构中,Cache担任着越来越重要的作用。常见的基于浏览器的C/S架构,Web Cache更是节约服务器资源的关键。而最近几年由FreeBSD创始人之一Kamp开发的varnish更是一个不可多得的Web Cache Server。严格意义上说,Varnish是一个高性能的反向代理软件,只不过与其出色的缓存功能相比,企业更愿意使用其搭建缓存服务器。同时,由于其工作在Web Server的前端,有一部分企业已经在生产环境中使用其作为旧版本的squid的替代方案,以在相同的服务器成本下提供更好的缓存效果,Varnish更是作为CDN缓存服务器的可选服务之一。

根据官网的介绍,Varnish的主要特性如下:https://www.varnish-cache.org/
        1.缓存位置:可以使用内存也可以使用磁盘。如果要使用磁盘的话推荐SSD做RAID1
        2.日志存储:日志也存储在内存中。存储策略:固定大小,循环使用
        3.支持虚拟内存的使用。
        4.有精确的时间管理机制,即缓存的时间属性控制。
        5.状态引擎架构:在不同的引擎上完成对不同的缓存和代理数据进行处理。可以通过特定的配置语言设计不同的控制语句,以决定数据在不同位置以不同方式缓存。类似于netfilter中的钩子,在特定的地方对经过的报文进行特定规则的处理。
        6.缓存管理:以二叉堆格式管理缓存数据,做到数据的及时清理。

2.简单架构
    Management进程:对子进程进行管理,同时对VCL配置进行编译,并应用到不同的状态引擎。
    Child进程:生成线程池,负责对用户请求进行处理,并通过hash查找返回用户结果。
    wKioL1Qe667iERLeAAERfZzjdp0689.jpg

3.状态引擎
      每一个状态引擎处理结束之后,都会将结果return给varnish,由varnish决定下一个状态引擎。由于每个引擎的下一个处理引擎都是特定的,所以return的值基本上也是确定的,可以通过官方文档获取。各引擎的处理流程图如下:
    wKiom1Qe7A7DjFuNAAFeXnOTfQA147.jpg

1
2
3
4
5
6
7
vcl_recv : 接收用户请求,判断是否是可缓存数据。
    vcl_pipe :不可缓存数据,直接管道后端处理
    vcl_hash :可缓存数据,通过hash机制处理,默认url做key;也可以自定义区分客户端是否支持处理压缩数据而判断区分缓存。
        vcl_hit : 命中         
        vcl_miss :未命中          vcl_fetch : 后端取数据
             vcl_pass :给命中或者未命中的数据提供一个特殊位置以对请求的数据进行特殊处理
vcl_deliver: 1.hit直接deliver; 2.fetch直接deliver




4.内部处理流程
         wKiom1Qe7IbRRHkVAAINQZRar-k711.jpg

5.简单安装
     可以直接去官网下载需要的版本: https://www.varnish-cache.org/installation/redhat
1
2
3
4
5
6
7
8
9
10
11
12
13
14
[iyunv@node30 ~]# wget  https://repo.varnish-cache.org/redhat/varnish-3.0.el6.rpm
[iyunv@node30 ~]# rpm -ivh varnish-3.0.el6.rpm
[iyunv@node30 ~]# cat /etc/yum.repos.d/varnish.repo
    [varnish-3.0]
    name=Varnish 3.0 for Enterprise Linux el6 - $basearch
    baseurl=http://repo.varnish-cache.org/redhat/varnish-3.0/el6/$basearch
    enabled=1
    gpgcheck=0
    #gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-VARNISH
[iyunv@node30 ~]# yum install varnish
    Downloading Packages:
    (1/2): varnish-3.0.5-1.el6.x86_64.rpm                  |   444 kB       00:10   
    (2/2): varnish-libs-3.0.5-1.el6.x86_64.rpm             |   42 kB        00:01   
[iyunv@node30 ~]# service varnish start




6.配置文件
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
#vim /etc/sysconfig/varnish
    NFILES=131072           #最大打开文件数65536*2
    MEMLOCK=82000           #默认日志文件大小,单位kB
    NPROCS="unlimited"      #最大线程数量
    RELOAD_VCL=1            #设置为1可以使用reload代替restart加载vcl
      
    ## Alternative 1 Minimal configuration, no VCL
    #DAEMON_OPTS="-a :6081
    #             -T localhost:6082
    #             -b localhost:8080
    #             -u varnish -g varnish
    #             -s file,/var/lib/varnish/varnish_storage.bin,1G"
      
    ## Alternative 2, Configuration with VCL
    #DAEMON_OPTS="-a :6081
    #             -T localhost:6082
    #             -f /etc/varnish/default.vcl
    #             -u varnish -g varnish
    #             -S /etc/varnish/secret
    #             -s file,/var/lib/varnish/varnish_storage.bin,1G"
      
    ## Alternative 3, Advanced configuration
    VARNISH_VCL_CONF=/etc/varnish/default.vcl   # 定义vcl配置文件
    # VARNISH_LISTEN_ADDRESS=                   # 定义varnish服务监听地址
    VARNISH_LISTEN_PORT=6081                    # 定义varnish服务监听端口
    VARNISH_ADMIN_LISTEN_ADDRESS=127.0.0.1      # 定义允许进行进程管理地址
    VARNISH_ADMIN_LISTEN_PORT=6082              # 定义管理进程监听端口
    VARNISH_SECRET_FILE=/etc/varnish/secret     # 定义密码文件
    VARNISH_MIN_THREADS=50                      # 定义varnish启动时最小线程数
    VARNISH_MAX_THREADS=1000                    # 定义varnish启动时最大线程数
    VARNISH_THREAD_TIMEOUT=120                  # 定义varnish线程响应超时时间
      
    VARNISH_STORAGE_FILE=/var/lib/varnish/varnish_storage.bin  # 定义varnish文件存储地址
    VARNISH_STORAGE_SIZE=1G                     # 定义缓存使用文件大小,单位:k/M/G/T
    # VARNISH_MEMORY_SIZE=64M                   # 定义缓存使用内存大小
     
    VARNISH_STORAGE="file,${VARNISH_STORAGE_FILE},${VARNISH_STORAGE_SIZE}"# 使用文件缓存
    VARNISH_STORAGE="malloc,${VARNISH_MEMORY_FILE}"                       # 使用内存缓存            
    VARNISH_TTL=120                             # 设置后端超时时间
    DAEMON_OPTS="-a  ${VARNISH_LISTEN_ADDRESS}:${VARNISH_LISTEN_PORT}    # 变量调用
            -f ${VARNISH_VCL_CONF}
            -T ${VARNISH_ADMIN_LISTEN_ADDRESS}:${VARNISH_ADMIN_LISTEN_PORT}
            -t ${VARNISH_TTL}
            -w ${VARNISH_MIN_THREADS},${VARNISH_MAX_THREADS},${VARNISH_THREAD_TIMEOUT}
            -u varnish -g varnish
            -S ${VARNISH_SECRET_FILE}
            -s ${VARNISH_STORAGE}"




7.简单设置(反向代理配置)
1
2
3
4
5
vim /etc/varnish/default.vcl
    backend default {
        .host = "192.168.1.10";
        .port = "80";
    }




8.简单管理工具
1
2
3
4
5
6
7
8
# varnishadm -S /etc/varnish/secret -T 127.0.0.1:6082
    varnish> ping
    varnish> vcl.load d1 /etc/varnish/default.vcl
    varnish> vcl.list
    varnish> vcl.use d1
    varnish> vcl.list
    varnish> backend.list
    varnish> storage.list




9.访问测试
发现已经请求到后端httpd服务器上的内容了,今天就介绍到这儿。关于VCL详细的配置说明在下一篇博客中记录。
wKiom1Qe7tzjfBH7AAO9fGLRE_w473.jpg


运维网声明 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-25124-1-1.html 上篇帖子: haproxy的stats管理和负载均衡mysql的实例 下篇帖子: haproxy实现动静分离 工作原理
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

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

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

扫描微信二维码查看详情

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


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


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


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



合作伙伴: 青云cloud

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