高性能缓存服务器Varnish深刻浅出部署

前言:html

一)什么是反向代理?
python

反向代理(Reverse Proxy)方式是指以代理服务器来接受internet上的链接请求,而后将请求转发给内部linux

网络上的服务器,并将从服务器上获得的结果返回给internet上请求链接的客户端,此时代理服务器对外web

就表现为一个反向代理服务器。算法

二)在网络上常见的代理服务器有三种:vim

一、标准的代理缓冲服务器浏览器

一个标准的代理缓冲服务被用于缓存静态的网页(例如:html文件和图片文件等)到本地网络上的一台主缓存

机上---即代理服务器(传统代理)服务器

优势:当被缓存的页面被第二次访问的时候,浏览器将直接从本地代理服务器那里请求数据而再也不向原web网络

站点请求数据。这样就节省了宝贵的网络带宽,并且提升了访问速度。

缺点:要想实现这种方式,必须在每个内部主机的浏览器上明确指明代理服务器的IP地址和端口号。

二、透明代理缓冲服务器

透明代理缓冲服务和标准代理服务器的功能彻底相同。可是,代理操做对客户端的浏览器是透明的(即不

需指明代理服务器的IP和端口)。透明代理服务器阻断网络通讯,而且过滤出访问外部的HTTP(80端口)

流量。若是客户端的请求在本地有缓冲则将缓冲的数据直接发给用户,若是在本地没有缓冲则向远程web服

务器发出请求,其他操做和标准的代理服务器彻底相同。对于Linux操做系统来讲,透明代理使用Iptables

缓存及加速-03单-高性能缓存服务器Varnish.txt[2016/8/19 15:28:24]

或者Ipchains实现。由于不须要对浏览器做任何设置,因此,透明代理对于ISP(Internet服务器提供商)

特别有用。

三、反向代理缓冲服务器

反向代理是和前两种代理彻底不一样的一种代理服务。使用它能够下降原始WEB服务器的负载。反向代理服务

器承担了对原始WEB服务器的静态页面的请求,防止原始服务器过载。它位于本地WEB服务器和Internet之

间,处理全部对WEB服务器的请求,阻止了WEB服务器和Internet的直接通讯。若是互联网用户请求的页面

在代理服务器上有缓冲的话,代理服务器直接将缓冲内容发送给用户。若是没有缓冲则先向WEB服务器发出

请求,取回数据,本地缓存后再发送给用户。这种方式经过下降了向WEB服务器的请求数从而下降了WEB服

务器的负载。


1、构建Varnish反向代理

---------Client---------Varnish---------WEB---------

eth0:1.1.1.254     eth0:1.1.1.1     eth1:192.168.1.100

               eth1:192.168.1.1  


依旧采用Centos6系列最小化安装系统。

二)搭建步骤:

一、关闭防火墙

二、关闭selinux

三、安装相关插件   

[root@localhost ~]# yum -y install libtool ncurses-devel pcre-devel libxslt 

              pkgconfig groff  这几个包本地yum源有

[root@localhost ~]# rpm -ivh libedit-2.11-4.20080712cvs.1.el6.x86_64.rpm

[root@localhost ~]# rpm -ivh python-imaging-1.1.6-19.el6.x86_64.rpm

[root@localhost ~]# rpm -ivh python-docutils-0.6-1.el6.noarch.rpm

上述三个包前两个本地YUM源有,python-docutils须要安装第三方yum源或者百度搜索这个包吧


[root@localhost ~]# tar -zxvf varnish-4.1.3.tar.gz -C /usr/src/

varnish官网:http://www.varnish-cache.org/


[root@localhost ~]# cd /usr/src/varnish-4.1.3/

[root@localhost varnish-4.1.3]# ./configure --prefix=/usr/local/varnish --enable-debuggingsymbols

[root@localhost varnish-4.1.3]# make && make install

[root@localhost varnish-4.1.3]# ls /usr/local/varnish/

