linux企业学习二——加速器Varnish的部署

一、Varnish简介

Varnish 是一款高性能且开源的反向代理服务器HTTP加速器,其采用全新的软件体系机构,和现在的硬件体系紧密配合,与传统的squid 相比,varnish 具有性能更高、速度更快、管理更加方便等诸多优点,很多大型的网站都开始尝试使用 varnish 来替换 squid,这些都促进varnish 迅速发展起来。

二、Varnish工作原理图

http://ossi4.51cto.com/attachment/201409/25/8886857_1411663525qP7d.png

vcl_recv:是在Varnish完成对请求报文的解码为基本数据结构后第一个要执行的子例程

vcl_fetch:根据服务器端的响应作出缓存决策

vcl_pipe:用于将请求直接发往后端主机

vcl_hash:自定义hash生成时的数据来源

vcl_pass:用于将请求直接传递至后端主机

vcl_hit:从缓存中查找到缓存对象时要执行的操作

vcl_miss:从缓存中款查找到缓存对象时要执行的操作

vcl_deliver:将用户请求的内容响应给客户端时用到的方法

vcl_error:在varnish端合成错误响应而时

三、配置Varnish服务器

server2上

1.下载安装Varnish软件包

现在你的虚拟机可能连不上网,你可以在真机下载,然后scp过去,但是会出现下面问题

现在就需要在虚拟机一个openssl-clients这个软件,然后就可以了

2.修改varnish的监听端口

vim /etc/sysconfig/varnish 

3.修改配置文件

打开文件的最大数,有如下关系内核操作> 操作系统> 软件
内核允许的打开文件最大数

但是varnisg软件的打开文件最大数

因为默认数量大于内核操作的文件数,所以要将默认数量改小一点

[root@server2 varnish]# vim /etc/sysconfig/varnish 
NFILES=65535

还要修改内存空间和线程数,文件数应该介于上述两者之间

[root@server2 varnish]# vim /etc/sysconfig/varnish 
MEMLOCK=82000
NPROCS="unlimited"

可修改:

server3网络服务器

安装httpd服务,并开启服务

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

在server3上vim /var/www/html/index.html

在sserver2上,修改varnish监听网络服务器的ip

vim /etc/vanish/default.val

刷新varnish

检测:在浏览器中输入172.25.66.3/index.html

手动清除缓存

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

四、查看缓存命中情况

1、server2: 在varnish配置文件(/etc/varnish/default.vcl)中添加如下代码:

vim /etc/varnish/default.vcl
backend default {
  .host = "172.25.1.2";      # 后端服务器的ip
  .port = "80";              # 后端服务器的端口
}
sub vcl_deliver {
if (obj.hits > 0) {
set resp.http.X-Cache = "HIT from westos cache";    #在varnish中命中HIT访问的域名
}
else {
set resp.http.X-Cache = "MISS from westos cache";    #后端服务器中得到MISS访问的域名
}
return (deliver);
}

2、重新加载默认文件

/etc/init.d/varnish reload 

3、在物理机中添加www.westos.org的解析

172.25.66.2    www.westos.org

4、在物理机中测试: curl -I www.westos.org

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

此实验需要一台varnish主机(server2),还有两台虚拟机(server3,server4)

1、在server4的httpd服务的默认发布目录下编辑文件(/var/www/html/index.html)

bbs.westos.com

2、将bbs解析到物理主机中

172.25.66.2    bbs.westos.org

3、配置varnish的配置文件(vim /etc/varnish/default.vcl)

backend web1 {     # 后端第一个服务器名web1
  .host = "172.25.1.2";   
  #将server2 www.westos.org作为第一个服务器主机
  .port = "80";
}
backend web2 {     # 后端第二个服务器名web2
.host = "172.25.1.3"
#将server3 bbs.westos.org作为第二个服务器主机
  .port = "80";
}

sub vcl_recv {
if (req.http.host ~ "^(www.)?westos.org") {     
# 解析域名是westos.com 或www.westos.com,均访问172.25.1.2->server2
set req.http.host = "www.westos.org";
set req.backend = web1;
} elsif (req.http.host ~ "^bbs.westos.org") {   
# 解析域名为bbs.westos.com,访问172.25.1.3->server 3
set req.backend = web2;
} else {error 404 "westos cache";   
# 如果访问的域名不是这三者,404的错误
}
}

4、重新加载varnish

5、在物理机中测试

六、基于多台服务器的负载均衡

1、什么是负载均衡

