varnish 缓存服务器

局部性:

空间局部

时间局部

http1.1时代

过期时间+条件式

条件式请求:客户端发请求时给缓存服务器,先查本地缓存是否命中,命中以后后端服务器可能发生变化,所以每次缓存服务器拿到客户端的请求时先去后端服务器去询问一遍,请问我现在缓存有你先前提供的内容,它发生改变了吗,

如果发生改变,就用200响应,告诉缓存服务器数据发生改变,并把新内容发给缓存服务器,缓存服务器再缓存下来新的内容。

如果没有发生改变,会回应304,未修改,于是缓存服务器就可以回应客户端了

缓存服务器发起条件式验证,如果数据没有发生改变服务器就用304回应,如果数据发生改变就用200回应,并更新新的数据到缓存服务器

if-modified-since 根据时间判定,

过期时间:客户端发了GAT或HAT请求,如果是查缓存,如果没命中,到原始服务器查数据,然后原始服务器告诉请求者,这个数据可缓存多久,几乎每一个后端服务器在响应时都会加上一个expires过期时间,告诉请求者这个数据可以缓存多久。客户端访问缓存服务器,只要数据没有过期。就可以从缓存服务器直接响应客户端

过期时间+条件式:客户端请求缓存系统,缓存系统先找原始服务器,假如这个数据可缓存,缓存服务器先把数据缓存下来,而响应时它明确告诉缓存服务器,这个数据有有效期,所以开始倒计时,当客户端访问同一内容时只要还是有效期内就从缓存服务器直接响应。

当数据的有效期过期以后,缓存服务器也不会抛弃数据,而是会条件式访问原始服务器,数据有没有改变,如果没有改变,那更新缓存服务器数据的有效期。如果改变了数据,缓存服务器更新数据

私有缓存:只要明确说明不能缓存的都能缓存

公共缓存:只有明能确缓存的才能缓存,要明确定义不能缓存客户的私有数据

http协议1.1引用的首部Cache-control ,用来控制缓存系统如何缓存数据的,告诉缓存系统那些能缓存那些不能缓存,或者客户端请求的时候,告诉缓存系统那些缓存能响应我,那些缓存不能响应我

请求报文:请求报文发出Cache-control ,告诉 缓存服务器,你缓存中有这个缓存,你也不能 响应我必须搞原始服务器去

响应报文:响应报文发出Cache-control ,告诉 缓存服务器,这个内容能不能缓存,以及能缓存多长时间,存下来以后该如何响应客户端

缓存系统中常用的首部,如何控制HTTP缓存

响应报文用于通知缓存服务器如何存储上级服务器响应的内容:

public: 能被公共缓存的就能被私有缓存,所有的缓存系统都可以被缓存

private: 仅能被私有缓存所缓存

no-cache: 告诉缓存服务器能缓存,但是不能直接直接响应客户端,下次响应客户端之前先要条件式验证,必须要重新验证

no-store: 不能缓存

no-transform:不能转换格式,客户端请求时,服务器端响应的是一个可缓存对象,但是很多服务器都配置了缓存内容是可压缩类型,它会压缩响应,客户端明明请求的是一个明文的文本编码数据,而服务器响应的是gzip压缩的结果,缓存服务器不能缓存,因为客户端请求的是明文的,而服务器响应的压缩的

mist-revalidate:必须重新验证,缓存服务器能缓存下来,客户端每次访问都要重新验证

max-age:所有缓存系统最大缓存时长

expires:绝对时间,这个缓存只能缓存到哪一年,那一月,那一天,几点几分几秒,

但是可能时区不同

cache-control:用相对时间缓存,意思是你能缓存多少秒 ,不在受时区的影响

s-maxage:公共缓存最大缓存时长

请求报文用于通知缓存服务如何使用缓存响应请求:

no-cache:不能用缓存服务器中的缓存响应我,要先验证

no-store:不能用缓存服务器中的缓存响应我,必须到原始服务器去获取内容

CDN:内容分发系统

varnish 缓存服务器:页面缓存,而且是代理式缓存,所以它首先是代理服务器,varnish面向前端也就是客户端提供服务。

我们构建自己的站点结构,有网关也就是接入层反代至varnish,同时varnish在反代,静态或动态的服务器上

yum install varnish -y

varnishadm 命令行工具

注意:不到万不得已不要重启varnish,只要重启varnish缓存项都会失效,所有缓存项都是临时的,固定的在生产环境中不支持

