一.用户在浏览器访问网址的第一步:client------>cdn
cdn缓存:
- 缓存的时间:缓存更新的时间
- 缓存什么东西:有选择的进行缓存,降低数据库的压力,缓存热点数据
- 访问量体现:缓存在内存里,有很多内容是从缓存中读取的
- 命中率(hit):(hit)/(hit+miss),命中率越高,访问的人越多
- 缓存对象:有生命周期,会定时清理
- 缓存空间耗尽:会删除以前的,依据LUR即最近最少使用的缓存
- URL---->查询缓存---->新鲜度检测---->发送响应---->记录到日志
二.部署单个后端服务器的varnish,用varnish实现反向代理
server1:作为varnish服务器,用作代理
server2:被访问的后端主机
server3:被访问的后端主机
第一步 在server1上安装varnish
安装成功后查看配置文件
[root@server1 ~]# rpm -qc varnish-3.0.5-1.el6.x86_64
/etc/logrotate.d/varnish
/etc/sysconfig/varnish
/etc/varnish/default.vcl
第二步 查看配置文件中对系统配置的要求
查看系统配置
分别查看系统文件数和系统内存信息
第三步升级系统配置
[root@server1 ~]# sysctl -a | grep file
fs.file-nr = 384 0 188468
fs.file-max = 188468
[root@server1 ~]#
注意:varnish系统需要的资源系统满足不到,因此要让它受到限制,营造假象
varnish开启的时候会有两个进程,一个root,还有本身
第四步 添加信息(造成varnish已经获得了软件自身需求的假象)
vim /etc/security/limits.conf
在文件中添加
varnish - nofile 131072
varnish - memlock 82000
varnish - nproc nproc
第五步 修改通过代理服务器要访问的主机
vim /etc/varnish/default.vcl
第六步 修改端口
vim /etc/sysconfig/varnish
第七步 重启服务
[root@server1 ~]# /etc/init.d/varnish restart
Stopping Varnish Cache: [ OK ]
Starting Varnish Cache: [ OK ]
第七步 在server2上安装apache服务
yum install -y httpd #安装http
vim /var/www/html/index.html #撰写默认发布页
/etc/init.d/httpd start #启动服务
[root@server2 ~]# vim /var/www/html/index.html
[root@server2 ~]# /etc/init.d/httpd start
Starting httpd: httpd: Could not reliably determine the server's fully qualified domain name, using 172.25.61.2 for ServerName
[ OK ]
第九步 测试
在真机上测试
[root@foundation61 yasuo]# curl 172.25.61.1
<h1>This is server2 page</h1>
第十步 查看缓存命中情况
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 ##重新加载配置
第十一步 测试
第一次MISS
第二次HIT
注意:
通过 varnishadm 手动清除缓存
varnishadm ban.url .*$
#清除所有
varnishadm ban.url /index.html
#清除 index.html 页面缓存
varnishadm ban.url /admin/$
#清除 admin 目录缓存
再次操作可看到MISS from westos cache
三.部署具有多台后端服务器的varnish
1.打开server3虚拟机,配置ip,主机名,安装httpd服务
2.将两个测试网址解析到物理主机中
172.25.61.1 server1 www.west.org bbs.west.org
3.配置文件
vim /etc/varnish/default.vcl
****
backend web1 {
.host = "172.25.61.2";
.port = "80";
}
backend web2 {
.host = "172.25.61.3";
.port = "80";
}
sub vcl_recv {
if (req.http.host ~ "^(www.)?west.org") {
set req.http.host = "www.west.org";
set req.backend = web1;
return (pass);
} elsif (req.http.host ~ "^bbs.west.org") {
set req.backend = web2;
} else {error 404 "west cache";
}
}
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 #重新加载配置
4.测试:在真机中
四.varnish后端服务器的负载均衡
1.在server3中编写配置文件(建立虚拟主机)
vim /etc/httpd/conf/httpd.conf
990 NameVirtualHost *:80 #开启端口
1012 <VirtualHost *:80>
1013 DocumentRoot /www
1014 ServerName www.west.org
1015 </VirtualHost>
1016
1017 <VirtualHost *:80>
1018 DocumentRoot /bbs
1019 ServerName bbs.west.org
1020 </VirtualHost>
2.编写http发布页
23 mkdir /www /bbs
24 cd /www/
25 vim index.html
26 cd /bbs/
27 vim index.html
在varnish主机server1的defaults文件中写入负载均衡函数
director lb round-robin {
{ .backend = web1; }
{ .backend = web2; }
}
sub vcl_recv {
if (req.http.host ~ "^(www.)?westos.org") {
set req.http.host = "www.west.org";
set req.backend = lb; #轮询
return (pass);
} elsif (req.http.host ~ "^bbs.west.org") {
set req.backend = web2;
} else {error 404 "westos cache";
}
}
4.测试:
[root@foundation61 ~]# curl www.west.org
<h1>This is server2 page</h1>
[root@foundation61 ~]# curl www.west.org
<h1>server3 - www.west.org</h1>