1.24 代理缓存器-----cdn之varnish

例子:当西安的用户,想要去访问远在深圳的腾讯服务器时。如果每次都直接访问深圳腾讯服务器那么,效率会及其底下。如果西安有一个腾讯的代理服务器,西安用户只需要去访问西安的代理服务器,第一次,西安代理服务器,也需要去深圳腾讯服务器访问,只要西安的腾讯代理服务器缓存以后,其余的用户或者之后再访问相同的内容,速度会很快。

CDN的全称是Content Delivery Network,即内容分发网络。CDN是构建在网络之上的内容分发网络,依靠部署在各地的边缘服务器,通过中心平台的负载均衡、内容分发、调度等功能模块,使用户就近获取所需内容,降低网络拥塞,提高用户访问响应速度和命中率。CDN的关键技术主要有内容存储和分发技术。

Squid是一个高性能的代理缓存服务器,Squid支持FTP、gopher、HTTPS和HTTP协议。和一般的代理缓存软件不同,Squid用一个单独的、非模块化的、I/O驱动的进程来处理所有的客户端请求。

Varnish是一款高性能的开源HTTP加速器挪威最大的在线报纸 Verdens Gang 使用3台Varnish代替了原来的12台Squid,性能比以前更好。

varnish的原理


varnish都是以模块进行处理,配置文件中的sub vcl-deliver等等 都是一个个的模块

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

lookup: 使用vcl-hash,将你的ip与后段服务器绑定
    查看是否有缓存,有就miss,没有就hit
pass:请求给了fetch(查询)。动态数据不适合缓存的使用pass。
pipe:与pass类似,直接访问后端服务器。数据比较大,不适合缓存。
VCL:varnish configure language (varnish的专用配置语言)

一、实验环境:

1)安装6.5linux虚拟机:

1、修改主机名

vi /etc/sysconfig/network

server1

2、修改本地解析

vi /etc/hosts

172.25.85.1  server1

172.25.85.2  server2

172.25.85.3  server3

172.25.85.4  server4

172.25.85.5  server5

172.25.85.6  server6

3、修改ip地址

vi /etc/sysconfig/network-scripts/ifcfg-eth0
/etc/init.d/network restart

4、配置yum源

vi /etc/yum.repos.d/rhel-source.repo
yum clean all
yum repolist

5、安装vim,openssh 和 lftp

yum install vim openssh-clients lftp -y


6、删除70-persistent-net.rules文件    ##如果有这个文件,快照会报错,因为里面含有mac地址


   18  cd /etc/udev/
   19  ls
   20  cd rules.d/
   21  ls
   22  rm -rf 70-persistent-net.rules


7、关闭selinux


vi /etc/sysconfig/selinux

SELINUX=disabled


8、关闭防火墙并开机不启动


   13  /etc/init.d/iptables stop
   14  /etc/init.d/ip6tables stop
   15  chkconfig iptables off
   16  chkconfig ip6tables off


9关闭


2)利用快照安装三太虚拟机:

 cd /var/lib/libvirt/images/
qemu-img create -f qcow2 -b origin.qcow2 vm1.qcow2
qemu-img create -f qcow2 -b origin.qcow2 vm2.qcow2
qemu-img create -f qcow2 -b origin.qcow2 vm3.qcow2

1、复制三张虚拟机的vm1,vm2,vm3
2、安装三台虚拟机vm1,vm2,vm3
3、修改三台虚拟机的主机名和ip地址
vi /etc/sysconfig/network
vi /etc/sysconfig/network-scripts/ifcfg-eth0
/etc/init.d/network restart

二、varnish服务的安装

1)varnish的介绍
2)第一台服务器vm1安装varnish,并修改好配置文件

1、下载号安装包varnish-3.0.5-1.el6.x86_64.rpm  varnish-libs-3.0.5-1.el6.x86_64.rpm,并安装

yum install varnish-* -y

2、修改配置文件    

rpm -qc varnish-     ##查看配置文件

配置文件一

 vim /etc/sysconfig/varnish      ##查看第一个配置文件

  8 NFILES=131072             ##最大可以开启的数量

 12 MEMLOCK=82000      ##占用的内存

 15 NPROCS="unlimited"    ##线程数量不限制

----------------------------------------------------------------------------------------------------------------------------------------------------------

我们需要查看系统最多可以打开多少文件,要大于varnish的数量

sysctl -a | grep file        ##查看系统可以开启的最大文件数量


free -m                          ##查看系统内存


poweroff                        ##关机以修改内存,使得系统可开启的最大文件数变大,以满足需求


sysctl -a | grep file

配置文件二

vim /etc/sysconfig/varnish     ##修改端口
 66 VARNISH_LISTEN_PORT=80

修改系统内置的配置文件,使得达到varnish的要求。
vim /etc/security/limits.conf
 51 varnish         -       nofile          131072        ##最大开启文件的数量
 52 varnish         -       memlock         82000    ##占用的内存
 53 varnish         -       nproc           unlimited    ##进程号是否限制

