站长资讯网
最全最丰富的资讯网站

Linux中的varnish服务解析

一、varinish简介

Varnish是一款高性能的开源HTTP加速器,他的作者Poul-Henning Kamp是FreeBSD的内核开发者之一。挪威最大的在线报纸 Verdens Gang 使用3台Varnish代替了原来的12台Squid,性能比以前更好。

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

Management进程主要实现应用新的配置、编译VCL、监控varnish、初始化varnish以及提供一个命令行接口等。 Management进程会每隔几秒钟探测一下Child进程以判断其是否正常运行,如果在指定的时长内未得到Child进程的回 应,Management将会重启此Child进程。

Child进程包含多种类型的线程,常见的如:
Acceptor线程:接收新的连接请求并响应;
Worker线程:child进程会为每个会话启动一个worker线程,因此,在高并发的场景中可能会出现数百个worker线程甚至更多;
Expiry线程:从缓存中清理过期内容;

Varnish依赖“工作区(workspace)”以降低线程在申请或修改内存时出现竞争的可能性。在varnish内部有多种不同的工作区,其中最关键的当属用于管理会话数据的session工作区。

二、VCL简介

Varnish Configuration Language (VCL)是varnish配置缓存策略的工具,它是一种基于“域”(domain specific)的简单编程语言,它支持有限的算术运算和逻辑运算操作、允许使用正则表达式进行字符串匹配、允许用户使用set自定义变量、支持if判 断语句,也有内置的函数和变量等。使用VCL编写的缓存策略通常保存至.vcl文件中,其需要编译成二进制的格式后才能由varnish调用。

Linux中的varnish服务解析

VCL处理过程大致分为如下几个步骤:

(1)Receive 状态,也就是请求处理的入口状态,根据 VCL 规则判断该请求应该是 Pass 或
Pipe,或者进入 Lookup(本地查询)。
(2)Lookup 状态,进入此状态后,会在 hash 表中查找数据,若找到,则进入 Hit 状态,否则进
入 miss 状态。
(3)Pass 状态,在此状态下,会进入后端请求,即进入 fetch 状态。
(4)Fetch 状态,在 Fetch 状态下,对请求进行后端的获取,发送请求,获得数据,并进行本地
的存储。
(5)Deliver 状态, 将获取到的数据发送给客户端,然后完成本次请求。

三、varnish的安装

1、server1中:

1.安装varnish

yum install varnish-3.0.5-1.el6.x86_64.rpm varnish-libs-3.0.5-1.el6.x86_64.rpm -y

Linux中的varnish服务解析

2.更改varnish全局配置

vim /etc/sysconfig/varnish

VARNISH_LISTEN_PORT=80 #更改varnish服务端口为80

Linux中的varnish服务解析

Linux中的varnish服务解析

3.更改varnish配置文件

vim /etc/varnish/default.vcl

backend default { #配置一个后端服务器
.host = "172.25.4.2"; #更改访问IP为172.25.4.2
.port = "80";
}

Linux中的varnish服务解析

Linux中的varnish服务解析

4.重新加载服务

/etc/init.d/varnish reload

Linux中的varnish服务解析

2、server2中:

1.安装apache

yum install httpd -y

Linux中的varnish服务解析

/etc/init.d/httpd start

Linux中的varnish服务解析

2.制作index.html

cd /var/www/html

vim index.html

server2

Linux中的varnish服务解析

Linux中的varnish服务解析

3.重新加载服务

/etc/init.d/httpd reload

Linux中的varnish服务解析

3、测试:

物理机中打开firefox,访问172.25.4.1,看到server2即配置成功

Linux中的varnish服务解析

四、测试缓存命中情况

1、server1中:

1.更改配置文件

vim /etc/varnish/default.vcl

添加
sub vcl_deliver { #查看缓存命中情况
if (obj.hits > 0) {
set resp.http.X-Cache = "HIT from westos cache";
}
else {
set resp.http.X-Cache = "MISS from westos cache";
}
return (deliver);
}

Linux中的varnish服务解析

Linux中的varnish服务解析

2.重新加载服务

/etc/init.d/varnish reload

Linux中的varnish服务解析

2、测试:

物理机中:

curl -I 172.25.4.1 第一次显示 MISS from westos cache 缓存中没有,前往后端获取