负载均衡(Load Balance,简称LB)是一种服务器或网络设备的集群技术。负载均衡将特定的业务(网络服务、网络流量等)分担给多个服务器或网络设备,从而提高了业务处理能力,保证了业务的高可用性。
负载均衡算法的种类有很多种,常见的负载均衡算法包括轮询法、随机法、源地址哈希法、加权轮询法、加权随机法、最小连接法等,应根据具体的使用场景选取对应的算法。在varnish中我们采用的是轮询法,平衡对待么一个后端服务器。

2、在server2上配置varnish

backend web1 {
  .host = "172.25.66.3";
  .port = "80";
}
backend web2 {
  .host = "172.25.66.4";
  .port = "80";
}
director lb round-robin {    #采用round-robn算法:一种以轮询的方式依次将一个域名解析到多个IP地址的调度不同服务器的计算方法
{.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";
        }
}

2、在serveer3的httpd服务的默认发布目录中写入www.westos.org-server3

在server4的httpd服务的默认分布目录中写入www.westos.org-server4

3、后台服务器的配置(server4)

vim /etc/httpd/conf/httpd.conf
#打开80端口
NameVirtualHost *:80
#在默认文件最后添加
<VirtualHost *:80>
    DocumentRoot /var/www/html
    ServerName bbs.westos.org
</VirtualHost>
<VirtualHost *:80>
    DocumentRoot /www
    ServerName www.westos.org
</VirtualHost>

/etc/init.d/httpd restart
mkdir /www
vim /www/index/html

添加本地解析(vim /etc/hosts)

4、server3这台后台服务器的配置

5、在主机中测试

curl www.westos.org    #交替出现server2和server3中默认发布内容,将其中一个用户关闭,则另一个用户继续抓取信息的工作,实现负载均衡,使其关闭的方法是关闭http服务,清除缓存即可

 在网页上测试:

刷新网页

如果第一次出现server2(server3),那么120秒内都是server2(萨尔ver),因为server2(server3)将数据进行了缓存;
如果访问时间大于120s,它会出现server3(server2)(因为负载均衡采用的算法是平衡轮叫,server2和server3是公平地被访问的)
如果在默认函数中写上return(pass),那么它每次都直接从后端服务器中直接取,一次server2一次server3
如果server2或者server3其中一个损坏(关闭htpd服务),那么客户端只会访问健康的那一个,不会访问坏的哪一个,即负载均衡的健康检查。

 当server4的后台网络服务器挂掉之后,就自动server3这台服务器

七、搭建CDN推送平台

1、CDN 的概念

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

2、CDN推送的步骤

1.在server1安装httpd服务并编辑httpd配置文件,将136行的端口号修改8080(因为我们的varnish服务已经占用了80端口,避免冲突)
2.安装php(显示页面)
3.将banzip从物理机发送到server1,并在server1解压到/var/www/html(指定目录解压 -d)
5.将/var/www/html中的所有东西移到/var/www/html中
6.编辑config.php

1)将httpd服务的端口号改成8080,以防和varnish冲突

[root@server2 ~]# vim /etc/httpd/conf/httpd.conf

2)下载bansys安装包:http://code.google.com/p/varnish-php-bansys/

安装解压软件:yum install unzip  -y

开始解压:unzip bansys.zip

将解压后的文件放到apache的默认发布目录中(/var/www/html/)

3)修改配置文件

[root@server2 html]# vim config.php

<?php

 $var_group1 = array(
                        'host' => array('172.25.66.2'),
                                                'port' => '80',                                 
                    );
                                                

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


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

?>

4)开启httpd服务

[root@server2 html]# /etc/init.d/httpd start

5)浏览器访问

6)编写varnish的默认文件vim /etc/varnish/default.vcl

acl westos {
#设置访问控制,即就是白名单,允许本机和172.25.66网段和推送
"127.0.0.1";    #本机的IP
"172.25.66.0"/24;    #24是子网掩码
}
backend web1 {
  .host = "172.25.66.3";
  .port = "80";
}
backend web2 {
  .host = "172.25.66.4";
  .port = "80";
}
director lb round-robin {
{.backend = web1;}
{.backend = web2;}
}
sub vcl_recv {
if (req.request == "BAN") {    #如果采用的推送方式是BAN
if (!client.ip ~ westos) {    #如果客户端的IP不是westos
error 405 "Not allowed.";
}
ban("req.url ~ " + req.url);
error 200 "ban added";
}
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";
        }
}

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

重启httpd服务:/etc/init.d/httpd restaart

测试:在浏览器中访问172.25.66.2:8080,在推送内容中输入想要更新的页面,选择HTTP

 

 

 

 

 

 

 

 

 

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值