说明:以下主机实验环境selinux状态为disaled,firewalld为关闭状态,处于同一网段(172.25.254.0/24)
1、varnish安装配置
(1)varnish安装
从官网上下载获取到varnish安装包和varnish所依赖的安装包后,直接yum安装
(2)varnish配置
相关文件
/usr/lib/systemd/system/varnish.service ##启动脚本文件
/etc/ld.so.conf.d/varnish-x86_64.conf ##配置文件
/etc/logrotate.d/varnish ##环境信息
/etc/varnish/default.vcl ##用来编写vcl语法的
启动脚本文件信息说明和配置更改
1.允许最大可以打开的文件数(系统允许打开的最大文件数是97766,用sysctl -a | grep file查看,和varnish不一致)
可以更改varnish里面的数或者增加内存
2.内存锁定,运行varnish时,需要82M内存空间(系统当前允许的是64,可用ulimit -a命令查看)
3.TasksMax=infinity不限制任务并行数
4.启动的执行脚本 -a开启的端口;-f指定的配置文件;-s做一个内存锁定
默认端口是6081,改为80;-T指定命令行接口的端口,varnish也可以用命令行去管理
编辑/etc/security/limits.conf文件
在文件末加上以下两行内容,系统允许的可以打开的最大文件数和内存
varnish - nofile 131702 ##默认打开文件数
varnish - memlock 82000 ##内存锁定82M
更改完之后开启varnish服务
测试:在浏览器上访问本机172.25.254.1,当前服务端上没有任何数据,所以会报503错误
varnish配置单后端
第一步:编辑/etc/varnish/default.vcl文件,将backend default语句块中内容改写为下图所示,表示在你访问varnish时把你的请求转交给172.25.254.2这台主机(server2)
第二步:在server2主机上装httpd服务,编写默认发布页面作为访问标识,启动httpd
第三步:
测试:当用户访问到varnish这台主机(cdn),它会把请求转交给server2,相当于做了一个反向代理
2、varnish查看和清除缓存
varnish查看缓存
编辑/etc/varnish/default.vcl文件,在vcl_deliver语句块中写入以下内容如下图所示,
代码释义:如果命中缓存了(大于0)返回"HIT from westos cache",表示这个数据是从缓存中读取的;否则,这个数据不是从缓存中读取的,返回"MISS from westos cache",是从后端源服务器中读取的(第一次访问都是这样)
测试:在物理机上进行
第一次访问时是没有命中缓存的,因为这个数据cdn也没有,当你再次访问,从第二次访问开始数据都是从varnish缓存中读取的
第一次是从源服务器中获取数据的,数据在server2上,server1发现你访问的页面server1上没有,它就去server2上获取,并把数据缓存到自己本机,然后再返回给用户,下次用户再访问时它就直接把自己的数据返回给用户
注意:
这个缓存有固定的清理时间,缓存是有时间限制的,默认是120s清理一次缓存
varnish清除缓存
手动清理缓存命令
[root@server1 ~]# varnishadm ban req.url "~" / ##清理所有
[root@server1 ~]# varnishadm ban req.url "~" /index.html ##清理index.html页面
[root@server1 ~]#
清理缓存之后,当你再次访问时返回的就不是命中缓存,而是返回"MISS from westos cache"
3、varnish配置多后端
根据用户请求的不同域名,访问到不同的后端服务器上
在单后端实验基础上再定义一个后端服务器分摊访问请求,
在server3主机上装httpd服务,编写默认发布页面作为访问标识,启动httpd
编辑/etc/varnish/default.vcl文件,在backend和vcl_recv语句块中写入以下内容如下图所示,重启varnish
测试:在物理机上进行
curl www.westos.org所获取的数据是web1上的资源,curl bbs.westos.org所获取的数据是web2上的资源
4、varnish配置负载均衡
负载均衡简意:在上边实验的基础上让这两台服务器轮循的接受请求
编辑/etc/varnish/default.vcl文件,需要导入调度器模块,写入以下内容如下图所示,重启varnish
vcl 4.1;
import directors from "/usr/lib64/varnish/vmods/libvmod_directors.so"; ##导入调度器模块
backend web1 {
.host = "172.25.254.2";
.port = "80";
}
backend web2 {
.host = "172.25.254.3";
.port = "80";
}
##在web1和web2之间实现负载均衡
sub vcl_init {
new lb = directors.round_robin(); ##轮循的负载均衡模式
lb.add_backend(web1);
lb.add_backend(web2);
}
sub vcl_recv {
if (req.http.host ~ "^(www.)?westos.org") {
set req.http.host = "www.westos.org";
set req.backend_hint = lb.backend(); ##访问web1时去轮循web2
return (pass); ##所有信息不缓存,也可以手动的去清理缓存
} elsif (req.http.host ~ "^bbs.westos.org"){
set req.backend_hint = web2; ##访问web2时不负载均衡
} else {
return (synth(405));
}
}
测试:
curl www.westos.org,访问此域名时,负载均衡(轮循)
curl bbs.westos.org,访问此域名时,没有负载均衡,只有web2(server3)提供资源
5、varnish统一推送平台构建
推送平台的配置(图形化界面清理缓存)
首先添加一个访问控制列表,然后再去添加一个缓存的清除策略
server1作varnish的节点,server2和server3作为apache服务的提供节点
推送平台是要在varnish节点配置,配置推送平台的目的是为了更方便的进行缓存的清除,批量对我们主机进行缓存清除
实验:
在server1主机上安装httpd、php和unzip安装包
获取推送页面的软件包
解压到apache目录下
统一平台推送的配置
vim /var/www/html/config.php,改ip为varnish主机ip,apache端口为8080(因为80端口被varnish占用)
域名改为www.westos.org(对此域名的数据进行缓存处理)
varnish配置
设置代理服务器的权限列表:主机本身和172.25.254.0/24网段的主机都有权限清理代理服务器上的缓存
acl westos {
"127.0.0.1";
"172.25.254.0"/24;
}
sub vcl_recv {
if (req.http.host ~ "^(www.)?westos.org") {
set req.http.host = "www.westos.org";
set req.backend_hint = lb.backend();
# return (pass); ##注释掉,辞行代码会一直清除缓存,若生效,影响此试验效果
} elsif (req.http.host ~ "^bbs.westos.org"){
set req.backend_hint = web2;
} else {
return (synth(405));
}
if (req.method == "BAN") { ##此语句块是用来和php进行通信的
if (!client.ip ~ westos) {
return(synth(405,"Not allowed"));
}
ban("req.url ~ " + req.url); ##表示清除缓存,首先判断
return(purge);
}
}
在物理机上测试
.*清除所有缓存
/index.html指定清除哪个缓存
已经缓存,在推送成功后,用户再访问时,未命中,不是从缓存中获取的数据