Varnish

一、概念

1、Varnish 是什么

Varnish是高性能开源的反向代理服务器和HTTP缓存服务器

Varnish的功能与Squid服务器相似,都可以用来做HTTP缓存

Squid是从硬盘读取缓存的数据,而Varnish把数据存放在内存中,直接从读取内存,避免了频繁在内存、磁盘中交换文件,
优点:Varnish要相对更高效,
缺点:内存中的缓存在服务器重启后会丢失

2、Varnish 如何工作
1)初始化过程
Varnish 的master进程负责启动工作,master进程读取配置文件,根据指定的空间大小(例如管理员分配了2G内存)来创建存储空间,创建并管理child进程
child进程来处理后续任务,它会分配一些线程来执行不同的工作,例如
接受http请求
为缓存对象分配存储空间
清除过期缓存对象
释放空间 碎片整理

2)http请求处理过程
有一个专门负责接收http请求的线程,一直监听请求端口,当有请求过来时,负责唤起一个工作线程来处理请求
工作线程会分析http请求的uri,知道了这个请求想要什么,就到缓存中查找是否有这个对象
如果有,就把缓存对象直接返回给用户
如果没有,会把请求转给后端服务器处理,并等待结果,工作线程从后端得到结果内容后,先把内容作为一个缓存对象保存到缓存空间(以备下次请求这个对象时快速响应),然后再把内容返回给用户

3)分配缓存过程

有一个对象需要缓存时,根据这个对象的大小,到空闲缓存区中查找大小最适合的空闲块,找到后就把这个对象放进去
如果这个对象没有填满这个空闲块,就把剩余的空间做为一个新的空闲块
如果空闲缓存区中没地方了,就要先删除一部分缓存来腾出地方,删除是根据最近最少使用原则

4)释放缓存过程
有一个线程来负责缓存的释放工作,他定期检查缓存中所有对象的生存周期,如果某个对象在指定的时间段内没有被访问,就把这个对象删除,释放其占用的缓存空间
释放空间后,检查一下临近的内存空间是否是空闲的,如果是,就整合为一个更大的空闲块,实现空间碎片的整理

二、配置

1、配置varnish

		server1							server2									server3
		varnish代理服务					阿帕奇服务								阿帕奇服务
		172.25.47.1						172.25.47.2								172.25.47.3

1)server1(代理)上

yum install openssh-clients -y

从真机scp varnish包
在这里插入图片描述

cd varnish/
yum install varnish-3.0.5-1.el6.x86_64.rpm varnish-libs-3.0.5-1.el6.x86_64.rpm -y
rpm -qc varnish-3.0.5-1.el6.x86_64			##查看配置文件

在这里插入图片描述

vim /etc/sysconfig/varnish
	8 NFILES=131072			##打开文件最大数
	12 MEMLOCK=82000		##需要内存
	15 NPROCS="unlimited"		##进程数
	 
	66 VARNISH_LISTEN_PORT=80	##改端口为80,因为服务器端口号是80

在这里插入图片描述

vim /etc/varnish/default.vcl
	8   .host = "172.25.47.2";	##修改代理地址
  	9   .port = "80";

在这里插入图片描述

vim /etc/security/limits.conf
	51 varnish         -       nofile          131072	##在最后添加
 	52 varnish         -       memlock         82000
 	53 varnish         -       nproc           unlimited

在这里插入图片描述

/etc/init.d/varnish restart     ##重启,第一次重启可能会出错,再次重启就好了

在这里插入图片描述

netstat -antlp |grep 80		##查看端口是否开启

在这里插入图片描述
2)server2(服务器)上

yum install httpd -y
cd /var/www/html/
vim index.html
	写一个发布页
/etc/init.d/httpd restart


测试: 在真机curl 172.25.47.1,可以通过server1代理到server2

在这里插入图片描述
2、查看是否命中缓存

server1

vim /etc/varnish/default.vcl
	12 sub vcl_deliver {
 	13 if (obj.hits>0){
 	14 set resp.http.X-Cache = "HIT from westos cache";	##命中
	15 }
 	16 else {
	17 set resp.http.X-Cache = "MISS from westos cache";    ##没命中
 	18 }
 	19 return (deliver);
 	20 }


/etc/init.d/varnish reload	##此处用reload刷新,如果restart,缓存就会清掉


vim /etc/sysconfig/varnish
	 82 VARNISH_THREAD_TIMEOUT=120	##缓存保留时间是120s

varnishadm ban.url .*$			##清除缓存。访问路径后面的所有都清空	
varnishadm ban.url /index.html	##清除缓存,清楚访问路径后面的所有都清空

测试:

真机curl -I 172.25.47.1
	MISS	##表示没命中

在这里插入图片描述

再次curl -I 172.25.47.1
    	HIT	##表示命中

在这里插入图片描述
3、定义不同域名的ip,访问到不同的后端主机(是在七层协议中的应用层做的)
server1:

	vim /etc/varnish/default.vcl
	  7 backend web1 {
	  8   .host = "172.25.47.2";
	  9   .port = "80";
	 10 }
	 11 
	 12 backend web2 {
	 13   .host = "172.25.47.3";
	 14   .port = "80";
	 15 }
	 16 
	 17 sub vcl_recv {
	 18         if(req.http.host ~"^(www.)?westos.org"){	  ##访问以www.westos.org或者westos.com 访问到web1
	 19                 set req.http.host = "www.westos.org"; ##访问
	 20                 set req.backend = web1;	  ##访问web1
	 21 }elsif (req.http.host ~"^bbs.westos.org"){
	 22         set req.backend = web2;		          ##访问到web2
	 23 }else {
	 24         error 404 "error";		##如果是没有的服务,返回error
	 25 }
	 26 
	 27 }
	/etc/init.d/varnish restart

