搭建varnish服务器

一什么是varnish

    varnish是web服务器的加速器,用来提高客户访问web服务器的速度; 它被安装在web服务器之前,可以缓存web服务器的应用程序和数据,并且可以响应客户端的web请求。严格意义上说,Varnish是一个高性能的反向代理软件和HTTP加速器。
 

二varnish与squid对比

相同点:
都是反向代理服务器,都是开源软件
不同点:
1)varnish稳定性高。两者在相同负荷工作下,squid发生故障几率更大,因为squid需要经常重启
2)varnish访问速度更快。所有缓存数据从内存读取,而squid是从硬盘读取
3)varnish可以支持更多的并发连接。因为varnish的TCP连接释放比squid快
4)varnish可以通过管理端口,使用正则表达式批量清除部分缓存,squid不行
5)varnish在高并发下CPU、iI/O和内存等系统开销高于squid
5)varnish进程一旦挂起、崩溃或者重启,缓存数据都会从内存中完全释放,此时所有请求都会被发送到后端服务器,给后端造成很大压力

三VCL说明

VCL:用来定义varnish的存取策略。在配置varnish之前,首先需要了解varnish的配置语法,即vcl。

#VCL内置函数

1)vcl_recv函数:用于接收用户请求,当成功接收用户请求后被调用。通过某种动作来决定如何处理请求。
2)pipe函数:在进入pipe模式时该函数被调用,用于将客户端请求直接传递给后端服务器,在请求和返回的内容没有改变的情况下,将不变的内容直接返回给客户端。直到这个连接关闭。
3)vcl_pass函数:当vcl_recv函数执行pass动作进入pass模式时该函数被调用,用于将客户端请求直接转发给后端服务器,后端服务器响应给客户端时,不进行缓存。由于直接将请求转发给后端服务器,因此该连接下的响应数据都是最新的。
4)vcl_hit函数:该函数在执行lookup命令后,如果在缓存中找到请求数据,则自动调用该函数。
5)vcl_miss函数:该函数在执行lookup命令后,如果在缓存中没有找到请求数据,则自动调用该函数
6)vcl_fetch函数:当想从后端服务器获取数据或更新缓存时该函数被调用,并且根据某种动作来判断获取的数据是否被缓存,还是直接返回给客户端。
7)vcl_deliver函数:将请求的数据返回给客户端调用此函数。
8)vcl_timeout函数:在缓存内容到期前调用此函数。
9)vcl_discard函数:在缓存内容到期后调用此函数。

#VCL处理流程图

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

四搭建varnish

 实验环境: 四台在同一局域网的主机:server1(ip:172.25.57.1)  bak1(ip:172.25.57.2)  bak2(ip:172.25.57.3)  client(ip:172.25.57.250),server1作为varnish服务器,bak1、bak2作为两台web服务器,client为真机ip

1.下载安装包并安装:

2.修改配置文件/etc/sysconfig/varnish

#修改端口,因为varnish要缓存web服务的内容,所以侦听的端口修改为80:

#查看本机内存所支持的最大文件数

3. 系统参数配置: /etc/security/limits.conf:

在该文件中添加添加配置信息,告知服务器系统运行varniash所需要的机器性能(文件、内存、进程的大小)。一个计算机的性能( 文件、内存及进程的量级)是由硬件决定的,所以在正常生产环境中配置varnish时,服务器的硬件性能必须达到vanish运行的要求

4. 编辑配置文件: /etc/varnish/default.vcl

#修改为将要缓存的web服务器的ip地址和端口

5.开启服务,查看端口信息

五web后端服务器搭建

下载apache,编辑发布测试页面,启动服务。后端两个服务器操作相同

#测试访问varnish代理服务器:172.25.57.1

#测试成功!现在我们在其基础上添加更多功能!

六定义缓存命中情况

[root@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);
}

#重新加载varnish服务,清除varnish缓存内容,测试命中情况

##通过 varnishadm 手动清除缓存
varnishadm ban.url .*$          #清除所有
varnishadm ban.url /index.html  #清除 index.html 页面缓存
varnishadm ban.url /admin/$     #清除 admin 目录缓存

#清除所有varnish缓存后,第一次没有找到请求的内容,MISS。第二次再执行请求,HIT命中

#

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

#定义2台后端服务器
backend web1 {
  .host = "172.25.30.2";
  .port = "80";
}
backend web2 {
  .host = "172.25.30.3";
  .port = "80";
}
#定义域名访问策略。如果访问域名为www.westos.org,请求交给web1处理;域名访问bbs.westos.org,请求交给web2;否则提示404错误
sub vcl_recv{
        if(req.http.host ~ "^(www.)?westos.org"){
        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";
        }
}

#测试机添加本地域名解析,再测试,实现不同域名访问不同站点

八定义负载均衡

#注意将上个实验,不同请求访问不同站点配置屏蔽

#定义director,由web1和web2后端轮询分担请求
director lb round-robin{
        {.backend = web1; }
        {.backend = web2; }
}
#定义访问策略。当访问www.westos.org时,轮询访问后端服务器,当访问bbs.westos.org时,仅访问站点web2;
#注意添加return (pass).清缓存(利于观测实验效果,但是此服务本就为了缓存,本末倒置)
#如果不加此,则测试时需要手动清缓存(varnishadm ban.url .*$),如果不手动,则实现不了轮寻,毕竟已有缓存,直接就访问了...
sub vcl_recv{
        if(req.http.host ~ "^(www.)?westos.org"){
        set req.http.host = "www.westos.org";
        set req.backend = lb; 
        return (pass);
}elsif(req.http.host ~ "^bbs.westos.org"){
        set req.backend = web2;
        }else{
        error 404 "westos cache";
        }   
}

#测试访问www.westos.org,实现轮询访问,请求bbs.westos.org时,请求交于后端web2

九定义一台主机多个域名(虚拟主机)

#在bak2上配置虚拟主机

vim /etc/httpd/conf/httpd.conf
    990 NameVirtualHost *:80
    136 Listen 80
    1011 <VirtualHost *:80>
    1012     DocumentRoot /www
    1013     ServerName www.westos.com
    1014 </VirtualHost>
	
    1016 <VirtualHost *:80>
    1017     DocumentRoot /bbs
    1018     ServerName bbs.westos.com
    1019 </VirtualHost>

#在bak2上的各个虚拟主机中配置默认发布文件

#真机测试,当访问bak2时,实际访问虚拟主机发布页面

十搭建varnish cdn 推送平台(通过管理窗口批量清缓存)

#下载解压bansys.zip,安装依赖软件,需要php支持

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

#修改http端口号为:8080,80已被varnish服务占用,开启httpd服务

#测试:在浏览器中输入172.25.57.1:8080会看到CDN推送推送界面

#bansys 有两种工作模式,分别是:telnet 和 http 模式。
#telnet 模式需要关闭 varnish 服务管理端口的验证,注释掉/etc/sysconfig/varnish 文件中的 “ -S ${VARNISH_SECRET_FILE}”这行,重启 varnish 服务即可。
#如果是 http 模式需要对 varnish 做以下设置:

#配置varnish主配置文件:配置acl规则

#设置访问控制
acl westos{
"127.0.0.1";
"172.25.57.250"/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";
        }
}
##注意:注释掉retrun (pass);

#进入网页:172.25.57.1:8080 ,选择http推送模式,.*$清所有缓存

#测试:通过查看网页头查看命中情况,原来是HIT状态,当推送成功后,varnish缓存清空,请求变成MISS下次请求则又命中!

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值