Varnish(HTTP加速器)学习

Varnish

了解varnish

是什么?

一款高性能的开源HTTP加速器,具有反向代理,缓存的功能,有时称为HTTP加速器或web加速器。

Varnish将文件或文件片段存储在内存中,使它们能够快速被提供。

Varnish本质上是一个键/值存储,它通常使用URL作为键。

缓存???

使用缓存有两个前提条件,一是数据访问热点不均衡,某些数据会被更频繁的访问,这些数据应该放在缓存中;二是数据在某个时间段有效,不会很快过期,否则缓存的数据就会因已经失效而产生脏读,影响结果的正确性

网站应 用中,缓存除了可以加快数据访问速度,还可以减轻松后端应用和数据存储的负载压力,这一点对网站数据库架构至关重要,网站数据库库几乎都是按照有缓存的前提进行负载能力设计的

正代与反代???

待补充

安装

得到文件压缩包
解压压缩包并进入目录
yum install -y varnish-4.0.5-1.el7.x86_64.rpm varnish-libs-4.0.5-1.el7.x86_64.rpm jemalloc-3.6.0-1.el7.x86_64.rpm -y
##el7表示版本,一定得装和系统相同的版本
rpm -qc varnish-4.0.5-1.el7.x86_64

	/etc/logrotate.d/varnish 	##日志文件
	/etc/varnish/default.vcl	##配置文件(核心),由vcl语言编写 
	/etc/varnish/varnish.params ##自身参数设置文件 
##注意##
/usr/lib/systemd/system/varnish.service
## 此服务文件可以看服务的一些限制!

配置服务环境

1.1)

ulimit -a ##列出每个用户对资源的限制值 
ulimit -* ##根据不同参数修改限制值
ulimit -n 131072 		
ulimit -l 82 

sysctl -a |grep net		##查看内核限制
net.core.optmem_max = 20480 	#每个套接字所允许的最大缓冲区的大小 
net.core.rmem_default = 212992 	#网络协议栈默认接收内存 
net.core.rmem_max = 212992 		#网络协议栈最大接收内存

1.2)

vim /etc/security/limits.conf 
varnish         -       nofile          131072 	
varnish         -       melock          8200	
##针对varnish用户,不希望针对所有的用户,所以在配置文件中对varnish用户进行配置!

举例学习

有三台虚拟机(A,B,C),A为varnish服务器,BC为后端

varnish服务修改设置后也需要重启

systemctl restart varnish

反向代理

A

打开varnish服务
修改配置文件(/etc/varnish/default.vcl)

backend default {
    .host = "172.25.2.201";
    .port = "80";
}

B C

安装httpd服务并在index.html写些可区分的内容

eg:server2  server3

curl ip测试

缓存

A

打开varnish服务
修改配置文件(/etc/varnish/default.vcl)


sub vcl_deliver {
    if (obj.hits>0){
        # 变量的设置(已经定义的变量)
        set resp.http.X-Cache = "HIT";
    }
    else{
        set resp.http.X-Cache = "MISS";
    }
        # 注意:一定要return
        return (deliver);
}

注意:每一行语句必须以;结尾,并且字符串必须用双引号!

测试
crul -I ip

curl -I 172.25.0.1/index.html 和curl -I 172.25.0.1 这两个命令所构建的http请求报文是不一样 的

手动清理缓存
 varnishadm ban req.url "~" /  	#清除所有缓存 
 varnishadm ban req.url "~" /index.html  #清除index.html页面缓存

定义不同域名站点的后端服务器

A

打开varnish服务
修改配置文件(/etc/varnish/default.vcl)

backend web1 {
    .host = "172.25.2.2";
    .port = "80";
}
backend web2 {
    .host = "172.25.2.3";
    .port = "80";
}
sub vcl_recv {
    # 说明:接受客户端的url请求,进行相应的处理,然后进行请求转发
    # 说明:从语法的角度-->这里属于perl的正则匹配
    # 体现:varnish在安装的过程中,会安装许多perl的模块!
    # vcl配置语言参考了C和perl!
    if (req.http.host ~"^(www.)?westos.com"){
        # (1)修改请求主机的名字-->用户体验好    
        set req.http.host = "www.westos.com";
        # (2)交给后台服务器来处理
        set req.backend_hint = web1;
}elsif (req.http.host ~"^bbs.westos.com") {
        set req.backend_hint = web2;

}else {
        # (3)都不匹配,认为请求的资源主机不存在!
        # 405表示请求的方式不对,常见请求的方式有get、post、head、put!
        # 404表示服务器响应了,但是服务器没有此资源,客户端的请求错误!
        # 503表示服务器不存在,或者存在但没有开启服务!
        return (synth(503));
   }
}

在真机加解析
/etc/hosts

测试
crul www.westos.com
crul bbs.westos.com

负载均衡

做负载均衡时
对vcl4.0及以上,需要导入一个模块
##注意:导入时此语句必需放在 vcl4.0 下面

import directors from "/usr/lib64/varnish/vmods/libvmod_directors.so";

注意:当负载均衡时有缓存

return (pass);
##避免缓存影响负载均衡实验效果

A

打开varnish服务
修改配置文件(/etc/varnish/default.vcl)


import directors from "/usr/lib64/varnish/vmods/libvmod_directors.so";

# Default backend definition. Set this to point to your content server.

# (1)默认的后端服务器的端口
backend web1 {
    .host = "172.25.2.2";
    .port = "80";
}
backend web2 {
    .host = "172.25.2.3";
    .port = "80";
}
sub vcl_init {
        # Load Balance-->负载均衡(lb的缩写)
        # 注意:directors要从库中正确导入
        new lb = directors.round_robin();
        # 说明:负载均衡所构成的集群,或者说lb的此套件中的负载均衡的服务器
        lb.add_backend(web1);
        lb.add_backend(web2);
}
sub vcl_recv {    
	if (req.http.host ~ "^(www.)?westos.org") {        
		set req.http.host = "www.westos.org";
		set req.backend_hint = lb.backend(); 
		##当访问www.westos.org时,请求转到lb        
		return (pass); ##测试时可打开此选项,不进行缓存    
		} elsif (req.http.host ~ "^bbs.westos.org") {        
		set req.backend_hint = web2;    
		} else { 
		return (synth(405));   
} 
}

测试
crul www.westos.com

varnish cdn推送平台

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值