varnish 监听两个套接字也就是端口

面向客户端的是:6081

面向管理的接口是:6082

配置文件

vim /etc/varnish/varnish.params

启动服务

systemctl start varnish

clip_image002

varnish的简单配置

192.168.63.136 缓存服务器地址

192.168.63.135 HTTP服务器地址

192.168.63.137 客户端

vim /etc/varnish/default.vcl

backend default {

.host = "192.168.63.135"; #被代理的服务器地址

.port = "80"; #被代理的服务器地址端口

}

clip_image004

生效default.vcl

varnish_reload_vcl

clip_image006

在192.168.63.135后端服务器安装httpd服务器

浏览器测试

http://192.168.63.136:6081/

这样在有限的时间都是由缓存服务器提供服务

在客户端进行长时间测试

while true; do curl http://192.168.63.136:6081; sleep 2;done

在后端服务器查看日志,发现只有少量访问日志,其他的访问都别缓存服务器所代理

tail /var/log/httpd/access_log

定义vcl

ACL的语法格式

1.vcl files start with vcl 4.0;定义vcl的版本

2. //和# 都是单行注释

/* foo */ 多行注释

3.要用sub关键字自定义tines子历程

4.不支持循环,受限于引擎的内建变量

5.结束一个语句

6.Domain-specific:每个引擎要单独配置

vcl就是有限状态机叫FSM

有限状态机

1.请求和请求主机是无状态的无关联的

2.每一个请求处理时,都要和其他状态隔离

3.就算你有状态,这个状态是内部的状态机,但是彼此间有隔离

4.return 决定下一跳是哪里

引擎:当客户端发起请求,代理服务器拦截下来用引擎去分析能不能识别,识别以后能不能使用缓存,如果不能通过一个接口发送给后端服务器,后端服务器在发送个缓存服务器上的一个引擎,再由引擎响应客户端

子历程 vcl_recv:就是用在引擎上的特定代码段,而每一个子历程都要用sub定义

vcl的状态引擎

varnish刚启动时有一个叫vcl_init只执行一次

每一个用户请求都可以被vcl_recv所接收到,接收到以后判断vcl是否能出来

既不是GET也不是HEAD转到下一跳vcl_pass

如果能识别转到下一跳vcl_hash

如果无法识别转到下一跳vcl_pipe管道,做四层代理

vcl_hash

如果命中转到vcl_hit

如果没有命中vcl_miss

其他处理直接送到vcl_pass 不检查缓存

vcl_backend_fetch 面向后端

vcl_backend_response 正常响应

vcl_backend_error 通过 error自身合成一些错误响应报文

vcl_synth 合成一个响应报文,可能是错误报文,也可能是用户自定义按照某种格式定义的报文

vcl_purge 用来自行管理缓存,所谓的缓存管理是,清理缓存时可能用到

vcl_deliver 投递,意思就是给客户端发送响应报文

进入管理接口,交互式模式

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

-S 指明双方预共享的加密文件

-T 指明连接的服务器地址和端口

clip_image008

help 显示内建的命令

clip_image010

status 当前服务的状态

clip_image012

vcl.load 手动加载并编译

vcl.use 手动切换并调用

vcl.discard 删除

vcl.list 列出

vcl.show 查看当前的vcl或者指定的vcl配置文件

varnish> vcl.list

200

available 0 boot #启动时加载的版本

active 3 reload_2018-07-15T15:32:29 #一个是varnish_reload_vcl生效命令生成的

vcl.show reload_2018-07-15T15:32:29 vcl.show 加reload的文件就能看配置

加-v 显示默认vcl规则

vcl.show -v reload_2018-07-15T15:32:29

vcl的编程语言

格式

if (条件表达式可以用 && 与 ||) {

代码分枝

}

Client Side:面向客户端

vcl_recv, vcl_pass, vcl_hit, vcl_miss, vcl_pipe, vcl_purge, vcl_synth, vcl_deliver

Backend Side:面向后端

vcl_backend_fetch, vcl_backend_response, vcl_backend_error

两个特殊的引擎:

vcl_init:在处理任何请求之前要执行的vcl代码:主要用于初始化VMODs;

vcl_fini:所有的请求都已经结束,在vcl配置被丢弃时调用;主要用于清理VMODs;