配置文件三:

[root@server1 ~]# vim /etc/varnish/default.vcl

  7 backend default {
  8   .host = "172.25.85.2";
  9   .port = "80";
 10 }

3)启动varnish

 /etc/init.d//varnish start


cat /etc/passwd              ##系统会多一个varnish的用户
ps aux | grep varnish    ##查看进程有两个,一个为root,一个为varnish
cat /proc/1035/status     ##查看进程号的状态,root只有一个线程
ps aux | grep varnish
at /proc/1036/status     ##varnishi有109个线程

4)第二台服务区vm2安装httpd服务

yum install httpd -y
reboot
cd /var/www/html/
ls
vim index.html        ##编写默认发布目录
/etc/init.d/httpd start


测试:

在测试主机curl vm1的ip地址

5)实现varnish的缓存功能

在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);
}


完成后,重新加载
/etc/init.d/varnish reload

测试结果

第一次没有缓存

第二次有缓存

清空缓存要在,varnish服务端进行。

清空缓存:varnishadm ban.url .*$                                       
varnishadm ban.url /index.html  访问方式不同         
要使用 curl -I 172.25.38.1/index.html


6)设置两个网页

在vim /etc/varnish/default.vcl编写如下
backend web1 {
  .host = "172.25.85.2";
  .port = "80";
}

backend web2 {
  .host = "172.25.85.3";
  .port = "80";
}
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";
    }
}

完成后,重新加载
/etc/init.d/varnish reload


在测试机,加入本地解析

vim /etc/hosts

172.25.85.1 server1 www.westos.org bbs.westos.org

测试结果

7)如何实现负载均衡(论寻访问web1和web2)

在vim /etc/varnish/default.vcl编写如下

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;                ##访问www.westos.org 论寻
        return (pass);                            ##不会缓存,否则看不到效果
    }elsif ( req.http.host ~ "^bbs.westos.org" ){
        set req.backend = web2;
    }else{
        error 404 "westos cache";
    }
}


完成后,重新加载
/etc/init.d/varnish reload

实验结果


8)虚拟主机的安装

在server2或者server3实现

1、编辑配置文件vim /etc/httpd/conf/httpd.conf

990 NameVirtualHost *:80

1004 <VirtualHost *:80>
1005     DocumentRoot /www
1006     ServerName www.westos.org
1007 </VirtualHost>
1008
1009 <VirtualHost *:80>
1010     DocumentRoot /bbs
1011     ServerName bbs.westos.org
1012 </VirtualHost>

2、创建目录

[root@server3 html]# mkdir /www
[root@server3 html]# mkdir /bbs

3、编辑内容

[root@server3 html]# cd /www
[root@server3 www]# vim index.html
[root@server3 www]# cd /bbs/
[root@server3 bbs]# vim index.html

重启服务

/etc/init.d/httpd restart

测试

测试机vim/etc/hosts
172.25.85.2 server2 www.westos.org bbs.westos.org

结果


9)cdn推送管理,清除缓存

1、安装相关软件

yum install unzip httpd php -y

2、解压unzip bansys.zip -d /var/www/html/

3、编写bansys配置文件

cd /var/www/html/bansys/
vim config.php

编辑如下

<?php

 //varnish主机列表
 //可定义多个主机列表
 $var_group1 = array(
                        'host' => array('172.25.85.1'),
                                                'port' => '8080',                
                    );

 //varnish群组定义
 //对主机列表进行绑定
 $VAR_CLUSTER = array(
                         'www.westos.org'  => $var_group1,
                     );


 //varnish版本
 //2.x和3.x推送命令不一样
 $VAR_VERSION = "3";

?>
~        


4、修改端口号为8080


vim /etc/httpd/conf/httpd.conf
 136 Listen 8080
启动http服务
/etc/init.d/httpd start

5、将所有bansys的配置文件移动到aphache目录下

mv * ../

测试:

测试机
vim /etc/hosts
172.25.85.1 server1 www.westos.org bbs.westos.org


使用测试机访问cdn(vm1)服务器,可以看到cdn推送管理
172.25.85.1:8080

6、编写varnish的配置文件            

vim /etc/varnish/default.vcl

编写
acl westos{
"127.0.0.1";
"172.25.85.0"/24;      ##85段的IP允许
}

sub vcl_recv {
    if (req.request == "BAN"){
        if (!client.ip ~ westos){
            error 405 "Not allowed.";
        }
    ban("req.url ~ " + req.url);
        error 200 "ban added";
    }
}

重新加载varnish
/etc/init.d/varnish reload

测试:

测试机 访问 172.25.85.1:8080
发送模式:HTTP
cdn www.westos.org
推送内容: .*        ##清空缓存

在控制台

猜你喜欢

转载自blog.csdn.net/qq_41627390/article/details/86760125
今日推荐