高性能http加速器-varnish

一Varnish

Varnish是一款高性能的开源HTTP加速器,挪威最大的在线报纸 Verdens Gang 使用3台Varnish代替了原来的12台Squid,性能比以前更好。
1 定义:
现在的varnish已经很健壮。很多门户网站已经部署了varnish,并且反应都很好,甚至反应比squid还稳定,且效率更高,资源占用更少。相信在反向代理,web加速方面,varnish已经有足够能力代替squid。

二 主机环境:

rhel6.5 selinux and iptables disabled

三 Varnish工作原理图

这里写图片描述

VCL (Varnish Configuration Language)处理流程图

这里写图片描述

处理过程大致分为如下几个步骤:

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

四 实验主机:

主机名 IP 服务
server1 172.25.79.1 varnish
server2 172.25.79.2 apache
server3 172.25.79.3 apache

五 实验一 常规varnish

server1(varnish)

[root@server1 ~]# yum install -y varnish-3.0.5-1.el6.x86_64.rpm  varnish-libs-3.0.5-1.el6.x86_64.rpm

配置 varnish 服务端口

[root@server1 ~]# vim /etc/sysconfig/varnish
VARNISH_LISTEN_PORT=80

Varnish缓存服务器原理:

https://blog.csdn.net/u011537073/article/details/50269529

varnish pipe 和pass的区别分析

    问:pass和pipe都从后端服务器取数据,它们之间有什么不同呢?  
    答:当vcl_recv调用 pass 函数时,pass将当前请求直接转发到后端服务器。而后续的请求仍然
    通过varnish处理。 
    例如,建立了HTTP连接之后,客户端顺序请求 a.css 、a.png两个文件,“当前请求”指的是第一个
    请求,即a.css,a.css被直接转发到后端服务器,不被缓存。而后续的a.png则再由varnish来做
    处理,varnish会判断a.png 如何处理。 
    总结:一个连接中除了当前请求,其它请求仍然按照正常情况由varnish处理。 

    而pipe模式则不一样,当vcl_recv判断 需要调用 pipe 函数时,varnish会在客户端和服务器之
    间建立一条直接的连接 ,之后客户端的所有请求都直接发送给服务器,绕过varnish,不再由varnish
    检查请求,直到连接断开。 
    参考:
    https://blog.csdn.net/menuconfig/article/details/8717270

检查VCL配置是否正确:

service varnish configtest

配置一个默认后端服务器:

[root@server1 ~]# vim /etc/varnish/default.vcl
backend default {
  .host = "172.25.79.2";
  .port = "80";
}

看缓存命中情况

[root@server1 ~]# vim /etc/varnish/default.vcl
sub vcl_deliver {
    if (obj.hits > 0) {
        set resp.http.X-Cache = "HIT from test cache";
            }
    else {
        set resp.http.X-Cache = "MISS from test cache";
           }
     return (deliver);
 }

 开启服务
[root@server1 ~]# /etc/init.d/varnish start

apache–server2

[root@server2 ~]# yum install -y httpd

编写前端文件

[root@server2 ~]# cat /var/www/html/index.html

Welcome to www.westos.org !!

开启服务
[root@server2 ~]# /etc/init.d/httpd start

物理机测试

##添加解析

 [root@fundation20 Desktop]# cat /etc/hosts
172.25.79.1 server1 www.westos.org 

测试