sub vcl_recv {

if (req.method == "PRI") { #如果req.method等于PRI执行 return。如果不等于PRI,则执行后续的代码

/* We do not support SPDY or HTTP/2.0 */

return (synth(405)); #如果执行return,后续的代码都不执行,

}

举例:obj.hits是内建变量,用于保存某缓存项的从缓存中命中的次数;

注:resp是响应报文,req请求报文

注: resp.http.X-Cache 的意思的http的响应报文当中的X-Cache

注: set 设定变量

注:HIT via 经由谁命中的

注:“”引号里面的是字符串直接引用

注:+ 字符串连接

注:server.ip 请求响应的varnish的ip

如果命中了就在响应报文的头部加X-Cache,告诉是哪个varnish命中的

如果没有命中,我这次没有帮到你,抱歉

if (obj.hits>0) { #如果命中次数大于0

set resp.http.X-Cache = "HIT via" + " " + server.ip; http协议的响应报文是没有X-Cache,用set添加一个响应报文头部,其值"HIT via" +空格 varnish的ip

} else {

set resp.http.X-Cache = "MISS from " + server.ip;

}

操作符

= 代表变量赋值操作

== 代表等于

!= 代表不等于

~ 代表模式匹配,表示右侧模式,左侧是字串,左侧的字串能否被右侧的模式匹配

>

>=

<

<&#61;

逻辑操作符

&& 与

|| 或

&#xff01; 非

编辑配置文件&#xff0c;

vim /etc/varnish/default.vcl

clip_image014

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

手动加载&#xff0c;vcl编译好以后编辑一个名字&#xff0c;好方便调用

vcl.load conf1 default.vcl

clip_image016

查看

vcl.list

available 0 boot

active 0 reload_2018-07-15T15:32:29 #active代表正在使用

available 0 conf1 #available代表可用

clip_image018

调用conf1

vcl.use conf1

200

VCL &#39;conf1&#39; now active

clip_image020

丢弃

vcl.discard reload_2018-07-15T15:32:29

200

clip_image022

varnish 的常用变量

varnishyes代理服务器

req.* 由客户端发起的请求报文

req.request 表示请求报文的请求方法

resp.* 响应报文

bereq .*代表varnish向后端服务器发起的请求报文

bereq.request 表示请求报文的请求方法

bereq.http.HEADERS

bereq.url, req.url&#xff1a;请求的url&#xff1b;

bereq.proto&#xff1a;请求的协议版本&#xff1b;

bereq.backend&#xff1a;指明要调用的后端主机&#xff1b;

beresp.* 代表varnish接收后端服务器的响应报文

面向客户端的一侧

客户端向varnish服务器发起req.http.HEADER_NAME http的引用请求报文的首部

varnish回应客户端 resp.http.HEADER_NAME http的响应报文的首部

面向服务器端的一侧

varnish向后端的服务器发起bereq.http. 请求报文

varnish也可以接收后端服务器的beresp.http.响应报文

obj.* 开头的变量&#xff0c;就是缓存服务器自己本地缓存的缓存对象的属性

拒绝客户端的curl访问

vim /etc/varnish/default.vcl

sub vcl_recv {

if (req.http.User-Agent ~ "curl") {

return(synth(403));

}

# Happens before we check if we have this in cache already.

#

# Typically you clean up the request here, removing COOKIEs you don&#39;t need,

# rewriting the request, etc.

}

clip_image024

在varnishadm工具中加载vcl文件

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

加载vcl 配置文件default.vcl&#xff0c;并起一个名字conf2

vcl.load conf2 default.vcl

调用conf2

vcl.use conf2

在客户端测试

curl http://192.168.63.136:6081

clip_image026

拒绝所有人访问admin开头的url

vim /etc/varnish/default.vcl

sub vcl_recv {

if (req.http.User-Agent ~ "curl") {

return(synth(403));

}

if (req.url ~ "^/admin") { #如果客户端访问admin开头的url

return(synth(403)); #就拒绝访问&#xff0c;并返回403

}

# Happens before we check if we have this in cache already.

#

# Typically you clean up the request here, removing COOKIEs you don&#39;t need,

# rewriting the request, etc.

}

在varnishadm工具中加载vcl文件

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

加载vcl 配置文件default.vcl&#xff0c;并起一个名字conf4

vcl.load conf4 default.vcl

200

VCL compiled.

clip_image028

调用conf4

vcl.use conf4

200

VCL &#39;conf4&#39; now active

clip_image030

在客户端测试

访问admin

wget -O - -q http://192.168.63.136:6081/admin

clip_image032

访问主页

wget -O - -q http://192.168.63.136:6081/

clip_image034

vcl常用变量

beresp.* resp.*

beresp.http.HEADERS

beresp.status, resp.status&#xff1a;响应的状态码&#xff1b;

reresp.proto, resp.proto&#xff1a;协议版本&#xff1b;

beresp.backend.name&#xff1a;BE主机的主机名&#xff1b;

beresp.ttl&#xff1a;BE主机响应的内容的余下的可缓存时长&#xff1b;

obj.*

obj.hits&#xff1a;此对象从缓存中命中的次数&#xff1b;

obj.ttl&#xff1a;对象的ttl值 #可缓存对象&#xff0c;缓存下来的有效时长是多少

实验&#xff1a;不检查缓存

sub vcl_recv {

if (req.http.User-Agent ~ "curl") { 如果客户端的请求报文头部User-Agent 包含curl

return(pass); #不检查缓存

}

if (req.url ~ "^/admin") { #如果客户端访问admin开头的url

return(pass); #就不检查缓存

}

# Happens before we check if we have this in cache already.

#

# Typically you clean up the request here, removing COOKIEs you don&#39;t need,

# rewriting the request, etc.

}

在varnishadm工具中加载vcl文件

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

加载vcl

vcl.load conf5 default.vcl

200

VCL compiled.

调用vcl

vcl.use conf5

200

VCL &#39;conf5&#39; now active

客户端测试

curl http://192.168.63.136:6081

后端服务器

示例2&#xff1a;对于特定类型的资源&#xff0c;例如公开的图片等&#xff0c;取消其私有标识&#xff0c;并强行设定其可以由varnish缓存的时长&#xff1b; 定义在vcl_backend_response中&#xff1b;

注&#xff1a;beresp后端服务器的响应报文

注&#xff1a;cache-control值

注&#xff1a; s-maxage缓存时长

注&#xff1a;(?i) 模式内容不区分大小写

注&#xff1a;unset 删除

默认发则&#xff1a;带有COOKIE不查缓存

if (beresp.http.cache-control !~ "s-maxage") { #如果后端服务器的响应报文的值无法匹配s-maxage标志

if (bereq.url ~ "(?i)\.(jpg|jpeg|png|gif|css|js)$") { #如果请求报文的内容是静态结尾的内容

unset beresp.http.Set-COOKIE; #删除后端服务器的的响应报文的Set-COOKIE头部

set beresp.ttl &#61; 3600s; #设置后端服务器的响应报文可缓存的剩余时间为3600秒

}

}

示例3&#xff1a;定义在vcl_recv中&#xff1b;

if (req.restarts &#61;&#61; 0) { #如果客户端的请求是新的

if (req.http.X-Fowarded-For) { 如果客户端的请求报文有Fowarded-Fo有i值&#xff0c;就在值的后面加一个逗号还有客户端ip

set req.http.X-Forwarded-For &#61; req.http.X-Forwarded-For &#43; "," &#43; client.ip;

} else { #如果客户端的请求报文有Fowarded-For没有值&#xff0c;就显示客户端的ip

set req.http.X-Forwarded-For &#61; client.ip;

}

}

实验

添加向后端添加报文首部

vim /etc/varnish/default.vcl

sub vcl_recv {

if (req.restarts &#61;&#61; 0) {

if (req.restarts &#61;&#61; 0) { #如果客户端的请求是新的

if (req.http.X-Fowarded-For) { 如果客户端的请求报文有Fowarded-Fo有i值&#xff0c;就在值的后面加一个逗号还有客户端ip

set req.http.X-Forwarded-For &#61; req.http.X-Forwarded-For &#43; "," &#43; client.ip;

} else { #如果客户端的请求报文有Fowarded-For没有值&#xff0c;就显示客户端的ip

set req.http.X-Forwarded-For &#61; client.ip;

}

# Happens before we check if we have this in cache already.

#

# Typically you clean up the request here, removing COOKIEs you don&#39;t need,

# rewriting the request, etc.

}

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

加载vcl

vcl.load conf1 default.vcl

200

VCL compiled.

调用vcl

vcl.use conf1

200

VCL &#39;conf1&#39; now active

后端服务器

vim /etc/httpd/conf/httpd.conf

clip_image036

ogFormat "%{X-Forwarded-For}i %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined

启动服务

systemctl restart httpd

客户端测试

wget -O - -q http://192.168.63.136:6081/admin

在后端服务器查看日志

tail /var/log/httpd/access_log

可以看见客户端的注释ip

192.168.63.138 - - [16/Jul/2018:14:17:25 &#43;0800] "GET /admin/ HTTP/1.1" 200 11 "-" "Wget/1.14 (linux-gnu)"

#####################################################################

清理缓存的方法

purge &#xff0c;ban

sub vcl_recv {

if (req.menthod &#61;&#61; "PURGE") { #如果客户端请求报文等于PURGE

return(purge); #就调用purge

}

# Happens before we check if we have this in cache already.

#

# Typically you clean up the request here, removing COOKIEs you don&#39;t need,

# rewriting the request, etc.

}

sub vcl_purge {

return(synth(200,"Purged.")); #如果调用purge就显示200的代码

}

在varnishadm工具加载配置

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

加载vcl

vcl.load conf3 default.vcl

200

VCL compiled.

调用vcl

vcl.use conf3

200

VCL &#39;conf3&#39; now active

在客户端清除缓存

curl -X PURGE 192.168.63.136:6081/index.html

clip_image038

测试

curl -I 192.168.63.136:6081/index.html

clip_image040

注&#xff1a;这样非常的危险&#xff0c;应用所有的客户端都能清除缓存&#xff0c;我们要指定特定的客户端或者&#xff0c;只有本机才能清除缓存

访问控制acl

vim /etc/varnish/default.vcl

acl purgers { #purges的范围是127.0.0.0 子网掩码是8

"127.0.0.0"/8;

}

sub vcl_recv {

if (req.method &#61;&#61; "PURGE") { #如果客户端的请求报文等于PURGE

if (client.ip ~ purgers) { #如果客户端的ip是purgers的范围

return(purge); #就转到purge

} else { #否则&#xff0c;报403 显示Purge not allowed for加客户端ip

return(synth(403,"Purge not allowed for " &#43; client.ip));

}

}

# Happens before we check if we have this in cache already.

#

# Typically you clean up the request here, removing COOKIEs you don&#39;t need,

# rewriting the request, etc.

}

sub vcl_purge {

return(synth(200,"Purged."));

}

在varnishadm工具加载配置

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

加载vcl

vcl.load conf4 default.vcl

200

VCL compiled.

调用vcl

vcl.use conf4

200

VCL &#39;conf4&#39; now active

在客户端测试

curl -X PURGE 192.168.63.136:6081/index.html

显示403

clip_image042

在varnish本机执行清除缓存操作

curl -X PURGE 127.0.0.1:6081

HTTP/1.1 200 OK

clip_image044

*********************************************************************************************

Banning 禁止&#xff0c;栅栏

将特定的客户端禁止访问缓存服务器

注&#xff1a;(?i) 不区分大小写

注&#xff1a;ban.list 查看

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

设置ban 客户端请求报文url是Javascripts开头的都不访问缓存

ban req.url ~ (?i)^/Javascripts

200

后端服务器

在网站目录下创建Javascripts

mkdir /var/www/html/Javascripts

for i in {1..10}; do echo "test $i" > /var/www/html/Javascripts/test$i.txt; done

varnish缓存服务器

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

设置ban 客户端请求报文url是Javascripts开头的都不访问缓存

ban req.url ~ (?i)^/Javascripts

200

客户端测试

for i in {1..10}; do curl -I -s 192.168.63.136:6081/Javascripts/test$i.txt | grep X-Varnish ;done

clip_image046

###########################################################################3

设定多个后端主机

调度的3种方法

directors.robin

directors.hash

directors.random

简单的动静分离

backend default { #backend设定一个后端主机名字是default

.host &#61; "172.16.100.6";

.port &#61; "80";

}

backend appsrv { #backend设定一个后端主机名字是appsrv

.host &#61; "172.16.100.7";

.port &#61; "80";

}

sub vcl_recv {

if (req.url ~ "(?i)\.php$") { #如果是php结尾的

set req.backend_hint &#61; appsrv; #就把请求报文发送到appsrv的后端服务器

} else { #否则

set req.backend_hint &#61; default; #就把请求发送到default后端服务器

}

...

}

分组

负载均衡

vim /etc/varnish/default.vcl

import directors; 支持负载均衡

定义后端服务器

backend srv1 {

.host &#61; "192.168.63.135";

.port &#61; "80";

}

backend srv2 {

.host &#61; "192.168.63.134";

.port &#61; "80";

}

创建组&#xff0c;后端服务器加入组

sub vcl_init {

new websrvs &#61; directors.round_robin(); #定义组名websrvs

websrvs.add_backend(srv1); #将srv1后端服务器加入websrvs组

websrvs.add_backend(srv2); #将srv2后端服务器加入websrvs组

}

sub vcl_recv {

set req.backend_hint &#61; websrvs.backend(); #调用组

# Happens before we check if we have this in cache already.

#

# Typically you clean up the request here, removing COOKIEs you don&#39;t need,

# rewriting the request, etc.

}

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

加载vcl

vcl.load conf5 default.vcl

200

VCL compiled.

调用vcl

vcl.use conf5

200

VCL &#39;conf5&#39; now active

客户端测试

for i in {1..10}; do curl 192.168.63.136:6081/Javascripts/test$i.txt ;done

clip_image048

***********************************************************************

注 &#xff1a;random 随机调度&#xff0c;支持权重&#xff0c;但是不精确

varnish缓存服务器

vim /etc/varnish/default.vcl

sub vcl_init {

new websrvs &#61; directors.random(); #定义组名websrvs

websrvs.add_backend(srv1,1); #将srv1后端服务器加入websrvs组&#xff0c;权重是1

websrvs.add_backend(srv2,2); #将srv2后端服务器加入websrvs组,权重是2

}

客户端测试

for i in {1..10}; do curl 192.168.63.136:6081/Javascripts/test$i.txt ;done

#################################################################

对后端服务器进行健康检测

varnish缓存服务器

vim /etc/varnish/default.vcl

probe http { #主机定义名字http

.url &#61; "/index.html"; #对谁请求

.interval &#61; 2s; #多长时间检测一次

.timeout &#61; 2s; #超时时间为2秒

.window &#61; 10; #对最近的多少次检测

.threshold &#61; 7; #期望至少多少次是成功的

}

在后端设置后端服务器的ip的地方调用http

backend srv1 {

.host &#61; "192.168.63.135";

.port &#61; "80";

.probe &#61; http;

}

backend srv2 {

.host &#61; "192.168.63.134";

.port &#61; "80";

.probe &#61; http;

}

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

加载vcl

vcl.load conf7 default.vcl

200

VCL compiled.

调用vcl

vcl.use conf7

200

VCL &#39;conf7&#39; now active

客户端测试

for i in {1..10}; do curl 192.168.63.136:6081/Javascripts/test$i.txt ;done

如果有一天后端服务器down机&#xff0c;那么其他就会将客户端的请求报文发往没有down机的主机

注&#xff1a;在后端服务器的varnishadm查看所有的后端主机

backend.list

#####################################################################

手动设定BE主机的状态

管理设置

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

backend.list 查看后端服务器

sick 设定为 down

backend.set_health srv1 sick #人为的设置srv1为不可用

clip_image050

healthy&#xff1a;管理up

backend.set_health srv1 healthy

auto 根据porbe自动设置是丿还是down

backend.set_health srv1 auto

clip_image052

########################################################################

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

支持运行时修改的参数

param.show -l

每个线程池&#xff0c;最大的线程数

thread_pool_max

Value is: 5000 [threads] (default)

Default is: 5000

Minimum is: 100

最大线程空闲数

thread_pool_min

Value is: 100 [threads] (default)

Default is: 100

Maximum is: 5000

varnish一个进程可以多个请求

varnish的进程数一个是你CPU的个数&#xff0c;或者低于CPU的个数

vim /etc/varnish/varnish.params

DAEMON_OPTS&#61;"-p thread_pools&#61;2 -p thread_pool_min&#61;2 -p thread_pool_max&#61;500 -p thread_pool_timeout&#61;300"

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

设置为2个进程

param.set thread_pools 2

200

查看

param.show thread_pools

200

##################################################################333333

varnish日志区域

varnish的日志统计数据

varnishstat

查看所有指标

varnishstat -1

动态查看指标 例如MAIN

varnishstat -f MAIN

查看静态

varnishstat -f MAIN -1

查看MAIN和VBE

varnishstat -f MAIN -f VBE

实时显示内存中所有数据的访问

varnishtop

只显示某一特定 例如&#xff1a;ReqHeader

varnishtop -i ReqHeader

查看日志信息

varnishlog

详细日志信息

varnishncsa

实时的读取日志保存到特定的文件

systemctl start varnishncsa