varnish4杂记

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了varnish4杂记相关的知识,希望对你有一定的参考价值。

varnish4基础应用

varnish4使用

1、安装varnish4

[[email protected] ~]# yum install -y varnish

1.1 内存回收模块

Name        : jemalloc
Arch        : x86_64
Version     : 3.6.0
Release     : 1.el7
Size        : 317 k
Repo        : installed
From repo   : ali-epel
Summary     : General-purpose scalable concurrent malloc implementation
URL         : http://www.canonware.com/jemalloc/
License     : BSD
Description : General-purpose scalable concurrent malloc(3) implementation.
            : This distribution is the stand-alone "portable" implementation of
            : jemalloc.

[[email protected] ~]# 

1.2 查看服务启动文件

[[email protected] ~]# cat /usr/lib/systemd/system/varnish.service

2、修改服务器启动配置选项

[[email protected] ~]# vim /etc/varnish/varnish.params 

#VARNISH_STORAGE="malloc,256M"
VARNISH_STORAGE="malloc,256M"       #修改缓存方式

3、配置另一台web服务器(节点2)

[[email protected] ~]# yum -y install httpd

配置测试页:
[[email protected] ~]# for i in {1..10}; do echo "Page $i on Web1" > /var/www/html/test$i.html;done
[[email protected] ~]# ls /var/www/html/
test10.html  test2.html  test4.html  test6.html  test8.html
test1.html   test3.html  test5.html  test7.html  test9.html
[[email protected] ~]# 

启动服务:
[[email protected] ~]# systemctl start httpd

设置开机启动:
[[email protected] ~]# systemctl enable httpd
Created symlink from /etc/systemd/system/multi-user.target.wants/httpd.service to /usr/lib/systemd/system/httpd.service.
[[email protected] ~]# 
[[email protected] ~]# systemctl is-enabled httpd
enabled
[[email protected] ~]# 

4、配置varnish的acl后端主机文件

# Default backend definition. Set this to point to your content server.
backend default {
    .host = "10.201.106.132";       跳转到web2
    .port = "80";
}

开启varnish服务:
[[email protected] ~]# systemctl start varnish.service

varnish:6081,6082
[[email protected] ~]# ss -tnl
State       Recv-Q Send-Q                                      Local Address:Port                                                     Peer Address:Port              
LISTEN      0      50                                                      *:3306                                                                *:*                  
LISTEN      0      128                                                     *:22                                                                  *:*                  
LISTEN      0      100                                             127.0.0.1:25                                                                  *:*                  
LISTEN      0      128                                                     *:6081                                                                *:*                  
LISTEN      0      10                                              127.0.0.1:6082                                                                *:*                  
LISTEN      0      128                                                    :::22                                                                 :::*                  
LISTEN      0      100                                                   ::1:25                                                                 :::*                  
LISTEN      0      128                                                    :::6081                                                               :::*                  
[[email protected] ~]# 

访问测试:
http://10.201.106.131:6081/test9.html
正常

5、varnishadm

5.1 查看缓存命中结果

连进去:
[[email protected] ~]# varnishadm -S /etc/varnish/secret -T 127.0.0.1:6082 
200        
-----------------------------
Varnish Cache CLI 1.0
-----------------------------
Linux,3.10.0-327.el7.x86_64,x86_64,-smalloc,-smalloc,-hcritbit
varnish-4.0.4 revision 386f712

Type ‘help‘ for command list.
Type ‘quit‘ to close CLI session.

ping
200        
PONG 1484619827 1.0
status
200        
Child in state running
vcl.list
200        
active          0 boot

vcl.load test default.vcl
200        
VCL compiled.
vcl.list
200        
active          0 boot
available       0 test

vcl.use test
200        
VCL ‘test‘ now active
vcl.use t
varnish> vcl .list
101        
Unknown request.
Type ‘help‘ for more info.

vcl.list
200        
active          0 boot
available       0 test

vcl.discard test
200        

vcl.list
200        
active          0 boot

5.2 查看当前参数值

Type ‘help‘ for more info.

param.show

设置参数值:
param.set thread_pools 4

显示单个参数:
param.show thread_pools
200        
thread_pools
        Value is: 4 [pools]
        Default is: 2
        Minimum is: 1

查看进程上次挂掉原因
panic.show
300        
Child has not panicked or panic has been cleared

显示正在使用的存储:
varnish> storage.list
200        
Storage devices:
    storage.Transient = malloc
    storage.s0 = malloc

显示配置文件编译前的样子:
vcl.show boot