Linux中的varnish服务解析

curl -I 172.25.4.1 第二次显示 HIT from westos cache 缓存中直接获取

Linux中的varnish服务解析

3、通过 varnishadm 手动清除缓存

varnishadm ban.url .*$ #清除所有缓存

varnishadm ban.url /index.html #清除 index.html 页面缓存

varnishadm ban.url /admin/$ #清除 admin 目录缓存

测试:

1.测试清除所有缓存

物理机中curl -I 172.25.4.1两次,使172.25.4.1缓存到cache中

Linux中的varnish服务解析

server1中执行 varnishadm ban.url .*$ 清除所有缓存

Linux中的varnish服务解析

物理机中curl -I 172.25.4.1 ,发现显示MISS from westos cache

Linux中的varnish服务解析

2.测试清除 index.html 页面缓存

物理机中curl -I 172.25.4.1/index.html两次,使172.25.4.1/index.html缓存到cache中

Linux中的varnish服务解析

server1中执行 varnishadm ban.url /index.html 清除 index.html 页面缓存

Linux中的varnish服务解析

物理机中curl -I 172.25.4.1/index.html 发现显示MISS from westos cache

Linux中的varnish服务解析

注意:

此时如果cache中有172.25.4.1的缓存信息,使用curl -I 172.25.4.1访问时会显示HIT from westos cache,这是因为虽然curl -I 172.25.4.1

和curl -I 172.25.4.1/index.html访问得到的结果一致,但是缓存到cache中的地址不同。cache缓存的是用户访问的url

拓展:

curl -I 172.25.4.1访问的结果中Age表示缓存时间,默认为120s后自动清除,可在/etc/sysconfig/varnish中修改

五、定义多个不同域名站点的后端服务器

1、server3中:

1.安装acpache

yum install httpd -y

Linux中的varnish服务解析

/etc/init.d/httpd start

Linux中的varnish服务解析

2.制作index.html

cd /var/www/html

vim index.html

www.linux.org

Linux中的varnish服务解析

Linux中的varnish服务解析

3.重新加载服务

/etc/init.d/httpd reload

Linux中的varnish服务解析

2、server2中:

1.更改index.html

cd /var/www/html

vim index.html

www.westos.org

Linux中的varnish服务解析

Linux中的varnish服务解析

2.重新加载服务

/etc/init.d/httpd reload

Linux中的varnish服务解析

3、物理机中:

1.添加本地解析

vim /etc/hosts

172.25.4.1 www.westos.org www.linux.org westos.org

Linux中的varnish服务解析

Linux中的varnish服务解析

4、server1中:

1.更改配置文件

vim /etc/varnish/default.vcl

backend web1 {
.host = "172.25.4.2";
.port = "80";
}

backend web2 {
.host = "172.25.4.3";
.port = "80";
}

#当访问 westos.org 域名时,自动访问 www.westos.org 域名

#当访问 www.westos.org 域名时从 web1 上取数据,访问 www.linux.org 域名时到 web2 取数据,访问其他页面报错

sub vcl_recv {
if (req.http.host ~ "^(www.)westos.org") {
set req.http.host = "www.westos.org";
set req.backend = web1;
} elsif (req.http.host ~ "^www.linux.org") {
set req.backend = web2;
} else {error 404 "westos cache";
}
}

Linux中的varnish服务解析

Linux中的varnish服务解析

2.重新加载服务

/etc/init.d/varnish reload

Linux中的varnish服务解析

5、测试:

物理机中:

curl www.westos.org

curl westos.org

发现两者得到的结果相同,均为server2中相应的index.html文件内容

curl www.linux.org

得到server3中相应的index.html文件内容

Linux中的varnish服务解析

六、定义负载均衡

1、server3中:

1.更改apache配置文件

vim /etc/httpd/conf/httpd.conf

打开

NameVirtualHost *:80

添加

DocumentRoot /var/www/html
ServerName www.linux.org


DocumentRoot /www1
ServerName www.westos.org

Linux中的varnish服务解析

Linux中的varnish服务解析

Linux中的varnish服务解析

2.建立/www1/index.html

mkdir /www1

vim /www1/index.html

www.westos.org-server3

Linux中的varnish服务解析

Linux中的varnish服务解析

3.重新加载服务

/etc/init.d/httpd reload

