varnish英文手册生词

当客户端请求相同的页面时.varnish只发送一个请求到后端(backend)机器,等后面返回数据信息的时候再copy多份

serve - 服务

plethora - 过多

encounter - 遇到

hopefully - 希望

Guru - 领袖

meditation - 冥想

relevant - 有关

probably - 可能

clue - 线索

ransaction - 交易 Continue reading

varnishncsa(以 NCSA 的格式显示日志)

●varnishncsa(以 NCSA 的格式显示日志)

Author:   Dag-Erling Sm?rgrav

Date: 2010-05-31

Version:  1.0

Manual section: 1

Display varnish logs in apache/NCSA combined log format

SYNOPSIS

varnishncsa [-a] [-b] [-C] [-c] [-D] [-d] [-f] [-I regex] [-i tag]

[-n varnish_name] [-P file] [-r file] [-V] [-w file] [-X regex] [-x tag]

DESCRIPTION

Varnishncsa 工具读取共享内存的日志,然后以 apache/NCSA 的格式显示出来。下 面的选项可以用。

-a 当把日志写到文件里时,使用附加,而不是覆盖。

-b 只显示 varnishd 和后端服务器的日志。 Continue reading

Misbehaving servers(服务器停止运转)

Varnish的一个关键特色就是它有能力防御 web和应用服务器宕机。
Grace mode
当几个客户端请求同一个页面的时候,varnish只发送一个请求到后端服务器,然后让那个其他几个请求挂起等待返回结果,返回结果后,复制请求的结果发送给客户端。
如果您的服务每秒有数千万的点击率,那么这个队列是庞大的,没有用户喜欢等待服务器响应。为了使用过期的 cache 给用户提供服务,我们需要增加他们的 TTL,保存所有cache 中的内容在 TTL过期以后30 分钟内不删除,使用以下VCL: Continue reading

varnish中的Health checks(健康检查)

让我们设置一个 director和两个后端,然后加上健康检查:

backend server1 {
   .host = "server1.example.com";
   .probe = {
          .url = "/";
           .interval = 5s;
          .timeout = 1 s;
          .window = 5;
          .threshold = 3;
     }
   }
backend server2 {
    .host = "server2.example.com";
    .probe = {
          .url = "/";
          .interval = 5s;
          .timeout = 1 s;
          .window = 5;
          .threshold = 3;
    }
  }

这些新的就是探针,varnish将检查通过探针检查每个后端服务器是否健康: Continue reading

varnish中的Directors

您可以把多台 backends 聚合成一个组,这些组被叫做 directors。这样可以增强性能和弹力。您可以定义多个 backends和多个 group在同一个directors。

backend server1 { 
     .host = "192.168.0.10"; 
} 
backend server2{ 
     .host = "192.168.0.10"; 
}

现在我们创建一个 director:

director example_director round-robin { 
{ 
         .backend = server1; 
} 
# server2 
{ 
         .backend = server2; 
} 
# foo 
}

这个 director 是一个循环的 director。它的含义就是 director 使用循环的方式把backends分给请求。
但是如果您的一个服务器宕了?varnish 能否指导所有的请求到健康的后端?当然可以,这就是健康检查在起作用了。

varnish中advanced backend configuration (后端服务高级配置)

在某些时刻您需要 varnish 从多台服务器上缓存数据。您可能想要 varnish 映射所有的URL 到一个单独的主机或者不到这个主机。这里很多选项。
我们需要引进一个 java程序进出php的web站点。假如我们的java程序使用的 URL开始于/JAVA/

我们让它运行在8000端口,现在让我们看看默认的default.vcl:

backend default {
     .host = "127.0.0.1";
     .port = "8080";
}

我们添加一个新的 backend:

backend java {
     .host = "127.0.0.1";
     .port = "8000";
}

现在我们需要告诉特殊的URL 被发送到哪里:

sub vcl_recv {
     if (req.url ~ "^/java/") {
         set req.backend = java;
     } else {
         set req.backend = default.
     }
}

这真的很简单,让我们停下来并思考一下。正如您所见,可以通过任意的后端来选择您要的数据。您想发送移动设备的请求到不同的后端?没问题

if (req.User-agent ~ /mobile/) .... \\这样做应该就可以成功。

 

Achiveving a high hitrate(提高缓存命中率)-varnish篇