##未命中
[root@fundation20 Desktop]# curl -I www.westos.org
HTTP/1.1 200 OK
Server: Apache/2.2.15 (Red Hat)
Last-Modified: Tue, 13 Feb 2018 00:46:57 GMT
ETag: "20331-26-5650d54eefd0e"
Content-Type: text/html; charset=UTF-8
Content-Length: 38
Accept-Ranges: bytes
Date: Tue, 13 Feb 2018 02:09:16 GMT
X-Varnish: 120543320
Age: 0
Via: 1.1 varnish
Connection: keep-alive
X-Cache: MISS from test cache
##命中
[root@fundation20 Desktop]# curl -I www.westos.org
HTTP/1.1 200 OK
Server: Apache/2.2.15 (Red Hat)
Last-Modified: Tue, 13 Feb 2018 00:46:57 GMT
ETag: "20331-26-5650d54eefd0e"
Content-Type: text/html; charset=UTF-8
Content-Length: 38
Accept-Ranges: bytes
Date: Tue, 13 Feb 2018 02:09:18 GMT
X-Varnish: 120543321 120543320
Age: 2
Via: 1.1 varnish
Connection: keep-alive
X-Cache: HIT from test cache

通过 varnishadm 手动清除缓存

[root@server1 ~]# varnishadm ban.url .*$           #清除所有
 [root@server1 ~]# varnishadm ban.url /index.html   #清除 index.html 页面缓存
 [root@server1 ~]# varnishadm ban.url /admin/$      #清除 admin 目录缓存

实验二:定义多个不同域名站点的后端服务器

1 varnish–server1

[root@server1 ~]# vim /etc/varnish/default.vcl
#配置两个后端服务器
backend web1 {
  .host = "172.25.79.2";
  .port = "80";
}
backend web2 {
  .host = "172.25.79.3";
  .port = "80";
}
#当访问 www.westos.org 或 westos.org 域名时从 web1 上取数据;
#访问 bbs.westos.org 域名时到 web2 取数据;
#访问其他,页面报错。
 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";
                  }
  }

##重启服务
 [root@server1 ~]# /etc/init.d/varnish restart
 Stopping Varnish Cache:                                    [  OK  ]
 Starting Varnish Cache:        

2 apache–server2

 [root@server2 ~]# cat /var/www/html/index.html 
Welcome to www.westos.org from server2 !!

 [root@server2 ~]# /etc/init.d/httpd  restart

3 apache–server3

[root@server3 ~]# yum install -y httpd

 [root@server3 ~]# cat /var/www/html/index.html
Welcome to bbs.westos.org from server3 !!

 [root@server3 ~]# /etc/init.d/httpd start

物理机测试


添加解析
 [root@fundation1 Desktop]# cat /etc/hosts
172.25.79.1 server1 www.westos.org westos.org bbs.westos.org

测试:

[root@niub network-scripts]# curl www.westos.com
Welcome to www.westos.org from server2 !!
[root@niub network-scripts]# curl www.westos.com
Welcome to bbs.westos.org from server3 !!

varnish的负载均衡

1 varnish–server1:

[root@server1 ~]# vim /etc/varnish/default.vcl
#配置两个后端服务器
backend web1 {
  .host = "172.25.79.2";
  .port = "80";
}
backend web2 {
  .host = "172.25.79.3";
  .port = "80";
}
##把两个后端聚合为一个组,并检测后端健康状况
director lb round-robin {
     { .backend = web1; }
     { .backend = web2; }
}
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";
                  }
  }

[root@server1 ~]# /etc/init.d/varnish restart
Stopping Varnish Cache:                                    [  OK  ]
Starting Varnish Cache:            

2 apache–server2

[root@server2 ~]# cat /var/www/html/index.html 
www.westos.com server2

[root@server2 ~]# /etc/init.d/httpd restart

3 apache–server3

root@server3 ~]# vim /www/index.html
www.westos.com server3

物理机测试:

查看解析

[root@fundation1 Desktop]# cat /etc/hosts
172.25.79.1 server1 www.westos.org westos.org bbs.westos.org

测试

[root@niub network-scripts]# curl www.westos.com
www.westos.com server2
[root@niub network-scripts]# curl www.westos.com
www.westos.com server3
[root@niub network-scripts]# curl www.westos.com
www.westos.com server2
[root@niub network-scripts]# curl www.westos.com
www.westos.com server3
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值