开源http加速器varnish介绍

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(虚拟机名)
########################################################

猜你喜欢

转载自blog.csdn.net/gd0306/article/details/81257756