准备工作
准备一台本机作为测试机,三台虚拟机:
server1:172.25.24.1
server2:172.25.24.2
server3:172.25.24.3
作为服务器
1.配置反向代理
VCL处理
处理过程大致分为如下几个步骤:
(1)Receive 状态,也就是请求处理的入口状态,根据 VCL 规则判断该请求应该是 Pass 或
Pipe,或者进入 Lookup(本地查询)。
(2)Lookup 状态,进入此状态后,会在 hash 表中查找数据,若找到,则进入 Hit 状态,否则进
入 miss 状态。
(3)Pass 状态,在此状态下,会进入后端请求,即进入 fetch 状态。
(4)Fetch 状态,在 Fetch 状态下,对请求进行后端的获取,发送请求,获得数据,并进行本地
的存储。
(5)Deliver 状态, 将获取到的数据发送给客户端,然后完成本次请求。
在代理服务器server1上
##安装varnish软件包
yum install varnish-3.0.5-l.e16.x86_64.rpm varnish-libs-3.0.5-l.e16.x86_64.rpm
##查看varnish配置文件,查看其工作环境
vim /etc/sysconfig/varnish
##向系统声明varnish所需的工作环境
vim /etc/security/limits.conf
varnish - nofile 131072
varnish - memlock 82000
varnish - nproc unlimited
##配置varnish服务
vim /etc/varnish/default.vcl
backend default {
.host = "172.25.24.2"; ##指定默认后台服务器为172.25.24.2
.port = "80"; ##指定连接端口为80
}
##配置varnish服务端口
vim /etc/sysconfig/varnish
VARNISH_LISTEN_PORT=80 ##第66行,修改端口为80
/etc/init.d/varnish restart ##重启varnish服务
在默认后台服务器server2上
##下载httpd服务并设置默认发布页内容为server2
yum install httpd -y
vim /var/www/html/index.html
server2:www.westos.org
/etc/init.d/httpd start
在测试机上:
##当我们访问172.25.24.1时,看到的是server2的网页,说明实验成功
[root@foundation24 ~]# curl 172.25.24.1
server2:www.westos.org
2.查看缓存命中的情况
在代理服务器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.X0Cache = "MISS from westos cache";
}
return (deliver);
}
/etc/init.d/varnish reload
##缓存的刷新:
varnishadm ban.url .*$ ##清除所有
varnishadm ban.url /index.html ##清除index.html网页缓存
varnishadm ban.url /admin/$ ##清除admin目录缓存
测试:
在测试机上
##可以从X0Cache:栏看出缓存情况
##X0Cache: MISS from westos cache 说明没有缓存
##X-Cache: HIT from westos cache 说明数据来源来自缓存
curl -I 172.25.24.1
##先在代理服务器上清楚缓存
curl -I 172.25.24.1/index.html
3.定义不同站点的后端服务器
通过域名反向代理会把你带到不同的后端服务器
在代理服务器上
vim /etc/varnish/default.vcl
backend web1 {
.host = "172.25.24.2";
.port = "80";
}
backend web2 {
.host = "172.25.24.3";
.port = "80";
}
##当访问 www.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 "error";
}
}
/etc/init.d/varnish reload
在后台服务器server3上
yum install httpd -y
vim /var/www/html/index.html
server3:bbs.westos.com
在测试端:
##配置本地解析
[root@foundation24 ~]# vim /etc/hosts
172.25.24.1 server1 www.westos.org bbs.westos.org westos.org
##通过域名反向代理会把你带到不同的后端服务器
[root@foundation24 ~]# curl westos.org
server2:www.westos.com
[root@foundation24 ~]# curl bbs.westos.org
server3:bbs.westos.com
4.负载均衡配置:
1)什么是负载均衡:
负载均衡(Load Balance)其意思就是分摊到多个操作单元上进行执行,例如Web服务器、FTP服务器、企业关键应用服务器和其它关键任务服务器等,从而共同完成工作任务。
2)负载均衡的作用:
(1)解决并发压力,提高应用处理性能(增加吞吐量,加强网络处理能力);
(2)提供故障转移,实现高可用;
(3)通过添加或减少服务器数量,提供网站伸缩性(扩展性);
(4)安全防护;(负载均衡设备上做一些过滤,黑白名单等处理)
3)负载均衡的搭建
在代理服务器上
[root@server1 varnish]# vim /etc/varnish/default.vcl
backend web1 {
.host = "172.25.24.2";
.port = "80";
}
backend web2 {
.host = "172.25.24.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 "error";
}
}
在server3服务器上
##配置两台httpd虚拟主机并分别设置两台虚拟主机默认发布页面信息
[root@server3 html]# mkdir /www
[root@server3 html]# cd
[root@server3 ~]# cd /www/
[root@server3 www]# vim index.html
server3:www.westos.org
[root@server3 www]# mkdir /bbs
[root@server3 www]# cd /bbs/
[root@server3 bbs]# vim index.html
server3:bbs.westos.org
##开启httpd虚拟主机功能
[root@server3 bbs]# vim /etc/httpd/conf/httpd.conf
990 NameVirtualHost *:80 ##开启虚拟主机
1003 <VirtualHost *:80>
1004 DocumentRoot /www
1005 ServerName www.westos.org
1006 </VirtualHost>
1007 <VirtualHost *:80>
1008 DocumentRoot /bbs
1009 ServerName bbs.westos.org
1010 </VirtualHost>
[root@server3 bbs]# /etc/init.d/httpd restart
在测试机上:
##访问www.westos.org网页可以看到访问的服务器是在server2与server3循环轮换的
[root@foundation24 ~]# curl www.westos.org
server2:www.westos.org
[root@foundation24 ~]# curl www.westos.org
server3:www.westos.org
[root@foundation24 ~]# curl bbs.westos.org
server3:bbs.westos.org
5.varnish cdn 推送平台
在代理服务器server1上:
##下载php,uzip,http服务并将推送平台压缩包解压到http共享目录下
[root@server1 ~]# yum install unzip php httpd -y
[root@server1 ~]# unzip bansys.zip -d /var/www/html/
[root@server1 ~]# cd /var/www/html/
[root@server1 html]# mv bansys/* .
##编辑php文件,只保留如下设置,其余注释掉
[root@server1 html]# vim config.php
<?php
//varnish主机列表
//可定义多个主机列表
$var_group1 = array(
'host' => array('172.25.24.1'),
'port' => '8080',
);
//varnish群组定义
//对主机列表进行绑定
$VAR_CLUSTER = array(
'www.westos.org' => $var_group1,
);
//varnish版本
//2.x和3.x推送命令不一样
$VAR_VERSION = "3";
?>
##bansys 有两种工作模式,分别是:telnet 和 http 模式。
##telnet 模式需要关闭 varnish 服务管理端口的验证,注释掉/etc/sysconfig/varnish 文件中的 “ -S $
{VARNISH_SECRET_FILE}”这行,重启 varnish 服务即可。
##如果是 http 模式需要对 varnish 做以下设置:
[root@server1 html]# vim /etc/varnish/default.vcl
acl westos {
#设置访问控制
"127.0.0.1";
"172.25.24.0"/24;
}
backend web1 {
.host = "172.25.24.2";
.port = "80";
}
backend web2 {
.host = "172.25.24.3";
.port = "80";
}
director lb round-robin {
{ .backend = web1;}
{ .backend = web2;}
}
sub vcl_recv {
if (req.request == "BAN") {
if (!client.ip ~ westos) {
error 405 "Not allowed.";
}
ban("req.url ~ " + req.url);
error 200 "ban added";
}
}
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 "error";
}
}
[root@server1 html]# /etc/init.d/varnish reload
进行推送:
(1)打开浏览器,访问172.25.24.1:8080端口
firefox
172.25.24.1:8080
(2)选择HTTP
(3)输入推送内容,并提交,推送成功:
/index.html
测试:通过CDN推送手动刷新缓存
(1)在测试机上:
##由于缓存功能开启所以在一定时间内访问www.westos.org/index.html得到的内容都是来自缓存
[root@foundation24 varnish]# curl www.westos.org/index.html
server2:www.westos.org
(2)在服务器server1上重新推送/index.html
(3)再在测试机上访问www.westos.org/index.html
##由于手动推送将缓存刷新,再次访问进入了其他的后台服务器
[root@foundation24 varnish]# curl www.westos.org/index.html
server3:www.westos.org