Varnish是一个开源的反向代理软件和HTTP加速器,与传统的Squid相比,Varnish具有性能更高、速度更快、管理更方便等诸多优点,很多大型的运营网站都开始尝试用Varnish来替换Squid,这些都促使Varnish迅速发展起来
Varnish与Squid的对比
说到Varnish,就不能不提Squid。Squid是一个高性能的代理缓存服务器,它和Varnish相比较有诸多的异同点,下面进行分析。
下面是Varnish与Squid之间的相同点。
都是一个反向代理服务器。
都是开源软件。
下面是它们的不同点,也是Varnish的优点。
Varnish的稳定性很高。两者在完成相同负荷的工作时,Squid服务器发生故障的几率要高于Varnish,因为Squid需要经常重启。
Varnish访问速度更快。Varnish采用了“Visual Page Cache”技术,所有缓存数据都直接从内存读取,而Squid是从硬盘读取缓存数据,因此Varnish在访问速度方面会更快。
Varnish可以支持更多的并发连接。因为Varnish的TCP连接释放要比Squid快,所以在高并发连接情况下可以支持更多的TCP连接。
Varnish可以通过管理端口,使用正则表达式批量清除部分缓存,而Squid做不到。
当然,与传统的Squid相比,Varnish也有缺点。
Varnish在高并发状态下CPU、I/O和内存等资源开销都高于Squid。
Varnish进程一旦挂起、崩溃或者重启,缓存数据都会从内存中完全释放,此时所有请求都会被发送到后端服务器,在高并发情况下,这会给后端服务器造成很大压力。
################安装6.5版本redhat虚拟机############
使用6.5镜像安装好一个虚拟机,作为母机使用,安装步骤与7版本类似
安装好后进入虚拟机配置:
1.cd /etc/udev/rules.d/
2.ls
3.rm -fr 70-persistent-net.rules
4.cd /etc/sysconfig/network-scripts/
5.vi ifcfg-eth0
只留下:
DEVICE="eth0"
BOOTPROTO="static"
UNBOOT="yes"
IPADDR=172.25.X.*
PREFIX=24
6./etc/init.d/network restart ##重启网络
6.cd /etc/yum.repos.d/
7.vi rhel-source.repo
[rhel-source]
name=Red Hat Enterprise Linux $releasever - $basearch - Source
baseurl=http://172.25.X.250/source6.5
enabled=1
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-redhat-release
8.yum repolist
9.yum install lftp vim -y
10.vim /etc/hosts 添加解析
172.25.X.1 server1
172.25.X.2 server2
172.25.X.3 server3
172.25.X.4 server4
172.25.X.5 server5
172.25.X.6 server6
11.修改主机名
vim /etc/sysconfig/network
NETWORKING=yes
HOSTNAME=server1
12.关闭防火墙
chkconfig iptables off
13.关闭selinux
14.poweroff
在真机中
1.cd /var/lib/libvirt/images/
2.virt-sysprep -d base
##如果没有命令,用yum 下载
3.用virt-manager看装好的虚拟机的名字
如果是base.qcow2,就可以直接创建快照2个
如果不是base.qcow2,需要删除掉原有的base.qcow2,然后将虚拟机的名字改成base.qcow2,然后创建快照
4.把rpm包放入虚拟机1并下载
5.vim /etc/sysconfig/varnish
66行端口改为80
6.vim /etc/security/limits.conf
写入:
varnish - nofile 131073
varnish - memlock 82000
varnish - nproc unlimited
7:/etc/init.d/varnish start
8:在server2中
下载httpd
开启服务:/etc/init.d/httpd start
1.cd /var/www/html/
2.vim index.html
写入:www.westos.org
CDN缓存测试
vim /etc/sysconfig/varnish ###改变端口为80
# VARNISH_LISTEN_ADDRESS=
VARNISH_LISTEN_PORT=80
vim /etc/varnish/default.vcl
backend web1 {
.host = "172.25.6.104";
.port = "80";
}
sub vcl_deliver {
if (obj.hits > 0) {
set resp.http.X-Cache = "HIT cache";
}
else {
set resp.http.X-Cache = "MISS cache";
}
return(deliver);
}
测试:
server2:172.25.6.104中搭建httpd服务
echo server2 >/var/www/html/index.html
- 1
真机中测试:
curl -I 172.25.6.103
第一次结果:
第二次结果:
不难可以看出,当client访问服务器时,当第一次时由于没有缓存,所以访问server2(172.25.6.104),当二次访问时,直接访问的时server1(172.25.6.103)cache。
可以在服务器手动清除缓存:
varnishadm ban.url .*$ ###清除所有
varnishadm ban.url /index.html ###清除index.html页面缓存
varnishadm ban.url /westos/$ ###清除westos目录缓存
负载均衡
虚拟机IP:10.10.10.1(服务器)
vim /etc/varnish/default.vcl
backend web1 {
.host = "172.25.6.104";
.port = "80";
}
backend web2 {
.host = "172.25.6.105";
.port = "80";
}
director lb round-robin { ###轮询
{ .backend = web1; }
{ .backend = web2; }
}
sub vcl_recv {
if (req.http.host ~ "^(www.)?westos.org") {
set req.http.host = "www..org";
set req.backend = lb;
return (pass); ###用于测试,不缓存
} elsif (req.http.host ~ "^bbs.westos.org") {
set req.backend = web2;
return (pass);
} else {
error 404 "westos cache";
}
}
/etc/init.d/varnish restart
server3:172.25.6.105
vim /etc/httpd/conf/httpd.conf
990 NameVirtualHost *:80
1003 <VirtualHost *:80>
1004 DocumentRoot /var/www/html
1005 ServerName bbs.westos.org
1006 </VirtualHost>
1007
1008 <VirtualHost *:80>
1009 DocumentRoot /www1
1010 ServerName www.westos.org
1011 </VirtualHost>
mkdir /www1
/etc/init.d/httpd restart
测试:
#####如果虚拟机网不通(brctl show 看不到网卡),在其他操作正常的情况下有两种方法解决:
1:ip link set up dev vnet0/1/2/3
2:virsh start test1/2/3(虚拟机名)
########################################################