网络的高速缓存服务器---varnish

一、CDN的了解

CDN(Content Delivery Network)是构建在网络之上的内容分发网络,依靠部署在各地的边缘服务器,通过中心平台的负载均衡、内容分发、调度等功能模块,使用户就近获取所需内容,降低网络拥塞,提高用户访问响应速度和命中率。CDN的关键技术主要有内容存储和分发技术。
CDN的基本原理是广泛采用各种缓存服务器,将这些缓存服务器分布到用户访问相对集中的地区或网络中,在用户访问网站时,利用全局负载技术将用户的访问指向距离最近的工作正常的缓存服务器上,由缓存服务器直接响应用户请求。
搭建CDN系统可以选择3种主流方案:
1. squid 2. varnish 3. Nginx+memcache

二、varnish简介

Varnish是一款高性能的开源HTTP加速器,Varnish的功能与Squid服务器相似,都可以用来做HTTP缓存。 Verdens Gang 使用3台Varnish代替了原来的12台Squid,性能优越于Squid

VCL (Varnish Configuration Language)处理流程图

这里写图片描述

处理过程的步骤有:

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

配置varnish服务器

server1

1.下载安装varnish软件包http://varnish-cache.org/releases/

2.修改varnish的监听端口:

[root@server1 ~]# vim  /etc/sysconfig/varnish 
66 VARNISH_LISTEN_PORT=80
# 设置为监听80端口

3.修改配置文件

修改安全限制文件,保证流量大时,服务正常

内核允许的最大数

[root@server1 ~]# sysctl -a |grep file
fs.file-nr = 416    0   98862
fs.file-max = 98862

varnish软件的打开文件最大数

这里写图片描述

默认数量大于内核操作的文件数目.故做如下修改:

[root@server1 varnish]# vim  /etc/sysconfig/varnish 
8 NFILES=96666

操作系统允许的最大数目:
根据此文件的参数修改内存空间和线程数,文件数应该介于上述两者之间

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

这里写图片描述

作出如下修改:

 

[root@server1 ~]# vim  /etc/security/limits.conf 
varnish         -       nofile           96667
varnish         -       memlock          82000
varnish         -       nproc            unlimited

4.开启服务

[root@server1 ~]# /etc/init.d/varnish  start
[root@server1 ~]# netstat -antlp

这里写图片描述

server2网络服务器

下载apache并开启服务

[root@server2 ~]# yum install httpd -y
[root@server2 ~]# /etc/init.d/httpd start

编辑发布内容

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

<h1>www.westos.org</h1>

server1

修改varnish监听服务器的ip

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

 varnish重新加载

[root@server1 ~]# /etc/init.d/varnish reload

真机测试:

实验二:查看缓存命中情况

server1:

[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

[root@server1 ~]# /etc/init.d/varnish  reload

客户端真机测试:

添加本地解析

[root@foundation7 images]# vim  /etc/hosts
172.25.7.1      www.westos.org

这里写图片描述

这里写图片描述

注意:varnish默认缓存时间为120s,超过120s自动清除缓存

实验三:

通过carnihadm后东清除缓存

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

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

server1:

修改下列代码:

[root@server1 ~]# vim  /etc/varnish/default.vcl 
backend web1 {
  .host = "172.25.7.2";
  .port = "80";
}
backend web2 {
  .host = "172.25.7.3";
  .port = "80";
}
## 当访问 www.westos.org或者westos.com 域名时从 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 reload 

server2:

[root@server2 ~]# yum install httpd -y
[root@server2 ~]# vim  /var/www/html/index.html 
<h1>www.westos.org</h1>
[root@server2 ~]# /etc/init.d/httpd restart

server3:配置网络服务器

[root@server3 ~]# yum install httpd -y
[root@server3 ~]# /etc/init.d/httpd start
[root@server3 ~]# vim  /var/www/html/index.html   ##发布页面

<h1>bbs.westos,com</h1>

主机客户端进行测试:

[root@foundation7 varnish]# vim  /etc/hosts
172.25.7.1      www.westos.org  bbs.westos.org  westos.org

 

实验五:负载均衡的健康状况检测

server1:

[root@server1 ~]# vim  /etc/varnish/default.vcl
backend web1 {
  .host = "172.25.7.2";
  .port = "80";
}backend web2 {
  .host = "172.25.7.3";
  .port = "80";
}
## 把多个后端聚合为一个组,并检测后端健康状况
## Round Robin(中文翻译为轮询调度)是一种以轮询的方式依次将一个域名
## 解析到多个IP地址的调度不同服务器的计算方法。
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";
}

server2:配置httpd

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

<h1>www.westos.org - server2</h1>

server3:设定虚拟主机

[root@server3 ~]# mkdir /www1
[root@server3 ~]# cd /www1/
[root@server3 www1]# vim index.html

<h1>www.westos.org - server3</h1>

[root@server3 ~]# vim  /etc/httpd/conf/httpd.conf 
[root@server3 ~]# /etc/init.d/httpd restart
[root@server3 www1]# vim  /etc/hosts

172.25.7.3    server3     www.westos.org   bbs.westos.org

 这里写图片描述

客户端测试:

这里写图片描述

这里写图片描述

注意:当server2的网络服务器挂掉之后,服务器会自动连接server3上的服务器,并且不会有缓存产生,然后正常工作。

实验六:CDN推送平台

server1:

1.安装apache php,并修改口号

[root@server1 ~]# yum install httpd php -y
[root@server1 ~]# vim /etc/httpd/conf/httpd.conf  ##因为varnish占用的80端口,所以修改httpd的端口为8080
Listen  8080

这里写图片描述

2.下载安装包:bansys

http://code.google.com/p/varnish-php-bansys/

[root@server1 ~]# yum install unzip  -y  ##准备解压
[root@server1 ~]# unzip  bansys.zip 

这里写图片描述

3.把解压后的文件放到阿帕彻默认发布目录

这里写图片描述

4.修改配置文件

cd    /var/www/html

vim config.php

这里写图片描述

5.开启服务

/etc/init.d/httpd  start

这里写图片描述

6.浏览器访问

这里写图片描述

 

这里写图片描述

这里写图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值