Varnish
Varnish是一款高性能的开源HTTP加速器,HTTP反向的代理
按照HTTP协议的处理过程,web服务器接受请求并且返回处理结果,理想情况下服务器要在不做额外处理的情况下,立即返回结果,但实际情况并非如此。
web服务器的实现千差万别,但典型的处理过程是相同的,都要经过一系列的步骤来处理接收到的每个请求。有可能需要启动一个进程来处理请求,有可能需要从磁盘上载入文件,或者启动内部线程来编译执行一些脚本。在执行脚本的过程中,还会有进行很多别的动作,比如进行数据库查询,读取文件等等。当成百上千个请求并发访问时,服务器的负载会很快上升,出现系统资源不够的情况。一种更糟的情况是,很多请求是重复的,但web服务器无法记住曾经作出的响应,还会重复上面复杂的处理过程。
当把Varnish部署上之后,web请求的处理过程会有一些变化。客户端的请求将首先被Varnish接受。Varnish将分析接收的请求,并将其转发到后端的web服务器上。后端的web服务器对请求进行常规的处理,并将依次将处理结果返回给Varnish。
但Varnish的功能并非仅限于此。Varnish的核心功能是能能将后端web服务器返回的结果缓存起来,如果发现后续有相同的请求,Varnish将不会将这个请求转发到web服务器,而是返回缓存中的结果。这将有效的降低web服务器的负载,提升响应速度,并且每秒可以响应更多的请求。Varnish速度很快的另一个主要原因是其缓存全部都是放在内存里的,这比放在磁盘上要快的多。诸如此类的优化措施使得Varnish的相应速度超乎想象。但考虑到实际的系统中内存一般是有限的,所以需要手工配置一下缓存的空间限额,同时避免缓存重复的内容。
部署varnish服务
1,配置好自己的虚拟机以及自己的快照
server1 #varnish主机
server2 #后端服务器
主机作为客户机
2,server1做配置
yum install -y jemalloc-3.6.0-1.el7.x86_64.rpm varnish-6.3.1-1.el7.x86_64.rpm
#安装varnish以及解决他的依赖性
rpm -qc varnish
#查看varnish相关的配置文件
安装完成会自动生成varnish用户
vim /lib/systemd/system/varnish.service #查看varnish服务启动脚本
ulimit -a #查看内核限制参数
ulimit -n 131072 #全局允许文件打开最大数
ulimit -l 85 #内存锁定
vim /etc/security/limits.conf #修改系统参数
varnish - nofile 131072 #varnish用户最大开启文件个数
varnish - memlock 82000 #运行varnish时内存允许其占用82M内存空间
varnish - nproc unlimited #varnish用户开启进程数不受限制
netstat -antlp | grep varnish #查看端口
vim /etc/varnish/default.vcl #编辑varnish 配置文件
backend default {
.host = "172.25.88.2"; ##配置后端realserver
.port = "80";
}
vim /lib/systemd/system/varnish.service #修改服务接受转发端口
:80 -T localhost:6081
systemctl restart varnish
#重启服务
3,server2配置
yum install httpd #安装httpd服务
cd /var/www/html
vim index.html #写入文server2
systemctl start httpd #重启服务
4,测试
curl 172.25.88.1
结果为:server2
5,查看命中
vim /etc/varnish/default.vcl #编辑varnish配置文件
systemctl restart varnish
6,清除缓存
varnishadm ban req.url "~" / #清除所有
varnishadm ban req.url "~" /index.html #清除index.html页面缓存
多个后端的服务搭建
1,server3服务器配置
yum install httpd #安装httpd服务
cd /var/www/html
vim index.html #写入文server3
systemctl start httpd #重启服务
2,server1 varnish上配置
vim /etc/varnish/default.vcl #编辑varnish 配置文件
3,在客户端测试
curl 172.25.88.1