在不同地域的用户访问网站的相应速度存在差异,为了提高用户访问的相应
速度,优化现有internet中的信息流动,需要在用户和服务器之间加入中间层CDN,
是用户能以最快的速度从最近的地方获得所需的信息,加速解决网络的拥塞,提高
响应的速度,是目前大型互联网站使用的流行应用方案。
使用·Vanish实现CDA的节点集群
vanish的工作原理如下:
Varnish处理请求流程大致可以分为如下几个步骤:
1、首先当请求到达时,接受vcl_recv函数的检查,在这个函数中,可以执
行pass、pipe、lookup、error操作。
2、如果在vcl_recv函数执行lookup操作,则会在缓存中查看是否有该缓存对象。
如果有,则表示缓存命中,则在接受vcl_hit函数的检 查。在该函数下可以将缓
存对象直接返回给客户端,即执行deliver操作。也可以不使用本地缓存对象,
从后端服务器获取请求对象,即执行pass操作。 如果本地没有该缓存对象,则表
示缓存丢失,则会接受vcl_miss函数检查。该函数会从后端服务器获取最新资源,
即将会执行pass或fetch操作。
3、如果在vcl_recv函数执行pass操作,则表示不再本地缓存查找,直接从后端服务器
进行获取,即将会接受vcl_pass函数的检查。
4、如果在vcl_recv函数处执行pipe操作,则表示不再本地缓存中查找,并且客户端和
后端服务器建立管道,后续客户端的keep-alive连 接中的请求数据传输将在管道中进行,
并且请求数据接受vcl_pipe函数的检查。直到数据传输完成时关闭该管道连接。
5、当需要从后端服务器获取资源或数据时,需要调用vcl_fetch函数,并且根据某种条
件判断该数据或资源是否缓存在本地,即执行deliver操 作;或者直接将该资源返回给客
户端,不缓存在本地,即执行hit_for_pass操作 最后,不管是从本地缓存中响应的数据
还是从后端原始服务器获取到的数据返回给客户端都需要调用vcl_deliver函数来完成。
这里我们使用一台物理机和三台虚拟机进行实验
主机:172.25.68.250
server1:172.25.68.1 (使用varnish工具实现CDN的节点集群)
server2 172.25.68.2 (充当后台的服务器)
server3 172.25.68.3 (充当后台的服务器)
在varnish的缓存原理简单分为以下两种:
当varnish上灭有用户想要请求数据的缓存时
--------------------------------------------------------
Client -> dns -> cdn -> server -> cdn -> cache -> Client
当varnish 上具有用户的缓存时
--------------------------------------------------------
Client ->dns ->cdn ->cache -> Client
1、进行varnish软件的安装
yum install varnish-* -y ###进行varnish相关软件的安装
2、进行varnish监听端口的设定
vim /etc/sysconfig/varnish ###进行varnish监听端口的修改
3、进行主机安全限制文件的修改(保证流量大时,服务器可以正常工作)
打开文件的最大数:有如下关系:内核操作>操作系统>软件
内核允许的打开文件的最大数:
(1)、进行varnish打开文件数的查看
(2)、进行内存的修改,时内核打开的文件数大于varnish打开的软件数
(3)、进行主机安全的限制
vim /etc/security/limits.conf ###进行主机安全文件的配置
4、默认配置文件的修改和服务的开启和服务端口是否开启
vim /etc/varnish.default.vcl ###进行默认配置文件的编辑
/etc/init.d/varnish start ###进行服务的开启
netstat -tnlp ###进行端口的查看
在server2主机上进行httpd 软件的安装和服务的开启和默认发布文件的编辑
1、进行软件的安装和服务的启动
yum install httpd -y ###进行httpd 软件的安装
/etc/init.d/httpd start ###进行软件服务的开启
2、进行默认发布文件的编辑
vim /var/www/html/index.html ###进行默认发布文件的编辑
在server1中:
1、在配置文件中进行相应的设定进行服务的重新加载
vim /etc/varnish/default.vcl ###进行配置文件的编辑
/etc/init.d/varnish reload ###进行varnish的重新加载
2、进行是否击中的测试
curl -I 172.25.68.1 ###进行是否击中的查看
varnishadm ban.url .*$ ###进行缓存的清除
当用户进行第一次访问时:没有缓存(可以看到没有进行击中)
当用户进行第二次访问时:此时具有缓存,(可以看到被击中)
3、在真机上进行本地解析的设定,查看使用域名是否击中的测试
vim /etc/hosts ###进行本地解析的设定
curl -I www.westos.org ###通过域名进行服务器的访问,查看是否击中
第一次进行访问时,没有缓存,没有击中:
进行第二次访问时,已经具有了缓存,结果击中
注意的是:缓存存在的时间为120s,我没可以在配置文件可以进行设定
我们可以通过varnishadm进行手动清除缓存
在varnish服务端(server1)进行缓存的清除,然后在客户端进行测试
varnishdam ban.url .*$ :清除所有的缓存
varnishdam ban.url /index.html :清除页面的缓存
1、进行Varnish配置文件的编辑
vim /etc/varnish/default.vcl ###进行配置文件的编辑
/etc/init.d/varnish reload ###进行服务的重新加载
2、在真机上进行本地解析的设定
3、在server3上进行apache软件的安装和默认发布文件的编辑
yum install httpd -y ###进行apache软件的安装
vim /var/www/html/index.html ###进行默认发布文件的编辑
/etc/init.d/httpd start ###进行apache软件的启动
4、在真机上进行相关的测试:
当访问其他的页面时进行报错:
我们可以观察到:通过不同的域名进行访问时,varnish会根据不同的
域名访问不同的服务器
1、在Varnish配置文件中进行相关的设定
2、在server3进行相关的配置
(1)进行apache配置文件的修改
vim /etc/httpd/conf/httpd.conf ###进行apache配置文件的编辑
(2)进行发布目录和文件的建立
mkdir /www /bbs ###进行发布目录的建立
vim /www/index.html ###进行发布文件的编辑
vim /bbs/index.html ###进行发布文件的编辑
(3)进行服务的重启和Varnish服务的重新加载
/etc/init.d/httpd restart ###进行服务的重启
/etc/init.d/varnish reload ###进行服务的重新加载
3、在真机上进行相关的测试
通过测试我们可以看到:在主机进习www.westos.org时,实现负载均衡的轮询
,当访问bbs.westos.org时,访问指定的服务器的特定的资源,与配置文件所设定的
一致。
在server1中
1、进行相关软件的下载
2、进行压缩包的解压(这里我们不介绍解压过程)
unzip bansys.zip -d /var/www/html ###进行压缩包的解压
ls /var/www/html ###进行压缩包解压之后结果的查看
3、对配置文件进行编辑
vim /rvar/www/html/config.conf ###进行配置文件的编辑
4、进行httpd服务端口的改变(因为varnish已经占用了80端口)
vim /etc/httpd/conf/httpd.conf ###进行httpd配置文件的编辑
5、对varnish配置文件进行编辑
vim /etc/varnish/default.vcl ###进行varnish配置文件的编辑
6、进行httpd服务的重启和varnish服务的重新加载
/etc/init.d/httpd restart ###进行httpd服务的重启
/etc/init.d/varnish reload ###进行服务的重新加载
7、进行测试
在真机的浏览器中:172.25.68.1:8080
(1)这里我们选择httpd进行推送,设定的为8080端口
推送内容为:.*$(用于缓存的清除)
查看缓存信息是否被清除:通过curl www.westos.org 进行是否击中测定,
通过测试,可以看到缓存已经被清除
(2)如果选择talnet模式,则需要如下配置
telnet 模式需要关闭 varnish 服务管理端口的验证,
注释掉/etc/sysconfig/varnish 文件中的 “ -S ${VARNI
SH_SECRET_FILE}”这行,重启 varnish 服务即可
8、在真机上进行相关的测试
通过推送清除进行再次访问时,可以看到缓存已经被清除