码迷,mamicode.com
首页 > Web开发 > 详细

varnish实现web加速缓存

时间:2018-09-22 22:27:35      阅读:222      评论:0      收藏:0      [点我收藏+]

标签:主机   代理服务器   init.d   bar   htm   配置管理   开发   设定   ip地址   

一.Varnish简述

varnish是一款高性能且开源的方向代理服务器和HTTP加速器,它的开发者poul-Henning kamp是FreeBSD 核心的开发人员之一。varnish采用全新的软件体系机构,和现在的硬件体系配合紧密,varnish是一个轻量级的cache和反向代理软件。先进的设计理念和成熟的设计框架是varnish的主要特点。挪威最大的在线报纸 Verdens Gang 使用3台Varnish服务器 代替了原来的12台Squid服务器,结果性能比以前更好。

二.varnish的特点

1、基于内存进行缓存,重启后数据将消失。

2、利用虚拟内存方式,I\O性能好。

3、支持设置0~60秒的精确缓存时间。

4、VCL配置管理比较灵活。

5、具有强大的管理功能,例如top、stat、admin、list 等。

6、状态机设计巧妙、结构清晰。

7、利用二叉堆管理缓存文件,可达到积极删除目的。

三.varnish处理缓存的过程

(1)Receive 状态,也就是请求处理的入口状态,根据 VCL 规则判断该请求应该是 Pass 或 Pipe,或者进入 Lookup(本地查询)。

(2)Lookup 状态,进入此状态后,会在 hash 表中查找数据,若找到,则进入 Hit 状态,否则进 入 miss 状态。

(3)Pass 状态,在此状态下,会进入后端请求,即进入 fetch 状态。

(4)Fetch 状态,在 Fetch 状态下,对请求进行后端的获取,发送请求,获得数据,并进行本地 的存储。

(5)Deliver 状态, 将获取到的数据发送给客户端,然后完成本次请求。

 

四.varnih的使用

实验所需环境:三台配置好网络的虚拟机,分别设置主机名为server1、server2、server3

1.安装服务

在server1中打开官网,下载rpm包进行安装

yum install varnish-3.0.5-1.el6.x86_64.rpm varnish-libs-3.0.5-1.el6.x86_64.rpm -y

2.配置服务

编辑系统配置文件,文件的参数需要根据实际的系统内核及系统还有相关硬件设定

vim /etc/security/limits.conf
写入:
varnish          -     nofile      6555       ##最大文件数
varnish          -     memlock     82000      ##最大内存空间
varnish          -     nproc       unlimited  ##子线程数

编辑服务配置文件

技术分享图片
vim /etc/sysconfig/varnish      ##varnish的配置文件,配置 varnish 服务端口
VARNISH_LISTEN_PORT=80       ##varnish监听端口
vim /etc/varnish/default.vcl ##配置一个后端服务器,缓存配置 backend default { .host = "172.25.3.2";      ##host指定要缓存的后端服务器地址 .port = "80"; }
技术分享图片

3.启动服务

/etc/init.d/varnish start

4.测试

在server2中配置好http服务,并编写一个网页文件index.html,内容任意

在真机中打开浏览器输入server1的IP地址,可以看到server2中的发布页面内容

 

5.查看缓存命中情况

在varnish服务器上

技术分享图片
vim 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   #varnish支持热插拔
技术分享图片

 

6.清除缓存

varnishadm ban.url .*$       ##清除所有

varnishadm ban.url /index.html    ##清除 index.html 页面缓存

varnishadm ban.url /admin/$      清除 admin 目录缓存

五.varnish的扩展使用

1多个不同域名对应后端服务器

在varnish服务器上

技术分享图片
vim default.vc 
backend web1 {
.host = "172.25.3.2";
.port = "80";
}

backend web2 {
.host = "172.25.3.3";
.port = "80";
}
sub vcl_recv {
if (req.http.host ~ "^(www.)?westos.org") { #当域名为以www.westso.org开头或westos.org时去web1主机缓存
set req.http.host = "www.westos.org";
set req.backend = web1;
} elsif (req.http.host ~ "^bbs.westos.org") { #当域名以bbs.westos.org开头 时去web2主机缓存
set req.backend = web2;
} else {error 404 "westos cache";
}
}
/etc/init.d/varnish reload   ###重新加载
技术分享图片

 

2负载均衡

VCL文件中可以把多个 backends 聚合成一个组,这些组被叫做 director,当组里一个 backend 挂掉后,可以选择另一个健康的 backend。VCL 有多种 director,不同的 director 采用不同的算法选择 backend,主要有以下几种: ..Random director 会根据所设置的权值(weight)来选择 backend,.retries 参数表示尝试找到一个 backend 的最大次数,.weight 参数表示权值 ..Round-robin director 在选择 backend 时,会采用循环的方式依次选择。

在server3中配置好http服务器,并建立两个apache虚拟主机,注意不同的虚拟机的发布目录不能设置为同一个目录

技术分享图片
vim /etc/httpd/conf/httpd.conf #配置虚拟主机
NameVirtualHost *:80       ##去掉该行的注释

<VirtualHost *:80>
DocumentRoot /var/www/html
ServerName www.westos.org
</VirtualHost>

<VirtualHost *:80>
DocumentRoot /www
ServerName bbs.westos.org
</VirtualHost>
技术分享图片

 

在server1中

技术分享图片
vim default.vc #这里用round-robin做实验
backend web1 {
.host = "172.25.3.2";
.port = "80";
}

backend web2 {
.host = "172.25.3.3";
.port = "80";
}
director westos round-robin { #建立一个名为lb的组,实现web1和web2之间的轮询
{ .backend = web1; }
{ .backend = web2; }
}
sub vcl_recv {
if (req.http.host ~ "^(www.)?westos.org") { #当客户端搜索符合条件的域名时,用westos组实现轮询
set req.http.host = "www.westos.org";
set req.backend = westos;
return (pass);  
} elsif (req.http.host ~ "^bbs.westos.org") {
set req.backend = web2;
} else {error 404 "westos cache";
}
}

/etc.init.d/varnish reload

varnish实现web加速缓存

标签:主机   代理服务器   init.d   bar   htm   配置管理   开发   设定   ip地址   

原文地址:https://www.cnblogs.com/ChairmanYSL/p/9691382.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!