查看后端服务器列表:
varnish> backend.list
200        
Backend name                   Refs   Admin      Probe
default(10.201.106.132,,80)    1      probe      Healthy (no probe)

列出定义的ban规则,(缓存对象清除规则)
varnish> ban.list
200        
Present bans:
1484618521.742461     0 C  

6、显示varnish日志

[[email protected] ~]# varnishlog 

7、另一种日志格式

[[email protected] ~]# varnishncsa 
10.201.106.1 - - [17/Jan/2017:21:19:42 +0800] "GET http://10.201.106.131:6081/test1.html HTTP/1.1" 304 0 "-" "Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/51.0.2704.106 Safari/537.36"

8、查看状态和排序

[[email protected] ~]# varnishstat 

[[email protected] ~]# varnishtop

配置vcl

1、备份vcl,配置备份的vcl

[[email protected] ~]# cd /etc/varnish/
[[email protected] varnish]# cp default.vcl test.vcl
[[email protected] varnish]# vim test.vcl 

2、编辑配置文件

[[email protected] varnish]# vim test.vcl 

sub vcl_recv {
    # Happens before we check if we have this in cache already.
    #
    # Typically you clean up the request here, removing cookies you don‘t need,
    # rewriting the request, etc.
    if (req.method == "PRI") {
        /* We do not support SPDY or HTTP/2.0 */
        return (synth(405));
    }
    if (req.method != "GET" &&
        req.method != "HEAD" &&
        req.method != "PUT" &&
        req.method != "POST" &&
        req.method != "TRACE" &&
        req.method != "OPTIONS" &&
        req.method != "DELETE") {
            /* Non-RFC2616 or CONNECT which is weird. */
            return (pipe);
    }

    if (req.method != "GET" && req.method != "HEAD") {
        /* We only deal with GET and HEAD by default */
        return (pass);
    }
    if (req.http.Authorization || req.http.Cookie) {
        /* Not cacheable by default */
        return (pass);
    }
    return (hash);
}

3、vcl装载新配置文件

连入vcl:
[[email protected] varnish]# varnishadm -S /etc/varnish/secret -T 127.0.0.1:6082

装载配置文件:
vcl.load test1 test.vcl
200        
VCL compiled.

查看:
vcl.list
200        
active          0 boot
available       0 test1

使用test1,使其生效:
vcl.use test1
200        
VCL ‘test1‘ now active

查看test1配置:
vcl.show test1
200        
#
# This is an example VCL file for Varnish.
#
# It does not do anything by default, delegating control to the
# builtin VCL. The builtin VCL is called when there is no explicit
# return statement.
#
# See the VCL chapters in the Users Guide at https://www.varnish-cache.org/docs/
# and http://varnish-cache.org/trac/wiki/VCLExamples for more examples.

# Marker to tell the VCL compiler that this VCL has been adapted to the
# new 4.0 format.
vcl 4.0;

# Default backend definition. Set this to point to your content server.
backend default {
    .host = "10.201.106.132";
    .port = "80";
}

sub vcl_recv {
    # Happens before we check if we have this in cache already.
    #
    # Typically you clean up the request here, removing cookies you don‘t need,
    # rewriting the request, etc.
    if (req.method == "PRI") {
    /* We do not support SPDY or HTTP/2.0 */
    return (synth(405));
    }
    if (req.method != "GET" &&
    req.method != "HEAD" &&
    req.method != "PUT" &&
    req.method != "POST" &&
    req.method != "TRACE" &&
    req.method != "OPTIONS" &&
    req.method != "DELETE") {
        /* Non-RFC2616 or CONNECT which is weird. */
        return (pipe);
    }

    if (req.method != "GET" && req.method != "HEAD") {
    /* We only deal with GET and HEAD by default */
    return (pass);
    }
    if (req.http.Authorization || req.http.Cookie) {
    /* Not cacheable by default */
    return (pass);
    }
    return (hash);
}

sub vcl_backend_response {
    # Happens after we have read the response headers from the backend.
    #
    # Here you clean the response headers, removing silly Set-Cookie headers
    # and other mistakes your backend does.
}

sub vcl_deliver {
    # Happens when we have all the pieces we need, and are about to send the
    # response to the client.
    #
    # You can do accounting or modifying the final object here.
}

4、deliver测试

4.1 自定义命中响应内容

sub vcl_deliver {
    # Happens when we have all the pieces we need, and are about to send the
    # response to the client.
    #
    # You can do accounting or modifying the final object here.
    if (obj.hits>0) {
        set resp.http.X-Cache = "HIT";
    } else {
        set resp.http.X-Cache = "MISS";
    }
}