Linux中的varnish服务解析

4.配置本地解析

vim /etc/hosts

172.25.4.3 server3 www.westos.org www.linux.org

Linux中的varnish服务解析

Linux中的varnish服务解析

5.测试配置是否生效

curl www.linux.org

curl www.westos.org

得到相应的index.html文件中的内容

Linux中的varnish服务解析

2、server1中:

1.更改varnish配置

vim /etc/varnish/default.vcl

#把多个后端聚合为一个组,并检测后端健康状况

director lb round-robin {
{ .backend = web1; }
{ .backend = web2; }
}

sub vcl_recv {
if (req.http.host ~ "^(www.)westos.org") {
set req.http.host = "www.westos.org";
set req.backend = lb;
} elsif (req.http.host ~ "^www.linux.org") {
set req.backend = web2;
} else {error 404 "westos cache";
}
}

Linux中的varnish服务解析

Linux中的varnish服务解析

2.重新加载配置

/etc/init.d/varnish reload

Linux中的varnish服务解析

3、测试:

1.物理机中:

curl www.westos.org 得到server2中相应的index.html文件内容

Linux中的varnish服务解析

2.server1中:

varnishadm ban.url .*$ 清除所有缓存

Linux中的varnish服务解析

3.物理机中:

curl www.westos.org 得到server3中相应的index.html文件内容

Linux中的varnish服务解析

注意:

还可以更改server1中varnish配置文件,添加return (pass); 使得varnish缓存功能失效,客户端直接去后端抓取内容,可以获得更好的

测试对比效果

4、server1中:

1.更改varnish配置

vim /etc/varnish/default.vcl

sub vcl_recv {
if (req.http.host ~ "^(www.)westos.org") {
set req.http.host = "www.westos.org";
set req.backend = lb;
return (pass); #varnish缓存功能失效,客户端直接去后端抓取内容
} elsif (req.http.host ~ "^www.linux.org") {
set req.backend = web2;
} else {error 404 "westos cache";
}
}

Linux中的varnish服务解析

Linux中的varnish服务解析

2.重新加载配置

/etc/init.d/varnish reload

Linux中的varnish服务解析

5、测试:

物理机中:

curl www.westos.org

curl www.westos.org

curl www.westos.org

curl www.westos.org

发现循环得到server2和server3相应的index.html内容

Linux中的varnish服务解析

此时若server2的httpd服务关闭curl会一直读取server3相应的index.html内容而不会报错,这是因为varnish拥有自动的健康检查功能,

若开启server2的httpd服务,使用curl又能够循环读取到server2和server3相应的index.html内容

server2中:

/etc/init.d/httpd stop

Linux中的varnish服务解析

物理机中:

curl www.westos.org

curl www.westos.org

发现一直得到server3相应的index.html内容

Linux中的varnish服务解析

server2中:

/etc/init.d/httpd start

Linux中的varnish服务解析

物理机中:

curl www.westos.org

curl www.westos.org

curl www.westos.org

curl www.westos.org

发现循环得到server2和server3相应的index.html内容

Linux中的varnish服务解析

七、varnish全局配置文件中的参数

1、NFILES #所能够打开的最大文件数

server1中:

1.查看内核允许的打开文件数的最大值

sysctl -a | grep file

Linux中的varnish服务解析

2.更改varnish配置文件

vim /etc/sysconfig/varnish

更改NFILES数值,小于内核允许最大值

NFILES=66655

Linux中的varnish服务解析

Linux中的varnish服务解析

3.更改系统限制文件

vim /etc/security/limits.conf

varnish nofile 66656

Linux中的varnish服务解析

Linux中的varnish服务解析

2、MEMLOCK #用多大内存空间保存日志信息

server1中:

1.更改varnish用户为可交互登陆模式,切换到varnish用户

usermod -s /bin/bash varnish

su – varnish

Linux中的varnish服务解析

2.查看系统允许的最大值

ulimit -l

Linux中的varnish服务解析

*拓展:

ulimit -a #查看所有系统限制

Linux中的varnish服务解析

3.更改系统限制文件

logout

vim /etc/security/limits.conf

varnish memlock 82000

Linux中的varnish服务解析

Linux中的varnish服务解析

3、NPROCS #进程核心转储所使用的内存空间,unlimited表示无上限

server1中:

