一.Varnish的简要介绍
Varnish是一款高性能的开源HTTP加速器,具有反向代理,缓存的功能,主要用来作为反向代理中的缓存服务器。
Varnish使用内存缓存文件来减少响应时间和网络带宽消耗。
二.Varnish作为缓存服务器与Squid对比如下:
- Varnish与Squid都是一个反向代理服务器,都可用作高性能的代理缓存服务器,并且都是开源软件。
- Varnish稳定性很高,两者在完成相同负荷的工作时,Squid服务器发生故障的几率要高于Varnish,因为Squid需要经常重启。
- Varnish访问速度更快,Varnish采用了“Visual Page Cache”技术,所有缓存数据都直接从内存读取,而Squid是从硬盘读取缓存数据,因此Varnish在访问速度方面会更快。
- Varnish支持更多的并发连接,因为Varnish的TCP连接释放要比Squid快,所以在高并发连接情况下可以支持更多的TCP连接。
- Varnish可以通过管理端口,使用正则表达式批量清除部分缓存,而Squid做不到
- Varnish进程一旦挂起、崩溃或者重启,缓存数据都会从内存中完全释放,此时所有请求都会被发送到后端服务器,在高并发情况下,这会给后端服务器造成很大压力
- Varnish配置相比Squid简单,监控接口丰富,性能好,但Squid资料多,功能丰富,支持对ACL的访问控制
VCL处理流程图:
三.Varnish的工作流程:
处理过程大致分为如下几个步骤:
(1)Receive 状态,也就是请求处理的入口状态,根据 VCL 规则判断该请求应该是 Pass 或
Pipe,或者进入 Lookup(本地查询)。
(2)Lookup 状态,进入此状态后,会在 hash 表中查找数据,若找到,则进入 Hit 状态,否则进
入 miss 状态。
(3)Pass 状态,在此状态下,会进入后端请求,即进入 fetch 状态。
(4)Fetch 状态,在 Fetch 状态下,对请求进行后端的获取,发送请求,获得数据,并进行本地
的存储。
(5)Deliver 状态, 将获取到的数据发送给客户端,然后完成本次请求。
四.Varnish 搭建过程:
实验环境:必须保证selinux为disabled状态,iptables为关闭状态。
实验主机:server1 172.25.254.1 varnish
server2 172.25.254.2 apache
server3 172.25.254.3 apache
实验具体操作:
1.配置后端服务器
(1)在确保server1上有以下两个rpm包的情况下,使用yum源安装之后,开启varnish。
server1:yum install varnish-3.0.5-1.el6.x86_64.rpm varnish-libs-3.0.5-1.el6.x86_64.rpm
server1:/etc/init.d/varnish start
(2)改变varnish的监听端口
server1: vim /etc/sysconfig/varnish #编辑varnish的配置文件
server1:/etc/init.d/varnish reload #重新加载服务
(3)在server2上安装apache软件,并开启服务,编辑默认发布页面
server2: yum install httpd -y
/etc/init.d/httpd start
vim /var/www/html/index.html #编辑默认发布页面
(4)修改server1上varnish的配置文件
[root@server1 ~]#
cd /etc/varnish/
[root@server1 varnish]#ls
default.vcl secret
[root@server1 varnish]#vim default.vcl
[root@server1 varnish]#
/etc/init.d/varnish reload #重新加载服务
(5)设置本地解析,在物理机的浏览器上进行访问测试。
测试结果:
2.配置后端服务器,并查看缓存命中情况
[root@server1 ~]#
cd /etc/varnish/
[root@server1 varnish]#vim default.vcl
/etc/init.d/varnish reload # 重新加载
缓存命中情况测试(物理机):
3.手动清除varnish缓存
通过 varnishadm 手动清除缓存
varnishadm ban.url .*$ #清除所有
varnishadm ban.url /index.html #清除 index.html 页面缓存
varnishadm ban.url /admin/$ #清除 admin 目录缓存
[root@server1 varnish]#
varnishadm ban.url /index.html #清除index.html页面缓存
4.定义多个不同域名站点的后端服务器
(1)
[root@server3 ~]# yum install httpd -y
#在server3上下载httpd服务
[root@server3 ~]# /etc/init.d/httpd start#开启httpd服务
Starting httpd: httpd: Could not reliably determine the server’s fully qualified domain name, using 172.25.254.53 for ServerName [ OK ]
[root@server3 ~]# cd /var/www/html/
[root@server3 html]# vim index.html#编辑默认发布页面
(2)修改server1的varnish配置文件
[root@server1 varnish]#
vim default.vcl
[root@server1 varnish]#
/etc/init.d/varnish reload
(3)在物理机上添加本地解析
[root@foundation49 ~]#
vim /etc/hosts
(4)测试
5.定义负载均衡
(1)编辑server3的默认发布页面
[root@server3 html]#
mkdir /www1
[root@server3 html]#cd /www1/
[root@server3 www1]#vim index.html
(2)编辑httpd的主配置文件
root@server3 www1]#
vim /etc/httpd/conf/httpd.conf
[root@server3 www1]#
/etc/init.d/httpd restart
Stopping httpd: [ OK ]
Starting httpd: httpd: Could not reliably determine the server’s fully qualified domain name, using 172.25.254.53 for ServerName
[ OK ]
(3)修改server2的配置文件,并重新编辑server2的默认发布页面,以便于与server3进行区分。
[root@server1 varnish]#
vim default.vcl
[root@server1 varnish]#
/etc/init.d/varnish reload
(4)在物理机进行测试
6.创建缓存递送平台,定点清除后端数据
(1)在server2和server3上打开httpd服务(为了便于后续curl访问看到实验效果)
[root@server2 ~]#
/etc/init.d/httpd start
Starting httpd:
[root@server3 ~]#/etc/init.d/httpd start
(2)在server1上下载bansys.zip(需要解压)
[root@server1 ~]#
yum install -y uzip
[root@server1 ~]#uzip bansys.zip -d /var/www/html/
#将其解压到指定路径
安装httpd服务,修改配置文件,并开启此服务。
[root@server1 ~]#
yum install httpd -y
[root@server1 ~]#vim /etc/httpd/conf/httpd.conf
修改配置文件如下:
[root@server1 ~]#
/etc/init.d/httpd restart
安装php,编辑发布内容的格式
[root@server1 ~]#
yum install php -y
[root@server1 html]#
cd bansys/
[root@server1 bansys]#ls
class_socket.php config.php index.php purge_action.php static
[root@server1 bansys]#mv * /var/www/html/
[root@server1 bansys]#cd ..
[root@server1 html]#ls
bansys class_socket.php config.php index.php purge_action.php static
[root@server1 html]#vim config.php
编辑如下内容:
[root@server1 html]#
/etc/init.d/httpd restart
[root@server1 ~]#cd /etc/varnish/
[root@server1 varnish]#vim default.vcl #修改配置文件
[root@server1 ~]#
/etc/init.d/varnish reload
物理机访问测试:在物理机的浏览器中输入www.westos.org:8080 即可进入到以下页面
后端缓存数据清理完成!