Table of Contents
1. varnish下载与安装
安装包网上都可以搜索到,这里我就不赘余介绍了,这里我已经将其放在Apache默认发布目录下,直接通过lftp连接,使用get下载
将.rpm文件下载好后,就可以直接安装了,步骤很简单,就不详细介绍了,直接贴图
2. 配置varnish
- 查看配置文件
rpm -qc varnish-6.3.1-1.el7.x86_64 # 查看varnish配置文件
- 查看varnish启动脚本
vim /usr/lib/systemd/system/varnish.service
最大文件数131072,默认内存限制82MB
- 查看系统打开最大文件数
sysctl -a | grep file-max
最大文件数是97757,很明显无法满足varnish,这种情况下我们可以通过增加主机内存或将varnish最大文件数改小。
- 查看系统内存限制
系统内存限制为64,明显小于varnish的82
vim /etc/security/limits.conf
- 启动服务,查看端口
systemctl start varnish
netstat -antuple | grep varnish
3. varnish使用
反向代理
- 修改端口
这里改为80端口,因为要做http服务端代理,http默认访问80端口,不影响客户感知
- 在浏览器访问node1
以发现,可以访问到varnish,现阶段因为当前服务端还没有数据
- 配置varnish,将请求交给node2的80端口
vim /etc/varnish/default.vcl
但是node2主机当前还没有80端口
- 在node2上配置httpd服务,启用80端口
再次访问浏览器,会发现已经获取到node2上的内容
也就是说我们在访问node1时,请求被调度到node2上,因此访问到的是node2中的内容
缓存
修改varnish配置,添加返回信息(http)并说明是 读取缓存 还是 新数据
vim /etc/varnish/default.vcl
重启服务
systemctl restart varnish
- 访问node1
这是我们第一次访问,因此没有命令缓存, 显示的是MISS from varnish cache。
- 再次访问node1
从第二次访问开始,内容都是从缓存中读取的,不需要再次重新从源服务器获取。
默认120s自动清理缓存
- 手动清理缓存
varnishadm ban req.url "~" /
varnishadm ban req.url "~" /index.html
# / 表示所有缓存
# / index.html 只表示这个页面
清理完缓存后,我们再来看看效果
请求转发
添加一个服务器node3,编辑请求转发模块,请求都是从node1发出的,经过调度均分到node2或者node3:
- 当访问 xxx.dsd.org 时转化为 www.dsd.org,访问的服务器是web1
- 当访问 bbs.dsd.org 时访问的服务器是web2
- 如果访问的是其他域名,报错
重启varnish
- 在node3安装并开启httpd服务,并修改默认发布页面
- 编辑本地解析文件
vim /etc/hosts
- 测试
原理:根据请求不同的域名,访问不同的后端,运用到实际生活就是功能分类使用
负载均衡
通过负载均衡,使得服务器轮循的接受请求
- 寻找所需库文件
- 编辑varnish配置文件
- backend:定义好两个后端
- 初始化:round_robin()表示轮循接受
- 定义请求转发:当访问 www.dsd.org 时,会轮循访问两个服务器
- 要求不缓存:因为会产生缓存,没有办法看到实际的轮循效果,在这里设置不缓存
访问 www. dsd.org 时会做负载均衡分配给 node2 和 node3,而 bbs.dsd.org 未做负载均衡
CDN推送
- 下载安装bansys.zip
因为下载文件需要解压,并且其内容是由php书写,为了方便读取,我们将其解压在Apache共享目录下,因此我们直接安装unzip、php和httpd
- 编辑配置文件并修改端口号
vim /var/www/html/bansys/config.php
vim /etc/httpd/conf/httpd.conf
- 访问node1的8080端口
这个时候所有人都能访问。但是在实际生活中,只能让部分管理员有权限去推送,这就需要去做权限管理
vim /etc/varnish/default.vcl
- 编辑一个acl,用来插入允许访问的ip
- 在recv中添加和php通信部分
当前有缓存,推送 .* 来清除缓存
除此之外,也可以通过 /index.html 指定推送一个页面,方法一样,就不作列举