varnish的工作原理、配置、负载均衡及定点清除

######1、varnish的工作过程
这里写图片描述
处理过程大致分为如下几个步骤:
(1)Receive状态,也就是请求处理的入口状态,根据VCL规则判断该请求应该是Pass或 Pipe,或者进入Lookup(本地查询)。
(2)Lookup状态,进入此状态后,会在hash表中查找数据,若找到,则进入Hit状态,否则进 入miss状态。
(3)Pass状态,在此状态下,会进入后端请求,即进入fetch状态。 (4)Fetch状态,在Fetch状态下,对请求进行后端的获取,发送请求,获得数据,并进行本地 的存储。
(5)Deliver 状态, 将获取到的数据发送给客户端,然后完成本次请求。
######2、varnish的配置
实验主机:

  • 172.25.29.1 server1 varnish
  • 172.25.29.2 server2 apache
    -172.25.29.3 server3 apache
    #########server1:
[root@server1 ~]# ls
varnish-3.0.5-1.el6.x86_64.rpm  varnish-libs-3.0.5-1.el6.x86_64.rpm
[root@server1 ~]# yum install * -y //安装		
[root@server1 ~]# cd /etc/varnish 
[root@server1 varnish]# /etc/init.d/varnish start		#开启varnish服务
[root@server1 varnish]# vim /etc/sysconfig/varnish 
 8 NFILES=131072
12 MEMLOCK=82000
15 NPROCS="unlimited"
66 VARNISH_LISTEN_PORT=80	#修改端口为80,为了时方便
82 ARNISH_THREAD_TIMEOUT=120 #表示缓存的期限的120s

[root@server1 varnish]# /etc/init.d/varnish restart	
[root@server1 varnish]# netstat -antlp|grep varnish
tcp        0      0 0.0.0.0:80                  0.0.0.0:*                   LISTEN      1559/varnishd       
tcp        0      0 127.0.0.1:6082              0.0.0.0:*                   LISTEN      1558/varnishd       
tcp        0      0 :::80                       :::*                        LISTEN      1559/varnishd 
[root@server1 ~]# sysctl -a|grep file	//内核对最大文件数的限制
[root@server1 ~]# ulimit -a	//显示当前的各种用户进程限制
[root@server1 varnish]# vim /etc/security/limits.conf 
#添加系统环境设置,对varnish用户进行限制
varnish         -       nofile          131072
varnish         -       memlock   	    82000
varnish         -       nproc          unlimited
[root@server1 varnish]# vim default.vcl 
backend default {
  .host = "172.25.29.2";	#修改为实际后台服务器的ip
  .port = "80";
}
[root@server1 varnish]# /etc/init.d/varnish reload	#重新加载

#########server2:

[root@server2 html]# /etc/init.d/httpd start
[root@server2 ~]# cd /var/www/html/
[root@server2 html]# ls
[root@server2 html]# vim  index.html	#编写httpd默认的发布页
www.westos.org

#########浏览器测试:
可以看到httpd的默认发布页内容
这里写图片描述
######3、手动清除varnish缓存
#########主机:

[root@foundation29 Desktop]# vim /etc/hosts	#本地解析
172.25.29.1 www.westos.org

#########server1:

[root@server1 varnish]# varnishadm ban.url /index.html	
#清除index.html页面

#########主机测试:

[root@foundation29 images]# curl www.westos.org/index.html -I
Age: 0

#########server1:

[root@server1 varnish]# varnishadm ban.url .*$		#清除所有

#########主机测试:

[root@foundation29 images]# curl www.westos.org -I
Age: 0
[root@foundation29 images]# curl 172.25.29.1 -I
Age: 0

######4、定义多个不同站点的后端服务器
#########server3:

[root@server3 ~]# yum install httpd -y
[root@server3 ~]# /etc/init.d/httpd start
[root@server3 ~]# cd /var/www/html/
[root@server3 html]# vim index.html			#编写httpd默认的发布页
bbs.westos.org

#########server1:

[root@server1 varnish]# vim default.vcl 
backend web1 {
  .host = "172.25.29.2";
  .port = "80";
}
backend web2 {
  .host = "172.25.29.3";
  .port = "80";
}
sub vcl_recv {
if (req.http.host ~ "^(www.)?westos.org") {  
//^(www)?表示是否加www都缓存一条,减小缓存空间的使用
set req.http.host = "www.westos.org";
set req.backend = web1;
} elsif (req.http.host ~ "^bbs.westos.org") {
set req.backend = web2;
} else {error 404 "westos cache";
}
}
[root@server1 varnish]# /etc/init.d/varnish reload

#########主机:

[root@foundation29 images]# vim /etc/hosts
172.25.29.1 www.westos.org       bbs.westos.org         westos.org
[root@foundation29 images]# curl www.westos.org -I
[root@foundation29 images]# curl westos.org -I
[root@foundation29 images]# curl bbs.westos.org -I
[root@foundation29 images]# curl 172.25.29.1 -I		//404报错
HTTP/1.1 404 westos cache

当访问 www.westos.orgwestos.org)域名时从 web1 上取数据,访问 bbs.westos.org 域名时到 web2 取数据,访问其他页面报错
######5、负载均衡
#########server3:

[root@server3 www1]# vim /etc/httpd/conf/httpd.conf 
 990 NameVirtualHost *:80			#开启80端口
1010 <VirtualHost *:80>
1011     DocumentRoot /var/www/html
1012     ServerName bbs.westos.org
1013 </VirtualHost>
1014 
1015 <VirtualHost *:80>
1016     DocumentRoot /www1
1017     ServerName www.westos.org
1018 </VirtualHost>
[root@server3 html]# mkdir /www1
[root@server3 html]# cd /www1
[root@server3 www1]# vim index.html
www.westos.org - server3
[root@server3 www1]# /etc/init.d/httpd restart

#########server2:

[root@server2 html]# vim  index.html
www.westos.org - server2

#########server1:

[root@server1 varnish]# vim default.vcl
director westos round-robin {	//westos负载均衡器,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 = westos;	//访问(www).westos.org域名时,查看westos负载均衡器
#return(pass);
} elsif (req.http.host ~ "^bbs.westos.org") {
set req.backend = web2;
} else {error 404 "westos cache";
}
}
[root@server1 varnish]# /etc/init.d/varnish reload

(1)加上return(pass)时,表示不进行缓存,方便测试,测试结果如下:


[root@foundation29 ~]# curl www.westos.org 
www.westos.org - server2
[root@foundation29 ~]# curl www.westos.org 
www.westos.org - server3
[root@foundation29 ~]# curl www.westos.org 
www.westos.org - server2
[root@foundation29 ~]# curl www.westos.org 
www.westos.org - server3
[root@foundation29 ~]# curl www.westos.org -I
Age: 0		#不进行缓存,每次刷新都是0

(2)不加return(pass)时,进行缓存,主机测试:

[root@foundation29 ~]# curl www.westos.org/index.html 	
www.westos.org - server2			//此时读取的缓存是server2的
[root@foundation29 ~]# curl www.westos.org/index.html -I
Age: 118			//Age会增加
[root@foundation29 ~]# curl www.westos.org/index.html
www.westos.org - server3	#Age到120s时,开始读取server3的缓存

#server1清理缓存,主机测试也会server2和server3轮询

[root@server1 varnish]# varnishadm ban.url /index.html	
[root@foundation29 images]# curl www.westos.org/index.html
www.westos.org - server3
[root@server1 varnish]# varnishadm ban.url /index.html
[root@foundation29 images]# curl www.westos.org/index.html
www.westos.org - server2

######6、定点清除
当后端服务器数据更改,而varnish缓存还未过期时,客户端访问时将不能访问到最新数据,为了解决这个问题,可以对变更的数据进行定点清除。
#########Server1:

[root@server1 ~]# ls
bansys.zip 
[root@server1 ~]# yum install php unzip httpd -y
[root@server1 ~]# vim /etc/httpd/conf/httpd.conf 
 136 Listen 8080				//修改端口,防止和varnish服务端口冲突
[root@server1 ~]# /etc/init.d/httpd start
[root@server1 ~]# cd /var/www/html
[root@server1 html]# netstat -antlp
tcp        0      0 :::8080                     :::*                        LISTEN      1244/httpd  
[root@server1 html]# ls
bansys  class_socket.php  config.php  index.php  purge_action.php  static
[root@server1 html]# vim config.php 
<?php

 //varnish主机列表
 //可定义多个主机列表
 $var_group1 = array(
                        'host' => array('172.25.29.1'),	 //varnish主机ip
                                                'port' => '80',   #varnish端口         
                    );

 //varnish群组定义
 //对主机列表进行绑定
 $VAR_CLUSTER = array(
                         'www.westos.org' => $var_group1,		
                     );

 //varnish版本
 //2.x和3.x推送命令不一样
 $VAR_VERSION = "3";

?>

[root@server1 html]# cd /etc/varnish/
[root@server1 varnish]# vim default.vcl 
acl westos {
"127.0.0.1";		//本机,回环接口
"172.25.29.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";
}

[root@server1 varnish]# /etc/init.d/varnish reload

#########浏览器:
这里写图片描述
注意:这里的推送模式是http

#########主机测试:
[root@foundation29 ~]# curl www.westos.org/index.html
www.westos.org - server3

#########推送成功后:
[root@foundation29 ~]# curl www.westos.org/index.html
www.westos.org - server2 //数据更新

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值