4.2 重新载入激活配置文件

载入文件
vcl.load test2 test.vcl
200        
VCL compiled.

查看配置文件列表
vcl.list
200        
available       0 boot
active          0 test1
available       0 test2

激活使用配置文件
vcl.use test2
200        
VCL ‘test2‘ now active

4.3 测试

curl测试:
[[email protected] ~]# curl http://10.201.106.131:6081/test3.html
Page 3 on Web1

curl只响应首部:
[[email protected] ~]# curl -I http://10.201.106.131:6081/test3.html
HTTP/1.1 200 OK
Date: Tue, 17 Jan 2017 20:05:02 GMT
Server: Apache/2.4.6 (CentOS)
Last-Modified: Mon, 16 Jan 2017 21:28:25 GMT
ETag: "f-5463cdd1ee54f"
Content-Length: 15
Content-Type: text/html; charset=UTF-8
X-Varnish: 131079 131075
Age: 38
Via: 1.1 varnish-v4
X-Cache: HIT                            #已命中
Connection: keep-alive

[[email protected] ~]# 

4.4 第一次请求网页MISS,第二次就HIT了

[[email protected] ~]# curl -I http://10.201.106.131:6081/test4.html
HTTP/1.1 200 OK
Date: Tue, 17 Jan 2017 20:06:33 GMT
Server: Apache/2.4.6 (CentOS)
Last-Modified: Mon, 16 Jan 2017 21:28:25 GMT
ETag: "f-5463cdd1ee54f"
Content-Length: 15
Content-Type: text/html; charset=UTF-8
X-Varnish: 23
Age: 0
Via: 1.1 varnish-v4
X-Cache: MISS               ###
Connection: keep-alive

[[email protected] ~]# curl -I http://10.201.106.131:6081/test4.html
HTTP/1.1 200 OK
Date: Tue, 17 Jan 2017 20:06:33 GMT
Server: Apache/2.4.6 (CentOS)
Last-Modified: Mon, 16 Jan 2017 21:28:25 GMT
ETag: "f-5463cdd1ee54f"
Content-Length: 15
Content-Type: text/html; charset=UTF-8
X-Varnish: 131081 24
Age: 6
Via: 1.1 varnish-v4
X-Cache: HIT                    ###
Connection: keep-alive

[[email protected] ~]# 

5、添加server.ip

5.1 修改配置

sub vcl_deliver {
    # Happens when we have all the pieces we need, and are about to send the
    # response to the client.
    #
    # You can do accounting or modifying the final object here.
    if (obj.hits>0) {
        set resp.http.X-Cache = "HIT from " + server.ip;
    } else {
        set resp.http.X-Cache = "MISS " + server.ip;
    }
}

5.2 装载激活配置文件

vcl.load test3 test.vcl
200        
VCL compiled.
vcl.use test3
200        
VCL ‘test3‘ now active

5.3 测试

[email protected] ~]# curl -I http://10.201.106.131:6081/test1.html
HTTP/1.1 200 OK
Date: Tue, 17 Jan 2017 20:41:33 GMT
Server: Apache/2.4.6 (CentOS)
Last-Modified: Mon, 16 Jan 2017 21:28:25 GMT
ETag: "f-5463cdd1ee54f"
Content-Length: 15
Content-Type: text/html; charset=UTF-8
X-Varnish: 26
Age: 0
Via: 1.1 varnish-v4
X-Cache: MISS 10.201.106.131            ###
Connection: keep-alive

[[email protected] ~]# curl -I http://10.201.106.131:6081/test1.html
HTTP/1.1 200 OK
Date: Tue, 17 Jan 2017 20:41:33 GMT
Server: Apache/2.4.6 (CentOS)
Last-Modified: Mon, 16 Jan 2017 21:28:25 GMT
ETag: "f-5463cdd1ee54f"
Content-Length: 15
Content-Type: text/html; charset=UTF-8
X-Varnish: 163844 27
Age: 24
Via: 1.1 varnish-v4
X-Cache: HIT from 10.201.106.131            ###
Connection: keep-alive

[[email protected] ~]# 

以上是关于varnish4杂记的主要内容,如果未能解决你的问题,请参考以下文章

varnish4.1.10安装

varnish4.0 流程图

Varnish4.0缓存代理配置

varnish4.0缓存代理配置

36 web系统架构及cache基础varnish4基础应用varnish状态引擎详解及vcl

Varnish4.1.2配合FastDFS构建内存缓存