varnish

一、varnish简介

Varnish是一款高性能、开源的反向代理服务器和缓存服务器。Varnish使用内存缓 存文件来减少响应时间和网络带宽消耗。挪威最大的在线报纸Verdens Gang使用3台Varnish代替了原来的12台squid,性能比以前更好。由于Varnish可以通过端口进行管理,使用正则语句做到清除指定缓存的功能,这些squid都做不到。但是varnish在高并发的情况下,资源消耗较高,而且varnish服务进程一旦崩溃,重启,内存中的缓存数据将全部丢失
Varnish与一般服务器软件类似,就是一个web缓存代理服务器,分为master(management)进程和child(woker,主要做cache的工作)进程。master进程读入命令,进行一些初始化,然后fork并监控child进程。child进程分配若干线程 进行工作,主要包括一些管理线程和很多woker线程

varnish与squid的区别:

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

二、vcl简介

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

varnish_第1张图片

vcl处理过程:
(1)Receive状态,也就是请求处理的入口状态,根据VCL规则判断该请求应该是Pass或Pipe,或者进入lookup(本地查询)
(2)Lookup状态,进入此状态后,会在hash表中查找数据,若找到,则进入hit状态,否则进入miss状态
(3)pass状态,在此状态下,会进入后端请求,即进入fetch状态
(4)Fetch状态,在fetch状态下,对请求进行后端的获取,发送请求

可以作缓存的内容:数据库,流媒体,页面文件,图片,css/html....

varnish搭建:

主机环境:rhel6.5镜像,selinux和iptables都必须是disabled状态

实验虚拟机:

172.25.45.1     varnish(server1)

172.25.45.2    apache(server2)

172.25.45.3   apache(server3)

三.varnish的安装

1.在server1中

1).安装varnish

在server1中下载varnish的两个rpm包

varnish_第2张图片varnish_第3张图片

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

varnish_第4张图片

安装完成后,在系统的/etc/passwd中生成varnish用户,对varnish的访问控制实质上是对varnish用户的控制实现的

2).更改varnish全局配置

vim /etc/sysconfig/varnish

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

3)更改varnish配置文件

vim /etc/varnish/default.vcl

backend default{                        ##配置一个后端服务器

    .host = "172.25.45.2";          ##更改访问ip为172.25.45.2

    .port = "80";                         

}

4.重新加载服务

/etc/init.d/varnish restart

2.在server2中

1)安装apache软件,开启服务 yum install httpd -y                 /etc/init.d/httpd start

varnish_第5张图片

2)编写默认发布文件index.html:

vim  /var/www/html/index.html

server2

3)重新加载服务

/etc/init.d/httpd reload

3.测试:

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

varnish_第6张图片

四、测试缓存命中情况

1.sever1中:

1)更改配置文件vim /etc/varnish/default.vcl

添加

sub vcl_deliver {               ##查看缓存命中情况

varnish_第7张图片

2).重新加载服务  /etc/init.d/varnish reload

varnish_第8张图片

2.测试:

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

varnish_第9张图片

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

varnish_第10张图片

3.通过varnish手动清除缓存

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

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

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

测试:

1.测试清除所有缓存

物理机中curl -l 172.25.45.1两次,使172.25.45.1缓存到cache中

varnish_第11张图片

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

物理机中curl -l 172.25.45.1 ,发现显示MISS from westos cache

varnish_第12张图片

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

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

varnish_第13张图片

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

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

varnish_第14张图片

注意:此时如果cache中有172.25.45.1的缓存信息,使用curl -I 172.25。45.1访问时会显示HIT from westos cache,这是因为虽然curl -I 172.25.45.1和curl -I 172.25.45.1/index.html访问得到的结果一致,但是缓存到cache中的地址不同,cache缓存的是用户访问的url

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

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

1.server3中:

1)安装apache  yum install httpd -y

     启动服务/etc/init.f/httpd start

varnish_第15张图片

2)制作index.html

vim /var/www/html/index.html

www.linux.org

3)重新加载服务:/etc/init.d/httpd reload

2、在server2中:

1)更改index.html

vim /var/www/html/index.html

www.westos.org

2)重新加载服务:/etc/init.d/httpd reload

3.物理机中:

1)添加本地解析

vim /etc/hosts