[root@localhost ~]# ln -s /usr/local/varnish/sbin/* /usr/sbin/

[root@localhost ~]# ln -s /usr/local/varnish/bin/* /usr/local/bin/

[root@localhost ~]# cp /usr/local/varnish/share/doc/varnish/example.vcl

/usr/local/varnish/default.vcl

[root@localhost ~]# vim /usr/local/varnish/default.vcl

修改:

backend default {

.host = "192.168.1.100";

.port = "80";

}

[root@localhost ~]# varnishd -f /usr/local/varnish/default.vcl -a 0.0.0.0:80

[root@localhost ~]# netstat -anpt | grep varnish

注意:

中止varnish用下面的命令:

[root@localhost ~]# killall -9 varnishd

四、在WEB服务器

[root@localhost ~]# service httpd restart

[root@localhost ~]# echo "welcome to WEB server" > /var/www/html/index.html

五、综合验证:

一、在varnish代理服务器上

[root@localhost ~]# varnishlog

二、在WEB服务器上:

缓存及加速-03单-高性能缓存服务器Varnish.txt[2016/8/19 15:28:24]

[root@localhost ~]# tail -f /etc/httpd/logs/access_log

2、部署Varnish负载均衡高可用群集

在上面的基础之上来完成下Varnish负载均衡高可用群集的部署

------Client---------Varnish-------------WEB1--------WEB2----------

  1.1.1.254     eth0:1.1.1.1 

             eth1:192.168.1.1 192.168.1.100 192.168.1.200

一)部署负载均衡

[root@localhost ~]# vim /usr/local/varnish/default.vcl

修改:

backend web1 {

.host = "192.168.1.100";

.port = "80";

}

backend web2 {

.host = "192.168.1.200";

.port = "80";

}

import directors; //加载directors模块

缓存及加速-03单-高性能缓存服务器Varnish.txt[2016/8/19 15:28:24]

sub vcl_init {

new bar = directors.round_robin();

bar.add_backend(web1);

bar.add_backend(web2);

}

sub vcl_recv {

set req.backend_hint = bar.backend();

}

[root@localhost ~]# varnishd -C -f /usr/local/varnish/default.vcl //检查语法

[root@localhost ~]# varnishd -f /usr/local/varnish/default.vcl //启动

[root@localhost ~]# netstat -anpt | grep varnishd

验证:

客户端访问http://1.1.1.1/,varnish服务器会根据算法分配流量。


二)在实际应用中,当其中一个节点出现故障,实际上varnish服务器没法访问故障节点,可是varnish服

务器中有缓存页面内容,客户端能够访问到相同的页面内容。没法实现自动切换,咱们要求实现无缝转发

流量。

[root@localhost ~]# vim /usr/local/varnish/default.vcl

增长:

backend web1 {

.host = "192.168.1.100";

.port = "80";

.probe = { //开启健康检查

.url = "/"; //请求的URL路径

.interval = 5s; //查询间隔时间

.timeout = 1s; //超时时间

.window = 5; //滑动窗

缓存及加速-03单-高性能缓存服务器Varnish.txt[2016/8/19 15:28:24]

.threshold = 3; //上次检查.window数量的多少,

}

}

backend web2 {

.host = "192.168.1.200";

.port = "80";

.probe = {

.url = "/";

.interval = 5s;

.timeout = 1s;

.window = 5;

.threshold = 3;

}

}

......略(其余保持同样)......

注意:可能会因为缓存的缘由,切换会有延迟,我作的时候,延迟有点大,好长时间页面才切换过来……

[root@localhost ~]# varnishd -C -f /usr/local/varnish/default.vcl //检查语法

[root@localhost ~]# varnishd -f /usr/local/varnish/default.vcl //启动

[root@localhost ~]# netstat -anpt | grep varnishd

验证:

客户端访问http://1.1.1.1/,varnish服务器会根据故障实现切换。

相关文章
相关标签/搜索