1.切换到varnish用户

su – varnish

Linux中的varnish服务解析

2.查看系统允许的最大值

ulimit -u

Linux中的varnish服务解析

3.更改系统限制文件

logout

vim /etc/security/limits.conf

varnish nproc unlimited

Linux中的varnish服务解析

Linux中的varnish服务解析

4.还原varnish用户登陆设置

usermod -s /sbin/nologin varnish

Linux中的varnish服务解析

注意:/etc/security/limits.conf 与 /etc/sysconfig/varnish 配置文件均是即改即生效

拓展:

VARNISH_TTL=120 #联系后端服务器的超时时间

VARNISH_STORAGE_SIZE=1G #储存的文件的大小

VARNISH_STORAGE_FILE=/var/lib/varnish/varnish_storage.bin #基于文件存储时的文件路径

Linux中的varnish服务解析

varnish与squid的区别

varnish和squid在中小规模的应用上,varnish足够轻量级,足够好用,但是在巨大的并发请求来说,单个varnish所能够承载的并发 访问量大概在5000个连接请求左右,超出5000个可能就就得不稳定了;而在这里squid就能表现出良好的性能了,并且squid拥有邻居功能,因此在大规模的企业级应用中仍然是以squid居多,而在中小规模的自己公司的反向代理缓存中varnish居多

8、CDN推送平台

1、server1:

1.安装apache服务

yum install httpd -y

Linux中的varnish服务解析

2.更改apache服务配置

避免与varnish服务端口冲突

vim /etc/httpd/conf/httpd.conf

Listen 8080

Linux中的varnish服务解析

Linux中的varnish服务解析

3.下载bansys.zip包,安装解压缩命令

yum install unzip -y

unzip bansys.zip -d /var/www/html

Linux中的varnish服务解析

Linux中的varnish服务解析

4.将解压出来的目录中的文件移动至/var/www/html

cd /var/www/html

cd bansys/

mv * ..

Linux中的varnish服务解析

5.安装php服务

yum install php -y

Linux中的varnish服务解析

6.开启apache服务

/etc/init.d/httpd start

Linux中的varnish服务解析

7.更改php服务配置文件

cd /var/www/html

vim config.php

删除其余内容,保留内容如下:

//varnish主机列表
//可定义多个主机列表
$var_group1 = array(
'host' => array('172.25.4.1'),
'port' => '80',
);
//varnish群组定义
//对主机列表进行绑定
$VAR_CLUSTER = array(
'www.westos.org' => $var_group1,
);
//varnish版本
//2.x和3.x推送命令不一样
$VAR_VERSION = "3";

>

Linux中的varnish服务解析

Linux中的varnish服务解析

注意:

bansys 有两种工作模式,分别是:telnet 和 http 模式。

telnet 模式需要关闭 varnish 服务管理端口的验证,注释掉/etc/sysconfig/varnish 文件中的

“ -S ${VARNISH_SECRET_FILE}”这行,重启 varnish 服务即可

如果是 http 模式需要对 varnish 做以下设置(本次试验采用http模式推送)

8.更改varnish配置文件

vim /etc/varnish/default.vcl

#设置访问控制

acl westos {
"127.0.0.1";
"172.25.4.0"/24;
}

在sub vcl_recv {} 中添加

if (req.request == "BAN") {
if (!client.ip ~ westos) {
error 405 "Not allowed.";
}
ban("req.url ~ " + req.url);
error 200 "ban added";
}

删除 return (pass);

Linux中的varnish服务解析

Linux中的varnish服务解析

Linux中的varnish服务解析

9.重新加载varnish服务

/etc/init.d/varnish reload

Linux中的varnish服务解析

2、测试:

物理机中:

用firefox访问www.westos.org

打开另外一个网页,用firefox访问 172.25.4.1:8080

Linux中的varnish服务解析

Linux中的varnish服务解析

推送模式:HTTP

CDN群组:www.westos.org

推送内容:

/index.html #文件

/images/* #目录

本次试验推送文件 /index.html

推送一次,再访问172.25.4.1:8080一次,发现循环读取到server2和server3相应的index.html内容

Linux中的varnish服务解析

Linux中的varnish服务解析

赞(0)
分享到: 更多 (0)
网站地图   沪ICP备18035694号-2    沪公网安备31011702889846号