Varnish与squid的对比
Squid是一个高性能的代理缓存服务器,它和varnish之间有诸多的异同点,如下:
相同点:
1. 都是一个反向代理服务器
2. 都是开源软件
不同点,也是varnish的优点:
1. Varnish的稳定性很高,两者在完成相同负荷的工作时,squid服务器发生故障的机率要高于varnish,因为使用 squid要经常重启。
2. Varnish的访问速度更快,varnish采用了”visual page cache”技术,所有缓存数据都是从内存读取,而squid是从硬盘读取,因而vainish在访问时速度方面会更快。
3. Varnish可以支持更多的并发连接,因为varnish的TCP连接释放要比squid快。因而在高并发连接情况下可以支持更多的TCP连接。
4. Varnis可以通过端口,使用正则表达式批量删除部分缓存,而squid是做不到的。
5. Squid属于单进程使用单核cpu,但varnish是通过fork形式打开多进程来做处理,所以是合理的使用所有核来处理相应的请求。
当然,与传统的squid相比,varnish也是有缺点的,如下:
1. Varnish进程一旦挂起、崩溃或者重启,缓存数据库都会从内存中完全释放,此时所有的请求都会发送到后端服务器,在高并发情况下,会给后端服务器造成很大压力。
2. 在varnish使用中如果单个url的请求通过HA/F5(负载均衡)每次请求不同的varnish服务器中,被请求的服务器都会被穿透到后端,而且同样的请求会在多台服务器上缓存,也会造成varnish的缓存的资源浪费,也会造成资源浪费。
varnish官方网站:https://www.varnish-cache.org/
Varnish下载地址:https://www.varnish-cache.org/releases
下面搭建varnish
一、 安装依赖包,解决依赖关系
[root@iZ2ze4si6e76x4rgeg5gwoZ ~]#Yum -y install autoconf automake jemalloc-devel libedit-devel libtool ncurses-devel pcre-devel pkgconfig python-docutils python-sphinx
二、 去官网下载安装包(varnish官网:http://varnish-cache.org/)
三、 上传解压安装包
[root@iZ2ze4si6e76x4rgeg5gwoZ~]#tar -zxf varnish-4.0.5.tgz
[root@iZ2ze4si6e76x4rgeg5gwoZ~]cd varnish-4.0.5
四、 编译安装
[root@iZ2ze4si6e76x4rgeg5gwoZ~]#./configure --prefix=/usr/local/varnish
[root@iZ2ze4si6e76x4rgeg5gwoZ ~]#make && make install
五、 进入到varnish目录下创建varnish服务配置文件目录etc
[root@iZ2ze4si6e76x4rgeg5gwoZ ~]#cd /usr/local/varnish/
[root@iZ2ze4si6e76x4rgeg5gwoZ v/etcarnish]# ll [root@iZ2ze4si6e76x4rgeg5gwoZ varnish]#mkdir etc
六、 拷贝varnish的配置文件模型到etc下并改名为default.vcl
[root@iZ2ze4si6e76x4rgeg5gwoZ~]#cp share/doc/varnish/example.vcl etc/default.vcl
七、 配置文件做个软连接到/etc下面方便修改查看
[root@iZ2ze4si6e76x4rgeg5gwoZ~]#ln -s /usr/local/varnish/etc/default.vcl /etc/
[root@iZ2ze4si6e76x4rgeg5gwoZ ~]#ll /etc/default.vcl
八、 修改配置文件
[root@iZ2ze4si6e76x4rgeg5gwoZ ~]#Vim /etc/default.vcl
配置一个后端服务器
改:
backend default {
.host = "127.0.0.1";
.port = "80";
}
为:
backend web1 {
.host = "web1ip";
.port = "服务端口";
}
查看缓存命中情况
在:
sub vcl_deliver {
}
追加:
sub vcl_deliver {
if (obj.hits > 0) {
set resp.http.X-Cache = "HIT from aaa cache";
}
else {
set resp.http.X-Cache = "MISS from aaa cache";
}
return (deliver);
}
保存退出
九、 启动varnish服务
[root@iZ2ze4si6e76x4rgeg5gwoZ~]#/usr/local/varnish/sbin/varnishd -f /etc/default.vcl -s malloc,100M -T 127.0.0.1:2000 -a 0.0.0.0:80
启动参数介绍:
-f /etc/default.vcl
-f 指定varnish使用哪个配置文件
-s malloc,100M
-s 用来确定varnish使用的存储类型和存储容量,我使用的是malloc类型(malloc是一个C函数,用于分配内存空间),1G定义多少内存被malloecd
-T 127.0.0.1:2000
Varnish有一个基于文本的管理接口,启动他的话可以在不停止 vainish的情况下来管理varnish,可以指定管理软件监听哪个接口,如果系统里有不完全信任的用户,可以通过防火墙规则来限制他的访问vainish的管理端口。
-a 0.0.0.0:80
这一句话的意思制定varnish监听所有IP发给80端口的http请求。
测试varnish
在web1上安装httpd并编写测试页面
[root@iZuf6863bn6nxym2pl0y07Z ~]#yum -y install httpd
[root@iZuf6863bn6nxym2pl0y07Z ~]#echo aaa >/var/www/html/index.html
[root@iZuf6863bn6nxym2pl0y07Z ~]#systemctl restart httpd
测试源站点:
在浏览器中访问Varnish的 ip
测试加速:
在浏览器中访问web的ip
测试缓存命中
[root@iZ2ze4si6e76x4rgeg5gwoZ ~]#Curl – ip(web)
HTTP/1.1 200 OK
Date: Mon, 27 May 2019 03:11:29 GMT
Server: Apache/2.4.6 (CentOS)
Last-Modified: Fri, 24 May 2019 08:21:56 GMT
ETag: "13-5899de444f940"
Content-Length: 19
Content-Type: text/html; charset=UTF-8
X-Varnish: 32932
Age: 0
Via: 1.1 varnish-v4
X-Cache: MISS from aaa cache
Connection: keep-alive
X-Cache: MISS from aaa cache #未命中
X-Cache: HIT from aaa cache #命中
原文:https://blog.51cto.com/14241151/2400943