Linux运维之CDN缓存服务(varnish)
- 什么是CDN
CDN的全称是Content Delivery Network,即内容分发网络。CDN是构建在网络之上的内容分发网络,依靠部署在各地的边缘服务器,通过中心平台的负载均衡、内容分发、调度等功能模块,使用户就近获取所需内容,降低网络拥塞,提高用户访问响应速度和命中率。CDN的关键技术主要有内容存储和分发技术。
CDN的基本原理是广泛采用各种缓存服务器,将这些缓存服务器分布到用户访问相对集中的地区或网络中,在用户访问网站时,利用全局负载技术将用户的访问指向距离最近的工作正常的缓存服务器上,由缓存服务器直接响应用户请求
基本思路是尽可能避开互联网上有可能影响数据传输速度和稳定性的瓶颈和环节,使内容传输的更快、更稳定。通过在网络各处放置节点服务器所构成的在现有的互联网基础之上的一层智能虚拟网络,CDN系统能够实时地根据网络流量和各节点的连接、负载状况以及到用户的距离和响应时间等综合信息将用户的请求重新导向离用户最近的服务节点上。其目的是使用户可就近取得所需内容,解决 Internet网络拥挤的状况,提高用户访问网站的响应速度。
- 什么是varnish
Varnish是一款高性能的开源HTTP加速器,挪威最大的在线报纸 Verdens Gang 使用3台Varnish代替了原来的12台Squid,性能比以前更好
Varnish与一般服务器软件类似,分为master(management)进程和child(worker,主要做cache的工作)进程。master进程读入命令,进行一些初始化,然后fork并监控child进程。child进程分配若干线程进行工作,主要包括一些管理线程和很多woker线程。
- varnish部署实验环境准备
用rhel7.3版本的封装好的母盘生成三个快照虚拟机
server1:ip为172.25.13.1 ,作为varnish主机
server2:ip为172.25.13.2,作为后端服务器
server3:ip为172.25.13.3 ,作为后端服务器
测试主机:ip为172.25.13.250
rpm安装包:
install -y varnish-4.0.5-1.el7.x86_64.rpm
varnish-libs-4.0.5-1.el7.x86_64.rpm
jemalloc-3.6.0-1.el7.x86_64.rpm
bansys.zip cdn推送平台
- 配置varnish缓存反向代理
把准备好的的varnish安装包发送到虚拟机server1的root用户的~目录
在server1安装varnish软件及其依赖性文件
并查看相关配置文件
yum install -y varnish-4.0.5-1.el7.x86_64.rpm varnish-libs-4.0.5-1.el7.x86_64.rpm jemalloc-3.6.0-1.el7.x86_64.rpm -y
rpm -qc varnish-4.0.5-1.el7.x86_64.rpm
rpm -qc varnish-4.0.5-1.el7.x86_64
/etc/logrotate.d/varnish
/etc/varnish/default.vcl
/etc/varnish/varnish.params
查看varnish的主配置文件,更改系统配置
vim /usr/lib/systemd/system/varnish.service
14 最大访问文件数量
18 运行占用的内存
查看本机系统最大文件访问数量
sysctl -a | grep file
由于系统最大文件访问数量不满足varnish要求,所以此时更改虚拟机配置,增加内存至2048M
全局临时设定:
ulimite -a ##查看
ulimite -l 82 ##全局临时设定
编辑varnish用户的限制文件(与varnish配置文件中限制相对应)
vim /etc/security/limits.conf
更改varnish接受请求的端口号
vim /etc/varnish/varnish.params
重启varnish服务
systemctl restart varnish
查看vainish调度主机
ps -aux
cd /proc/2136
ls
cat status
- 添加varnish的调度主机
配置一个后端服务器并重启服务
vim /etc/varnish/default.vcl
systemctl restart varnish
测试:
在server2安装httpd服务
并且写入一个网页 this is server2
在真机测试访问172.25.13.1
发现是server2的网页
- cdn缓存的测试与清除
deliver:缓存取到的对象,并发送至服务端
vcl_deliver
在缓存数据将要发送到客户端时调用
vim /etc/varnish/default.vcl
systemctl restart varnish
清除cdn缓存
varnishadm ban req.url "~" /
varnishadm ban req.url "~" /index.html
- 定义不同域名站点的后端服务器
再此开启一台虚拟机servers,安装 httpd
并写入网页this is server3
vim /etc/varnish/default.vcl
systemctl restart varnish
测试:
在真机上测试,发现输入不同的域名得到不同的网页
- varnish后端服务器的负载均衡
现象:通过varnish缓存服务器访问后段服务器时,如果同一时间访问人数过多,则会使后端服务器瘫痪,因此设定后端服务器的负载均衡来达到轮询访问的母的
man vmod_directors ##查看相关模块说明
vim /etc/varnish/default.vcl
systemctl restart varnish
测试:
在真机上测试,发现访问同一域名,两个后端服务器相互接替被访问
- varnish cdn 推送平台
在 server3 上配置 apache 虚拟主机
手动建立两个目录,并写好 index.html
原因:当前 server3 上以 www.westos.org 访问和bbs.westos.org 访问看到的是同一个资源
vim /etc/httpd/conf.d/vhost.conf
systemctl restart httpd
测试:
在真机上测试,发现访问bbs与www 不同的域名得到的网页不一样,但是访问主网站www仍会轮询
- 配置推送平台
什么是 CDN 推送
当后端服务器中的内容有更新的时候,在 varnish 的缓存中应该及时地同步后端服务器中的内容。相当于清空varnish 中的缓存,当下一次进行访问时,直接从服务器中获取新的内容。
配置步骤:
在varnish服务器server1上安装相关软件(自行下载)
首先安装 解压命令
解压到/var/www/html
编辑php文件
由于80端口被varnish占用,因此更改http接口为8080
vim /etc/httpd/conf/httpd.conf
systemctl restart httpd
测试:
打开真机浏览器输入http:172.25.13.1:8080
在varnish服务器server1上
注释掉之前编写的负载均衡
并重新编写
vim /etc/varnish/default.vcl
systemctl restart varnish
选择http,并输入.*推送所有页面
点击确认推送
推送成功
END