在server2

vim index.html
	server2:www.westos.org
/etc/init.d/httpd restart

在server3

yum install httpd -y
cd /var/www/html/
vim index.html
	server3:bbs.westos.org	
/etc/init.d/httpd restart

在真机 vim /etc/hosts

	172.25.47.1 server1 www.westos.org bbs.westos.org westos.org  
curl westos.org
curl www.westos.org

看到的是server2服务
在这里插入图片描述

	curl bbs.westos.org

看到的是server3服务
在这里插入图片描述

	curl 172.25.47.1

看到的是错误404
在这里插入图片描述
3、负载均衡
在server3上

		mkdir /www	##创建虚拟主机
		cd /www/
		vim index.html
				www
		mkdir /bbs
		cd /bbs/
	    vim  index.html
	    	bbs
		
		vim /etc/httpd/conf/httpd.conf
		990 NameVirtualHost *:80
		
		1003 <VirtualHost *:80>
		1004     DocumentRoot /www
		1005     ServerName www.westos.org
		1006 </VirtualHost>
		1007 
		1008 <VirtualHost *:80>
		1009     DocumentRoot /bbs
		1010     ServerName bbs.westos.org
		1011 </VirtualHost>
		/etc/init.d/httpd restart

在server1

		vim /etc/varnish/default.vcl
		 17 director lb round-robin{			##写轮询
		 18         { .backend = web1;}
		 19         { .backend = web2;}
		 20 }
		 21 
		 22 sub vcl_recv {
		 23         if(req.http.host ~"^(www.)?westos.org"){
		 24                 set req.http.host = "www.westos.org";
		 25                 set req.backend = lb;
		 26                 return (pass);		##不缓存
		 27 }elsif (req.http.host ~"^bbs.westos.org"){
		 28         set req.backend = web2;
		 29 }else {
		 30         error 404 "error";
		 31 }
		 32 
		 33 }
		/etc/init.d/varnish reload
		varnishadm ban.url .*$

在真机中:
curl www.westos.org
轮询
在这里插入图片描述

 curl bbs.westos.org

在这里插入图片描述

4、推送平台
推送平台就是一个展示在前端的服务,可以直接在平台上进行对后端程序的操作,而不需要用命令去执行
在server1上

		yum install unzip php httpd -y
		unzip bansys.zip -d /var/www/html/

在这里插入图片描述

		mv /var/www/html/bansys/* /var/www/html/
		cd /var/www/html/
		ls 
		vim config.php
			 1 <?php
			  2  //varnish主机列表
			  3  //可定义多个主机列表
			  4  $var_group1 = array(
			  5                         'host' => array('172.25.47.1'),
			  6                                                 'port' => '8080',
			  7                     );
			  8 
			  9 
			 10 
			 11  //varnish群组定义
			 12  //对主机列表进行绑定
			 13  $VAR_CLUSTER = array(
			 14                          'www.westos.org' => $var_group1,
			 15                                              'cdn.ywjt.org' => $var_group1,
			 16                      );
	
		vim /etc/httpd/conf/httpd.conf
			 136 Listen 8080
		
		/etc/init.d/httpd restart
		vim /etc/varnish/default.vcl
		  7 acl westos {
		  8 "127.0.0.1";
		  9 "172.25.47.0"/24;
		 10 }
		 11 
		 12 backend web1 {
		 13   .host = "172.25.47.2";
		 14   .port = "80";
		 15 }
		 16 
		 17 backend web2 {
		 18   .host = "172.25.47.3";
		 19   .port = "80";
		 20 }
		 21 
		 22 director lb round-robin{
		 23         { .backend = web1;}
		 24         { .backend = web2;}
		 25 }
		 26 
		 27 sub vcl_recv {
		 28 if (req.request == "BAN") {
		 29 if (!client.ip ~ westos) {
		 30 error 405 "Not allowed.";
		 31 }
		 32 ban("req.url ~ " + req.url);
		 33 error 200 "ban added";
		 34 }
		 35 }
		 36 sub vcl_recv {
		 37         if(req.http.host ~"^(www.)?westos.org"){
		 38                 set req.http.host = "www.westos.org";
		 39                 set req.backend = lb;
		 40                 #return (pass);
		 41 }elsif (req.http.host ~"^bbs.westos.org"){
		 42         set req.backend = web2;
		 43 }else {
		 44         error 404 "error";
		 45 }
		 46 
		 47 }
		 48 
		 49 sub vcl_deliver {
		 50 if (obj.hits>0){
		 51 set resp.http.X-Cache = "HIT from westos cache";
		 52 }
		 53 else {
		 54 set resp.http.X-Cache = "MISS from westos cache";
		 55 }
		 56 return (deliver);
		 57 }


	/etc/init.d/varnish reload
	varnishadm ban.url .*$
	/etc/init.d/httpd restart

真机
在firefox中http://172.25.47.1:8080
要选择http
在这里插入图片描述

真机
curl www.westos.org/index.html
在这里插入图片描述
推送/index.html
在这里插入图片描述
真机
curl www.westos.org/index.html
在这里插入图片描述

可以看到缓存被清了

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值