现在 varnish 已经正常运行了,您可以通过 varnish 访问到您的 web 应用程序。如果您的 web 程序在设计时候没有考虑到加速器的架构,那么您可能有必要修改您的应用程序或者varnish配置文件,来提高varnish的命中率。
既然这样,您就需要一个工具用来观察您和web服务器之间HTTP头信息。服务器端您可以轻松的使用varnish 的工具,比如varnishlog和 varnishtop,但是客户端的工具需要您自己去准备,下面是我经常使用的工具。
Varnistop
您可以使用varnishtop 确定哪些URL经常命中后端。 Varnishtop –i txurl 就是一个基本的命令。您可以通过阅读“Statistics”了解其他示例。

Varnishlog
当您需要鉴定哪个 URL 被频繁的发送到后端服务器,您可以通过varnishlog对请求做一个全面的分析。 varnishlog –c –o /foo/bar 这个命令将告诉您所有(-o)包含”/football/bar”字段来自客户端(-c)的请求。 Continue reading

varnish中的Statistics(统计 varnish相关数据)-Varnishtop ,Varnishhist ,Varnishsizes ,Varnishstat

现在您的varnish已经正常运行,我们来看一下varnish在做什么,这里有些工具可以帮助您做到。
Varnishtop
Varnishtop工具读取共享内存的日志,然后连续不断的显示和更新大部分普通日志。
适当的过滤使用 –I,-i,-X 和-x 选项,它可以按照您的要求显示请求的内容,客户端,浏览器等其他日志里的信息。

varnishtop -i rxurl \\您可以看到客户端请求的 url次数。
Varnishtop -i txurl \\您可以看到请求后端服务器的url次数。
Varnishtop -i Rxheader –I Accept-Encoding \\可以看见接收到的头信息中有有多少次包含Accept-Encoding。

Varnishhist
Varnishhist工具读取varnishd的共享内存段日志,生成一个连续更新的柱状图,显示最后 N 个请求的处理情况。这个 N 的值是终端的纵坐标的高度,横坐标代表的是对数,如果缓存命中就标记“|”,如果缓存没有命中就标记上“#”符号。

Varnishsizes
Varnishsizes 和varnishhist相似,除了varnishsizes现实了对象的大小,取消了完成请求的时间。这样可以大概的观察您的服务对象有多大。

Varnishstat
Varnish 有很多计数器,我们计数丢失率,命中率,存储信息,创建线程,删除对象等,几乎所有的操作。Varnishstat将存储这些数值,在优化varnish的时候使用这个命令。

有一个程序可以定期轮询 varnishstat 的数据并生成好看的图表。这个项目叫做Munin。 Munin可以在 http://munin-monitoring.org/找到。在varnish的源码中有munin插件。

Varnish Configuration Language - VCL (varnish 配置 语言-VCL)

官方手册:https://www.varnish-cache.org/docs/3.0/tutorial/vcl.html

    Varnish 有一个很棒的配置系统,大部分其他的系统使用配置指令,让您打开或者关闭一些开关。 Varnish使用区域配置语言,这种语言叫做“VCL”(varnish configuration language),在执行vcl时,varnish 就把VCL转换成二进制代码。
    VCL 文件被分为多个子程序,不同的子程序在不同的时间里执行,比如一个子程序在接到请求时执行,另一个子程序在接收到后端服务器传送的文件时执行。
varnish 将在不同阶段执行它的子程序代码,因为它的代码是一行一行执行的,不存在优先级问题。随时可以调用这个子程序中的功能并且当他执行完成后就退出。 Continue reading

PutVarnish on port 80(使varnish工作在 80 端口上)

PutVarnish on port 80(使 varnish工作在 80 端口上)
如果您的程序正常运行,没有问题,我们就可以把varnish调整到80端口运行。先关闭vernish

pkill varnishd

然后停止您的 web服务器,修改web服务器配置,把 web服务器修改成监听8080端口,然后修改varnish 的default.vcl和改变默认的后端服务器端口为8080.
先启动您的web服务器,然后在启动varnish:

varnishd -f /usr/local/etc/varnish/default.vcl -s malloc,1G -T 127.0.0.1:2000

我们取消了-a 选项,这样varnish将监控默认端口,启动后,检查您的 web程序是否正常。

相关教程:

varnish中Varnishlog命令解析:http://blog.haohtml.com/archives/12014

linux下varnish配置及使用教程:http://blog.haohtml.com/archives/11985

Varnish Configuration Language - VCL (varnish 配置 语言-VCL):http://blog.haohtml.com/archives/12024

varnish中的Statistics(统计 varnish相关数据)-Varnishtop ,Varnishhist ,Varnishsizes ,Varnishstat:http://blog.haohtml.com/archives/12036

bankend Server后端服务高级配置:http://blog.haohtml.com/archives/12044

varnish中的backends 组Directors:http://blog.haohtml.com/archives/12049

varnish中常用的排错方法:http://blog.haohtml.com/archives/12055