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
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			##查看配置文件

对varnish进行修改

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
	 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);
 	 }


/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
	   backend web1 {
	     .host = "172.25.47.2";
	     .port = "80";
	  }
	  
	  backend web2 {
	    .host = "172.25.47.3";
	    .port = "80";
	  }
	  
	  sub vcl_recv {
	         if(req.http.host ~"^(www.)?westos.org"){	  ##访问以www.westos.org或者westos.com 访问到web1
	                  set req.http.host = "www.westos.org"; ##访问
	                  set req.backend = web1;	  ##访问web1
	  }elsif (req.http.host ~"^bbs.westos.org"){
	         set req.backend = web2;		          ##访问到web2
	  }else {
	          error 404 "error";		##如果是没有的服务,返回error
	  }
	  
	  }
	/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

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
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值