相识–Varnish

Varnish与一般服务器软件类似,分为master(management)进程和child(worker,主要做cache的工作)进程。master进程读入命令,进行一些初始化,然后fork并监控child进程。child进程分配若干线程进行工作,主要包括一些管理线程和很多woker线程。

VCL ”专有类型的配置语言

VCL有多个状态引擎,状态之间存在相关性,但状态引擎彼此间互相隔离;

每个状态引擎可使用return( )指明关联至哪个下一级引擎;

每个状态引擎对应于vcl文件中的一个配置段。

 

varnish中的内置变量

req.*:request,表示由客户端发来的请求报文相关;
bereq.*:由varnish发往BE主机的httpd请求相关;
beresp.*:由BE主机响应给varnish的响应报文相关;
resp.*:由varnish响应给client相关;
obj.*:存储在缓存空间中的缓存对象的属性;只读;
常用变量:
 bereq.*, req.*:
     bereq.http.HEADERS
     bereq.request:请求方法;
     bereq.url:请求的url;
     bereq.proto:请求的协议版本;
     bereq.backend:指明要调用的后端主机;
     req.http.Cookie:客户端的请求报文中Cookie首部的值;
     req.http.User-Agent ~ “chrome”
 beresp.*, resp.*:
     beresp.http.HEADERS
     beresp.status:响应的状态码;
     reresp.proto:协议版本;
     beresp.backend.name:BE主机的主机名;
     beresp.ttl:BE主机响应的内容的余下的可缓存时长;
 obj.*
     obj.hits:此对象从缓存中命中的次数;
     obj.ttl:对象的ttl值
 server.*
     server.ip
     server.hostname
 client.*
     client.ip

[[  Varnish的基本配置  ]]

1.交互式配置

varnishadm

登录:

# varnishadm -S /etc/varnish/secret -T 127.0.0.1:6082

配置文件相关:

    vcl.list :状态引擎列表;

    vcl.load <configname> <filename>:装载那个文件为配置文件;

    vcl.use <configname>:使用哪个vcl文件

    vcl.discard:删除;

    vcl.show [-v] <configname>:查看指定的配置文件的详细信息,可看默认配置;
    param.show -l:显示运行时参数列表;

    param.show <PARAM>:指定显示哪个参数

    param.set <PARAM> <VALUE>:修改参数

    storage.list:显示存储列表

    backend.list:显示后端服务器列表

2.强制对某类资源的请求不检查缓存

示例:在请求报文中包含以/login|admin 为首的不查缓存,直接送到backend(后端服务器)

sub vcl_recv {

    if (req.url ~ "(?i)^/(login|admin)") {

    return(pass);

    }
}
(?i)---不区分大小写

3.拒绝某种请求访问

sub vcl_recv {

    if (req.http.User-Agent ~ “(?i)^/curl”) {

    return(synth(403));

    }

}

4.对特定类型的资源取消私有的Cookie标识,并设定其可在varnish缓存的时长

if (beresp.http.cache-control !~ “s-maxage”) {

    if (bereq.url ~ "(?i)\.(jpg|jpeg|png|gif)$") {

        unset beresp.http.Set-Cookie;

        set beresp.ttl = 3600s;

    }

}

5.设置后端服务器日志中记录的真实的客户端IP

if (req.restarts == 0) {

    if (req.http.X-Fowarded-For) {

        set req.http.X-Forwarded-For = req.http.X-Forwarded-For + “,” + client.ip;

    } else {

        set req.http.X-Forwarded-For = client.ip;

    }

}

并在后端服务器中设置日志格式:

# vim  /etc/httpd/conf/httpd.conf
     LogFormat  "%{X-Forwarded-For}i"

6.对后端主机进行健康状态检测

.probe:定义健康状态检测方法;

.url:检测时请求的URL,默认为”/”;

.request:发出的具体请求;

.window:基于最近的多少次检查来判断其健康状态;

.threshhold:最近.window中定义的这么次检查中至有.threshhold定义的次数是成功的;

.interval:检测频度;

.timeout:超时时长;

.expected_response:期望的响应码,默认为200;

示例:

backend websrv1 {

    .host = "192.168.1.16";

    .port = "80";

    .probe = {

          .url= "/.test.html";           需要先创建这个测试页面
    }
}

7.varnish的性能优化

thread_pools:最好小于或等于CPU核心数量;

thread_pool_max:每线程池的最大线程数;

thread_pool_min:额外意义为“最大空闲线程数”;

thread_pool_timeout:线程超时时间

thread_pool_add_delay:创建新线程

thread_pool_destroy_delay:杀死空闲线程延迟时间

设置方式:

/etc/varnish/varnish.params (永久有效)

param.set



[[  VCL配置的实例  ]]

1.负载均衡

import directors;        导入模块

backend websrv1 {

    .host = "192.168.1.16";

    .port = "80";

}

backend aebsrv2 {

    .host = "192.168.1.47";

    .port = "80";
}

sub vcl_init {                    定义集群

    new webcluster = directors.round_robin();     调度方法

         webcluster.add_backend(websrv1);

         webcluster.add_backend(websrv2);

}

sub vcl_recv {              

     set req.backend_hint = webcluster.backend();

}

2.varnish动静分离

backend websrv1 {

    .host = "192.168.1.16";

    .port = "80";

}

backend aebsrv2 {

    .host = "192.168.1.47";

    .port = "80";
}

sub vcl_recv {

     if (req.url ~ "(?i)\.(jpg|png|gif)$") {

         set req.backend_hint = websrv1;

     } else {

         set req.backend_hint = websrv2;

    }

}

 

 

掌握 varnishstat、varnishtop

1、varnishstat – Varnish Cache statistics     各种计数器

-f FILED_NAME

-l: 可用于-f选项指定的字段名称列表;

-x: xml输出格式

示例:

varnishstat  -f MAIN.cache_hit -f MAIN.cache_miss

2、varnishtop – Varnish log entry ranking    将日志文件中相关数据排序

-i taglist,可以同时使用多个-i选项,也可以一个选项跟上多个标签;

-I <[taglist:]regex>:仅显示被模式匹配到的条目

-x taglist:排除列表

-X <[taglist:]regex>:仅显示不被模式匹配到的条目

-C:忽略字符大小写

3、varnishlog – Display Varnish logs        查看实时日志

4、varnishncsa – Display Varnish logs in Apache / NCSA combined log format      标准日志格式

原创文章,作者:nene,如若转载,请注明出处:http://www.178linux.com/88357

(0)
nenenene
上一篇 2017-11-13 19:38
下一篇 2017-11-13 20:18

相关推荐

  • 3、常用命令介绍

    http://note.youdao.com/yws/public/redirect/share?id=4840e26ee1d2b2c928b6c26e2ba14661&type=false

    Linux干货 2016-08-08
  • 【Linux基础】计算机及操作系统基础

    【Linux基础】计算机及操作系统基础 计算机的组成及其功能 计算机的组成 简单来说,计算机应由两部分组成:第一部分:硬件 冯诺依曼结构体系 当前计算机主要是基于冯诺依曼体系结构设计的,在该体系中,计算机硬件由5个部件组成。分别是:运算器、控制器、存储器、输入设备和输出设备。而现今运算器和控制器一般集成在一起,叫中央处理器(Central Processin…

    Linux干货 2018-03-04
  • diy自己的linux

    准备一台liunx的机器,我用的是liunx虚拟机 单独加载一块硬盘,我加载了一块20G的硬盘,然后用fdisk /dev/sdb进行分区,sdb1用来作为将来系统的/boot分区,所有100M就可以了,sdb2用来作为将来系统的/分区,我给了10G。然后将两个分区格式化为ext4系统。 mkdir /mnt/boot mkdir /mnt/sdc2 mou…

    Linux干货 2016-09-14
  • Linux磁盘管理(分区,格式化,文件系统、VFS、mount、fstab)

    Linux系统中数据存储在磁盘中,磁盘在冯诺依曼体系中属于输入输出外部存储对象,保存着重要的企业数据,对Linux系统中的磁盘管理尤其需要熟练掌握,由于企业目前使用的主流存储设备还是硬盘,所以这里只叙述硬盘的组织结构; 1.分区:    (1)低级格式化:       硬盘在出厂的时候厂家会做一次分区格式化,…

    Linux干货 2016-09-02
  • IPTABLES

    IPTABLES 软防火墙 防火墙是做什么的: 在生活中顾名思义防火墙即是为了防止火势、火情蔓延而设立的一道屏障,那么这道屏障在设置在那里后就可以保障内外两地将无情火分隔,保证我的内地不受外地的火情影响,从而安全的生活下去;查看下图帮助理解防火墙; 图1-1     图1-1可以看出当数据流量从外网主机访问内网主机时,…

    Linux干货 2017-03-15
  • 第一周-2:Linux部分常用命令使用示例、查看命令行工具使用手册以及LinuxFHS部分目录简介

    一、部分命令使用示例: 1、ifconfg 在命令行界面下或系统配置脚本中用于配置、控制及查询TCP/IP网络接口的系统管理工具 [netartisan@localhost 桌面]$ ifconfig eno16777736: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500 &n…

    Linux干货 2016-11-07