172.25.45.1    www.westos.org   www.linux.org    westos.org

4.server1中:

1.更改配置文件

vim /etc/varnish/default.vcl

varnish_第16张图片

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

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

2).重新加载服务

/etc/init.d/varnish reload

varnish_第17张图片

5.测试:

物理机中:

curl www.westos.org

curl westos.org

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

curl www.linux.org

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

varnish_第18张图片

六、定义负载均衡

健康检查: 通过健康检查来确定服务器和应用的健康状况是负载均衡器器一个非常重要的功能。没有负载均衡器,客户端可能会将请求发送到已经停机的服务器上。网络管理员必须手动干预替换这台服务器,或者排除服务器的故障。有时服务器可能没有停机,但是因为某种原因,比如软件的漏洞,服务器上面运行的应用系统已经不能正常工作。比如Web应用可能正常运行,但它返回的页面却是错误的内容。负载均衡器能够检测这些情况并立即将客户请求导向到正常的服务器而不需要管理员的干预。

1.server3中:

1)、更改apache配置文件

vim  /etc/httpd/conf/hrrpd.conf

打开 : NameVirtualHost*:80

添加:

varnish_第19张图片

2).建立/www/index.html

mkdir /www

vim /www/index.html

www.westos.org-server3

3).重新加载服务

/etc/init.d/httpd reload

4).配置本地解析

vim /etc/hosts

172.25.45.3 server3 www.westos.org   www.linux.org

5).测试配置是否有效

curl www.linux.org

curl www.westos.org

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

2、server1中:

1)更改varnish配置

vim /etc/varnish/default.vcl         ##把多个后台聚合为一个组,并检测后端健康状况

varnish_第20张图片

2.重新加载配置 :/etc/init.d/varnish reload

varnish_第21张图片

3.测试:

1)物理机中:

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

2)server1中:

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

3)物理机中:

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

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

测试对比效果

4、server1中:

1)更改varnish配置 : vim /etc/varnish/default.vcl

varnish_第22张图片

2).重新加载配置

/etc/init.d/varnish reload

varnish_第23张图片

5.测试:

物理机中:

curl www.westos.org(4次)

varnish_第24张图片

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

此时如果server2中的httpd服务关闭curl会一直读取server3相应的index.html内容而不会报错,这是因为varnish用于自动的健康检查功能。如果开启serve2中的apache服务,使用curl又能够循环读取到server2和server3相应的index.html内容

server2中:

/etc/init.d/httpd stop

物理机中:

curl www.westos.org

curl www.westos.org

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

server2中:

/etc/init.d/httpd start

物理机中:

curl www.westos.org (4次)

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

varnish_第25张图片

 

七、CDN推送平台

1、server1中:

安装apache服务:yum install httpd -y

varnish_第26张图片

2.安装apache服务配置

vim /etc/httpd/conf/httpd.conf

listen 8080             ##避免与varnish服务端口冲突

3.下载bansys.zip包,解压并安装

varnish_第27张图片

yum install unzip -y           ##6.5中没有unzip命令,需要安装

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

varnish_第28张图片

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

cd /var/www/html/bansys/

mv * ..

varnish_第29张图片

5.安装php服务 ; yum install php -y

varnish_第30张图片

6.开启apache服务:/etc/init.d/httpd start

7.更改php服务配置文件

cd /var/www/html

vim config.php

varnish_第31张图片

注意:bansys有两种工作模式,分别是:telent和http模式

telent模式需要关闭varnish服务管理端口的验证,注释掉/etc/sysconfig/varnish文件中的“-S ${VARNISH_SECRET_FILE}”

这行,重启服务即可

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

8.更改varnish配置文件

vim /etc/varnish/default.vcl   ##添加acl westos 在sub vcl_recv{}中添加   删除return(pass);

varnish_第32张图片

varnish_第33张图片

9.重新加载varnish服务

/etc/init.d/varnish reload

varnish_第34张图片

10.测试:

物理机中:

用firefox访问www.westos.org

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

varnish_第35张图片

varnish_第36张图片

推送模式:HTTP

CDN群组;www.westos.org

推送内容:/index.html      ###是一个文件

                     /images/*         ##是一个目录

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

varnish_第37张图片

 

你可能感兴趣的:(varnish)