设为首页 收藏本站
查看: 650|回复: 0

[经验分享] 高性能缓存服务器Varnish深入浅出部署

[复制链接]
累计签到:1 天
连续签到:1 天
发表于 2017-2-15 09:17:29 | 显示全部楼层 |阅读模式
前言:
一)什么是反向代理?

反向代理(Reverse Proxy)方式是指以代理服务器来接受internet上的连接请求,然后将请求转发给内部
网络上的服务器,并将从服务器上得到的结果返回给internet上请求连接的客户端,此时代理服务器对外
就表现为一个反向代理服务器。
二)在网络上常见的代理服务器有三种:
1、标准的代理缓冲服务器
一个标准的代理缓冲服务被用于缓存静态的网页(例如:html文件和图片文件等)到本地网络上的一台主
机上---即代理服务器(传统代理)
优点:当被缓存的页面被第二次访问的时候,浏览器将直接从本地代理服务器那里请求数据而不再向原web
站点请求数据。这样就节省了宝贵的网络带宽,而且提高了访问速度。
缺点:要想实现这种方式,必须在每一个内部主机的浏览器上明确指明代理服务器的IP地址和端口号。
2、透明代理缓冲服务器
透明代理缓冲服务和标准代理服务器的功能完全相同。但是,代理操作对客户端的浏览器是透明的(即不
需指明代理服务器的IP和端口)。透明代理服务器阻断网络通信,并且过滤出访问外部的HTTP(80端口)
流量。如果客户端的请求在本地有缓冲则将缓冲的数据直接发给用户,如果在本地没有缓冲则向远程web服
务器发出请求,其余操作和标准的代理服务器完全相同。对于Linux操作系统来说,透明代理使用Iptables
缓存及加速-03单-高性能缓存服务器Varnish.txt[2016/8/19 15:28:24]
或者Ipchains实现。因为不需要对浏览器作任何设置,所以,透明代理对于ISP(Internet服务器提供商)
特别有用。
3、反向代理缓冲服务器
反向代理是和前两种代理完全不同的一种代理服务。使用它可以降低原始WEB服务器的负载。反向代理服务
器承担了对原始WEB服务器的静态页面的请求,防止原始服务器过载。它位于本地WEB服务器和Internet之
间,处理所有对WEB服务器的请求,阻止了WEB服务器和Internet的直接通信。如果互联网用户请求的页面
在代理服务器上有缓冲的话,代理服务器直接将缓冲内容发送给用户。如果没有缓冲则先向WEB服务器发出
请求,取回数据,本地缓存后再发送给用户。这种方式通过降低了向WEB服务器的请求数从而降低了WEB服
务器的负载。


一、构建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系列最小化安装系统。

二)搭建步骤:
1、关闭防火墙
2、关闭selinux
3、安装相关插件   
[iyunv@localhost ~]# yum -y install libtool ncurses-devel pcre-devel libxslt
              pkgconfig groff  这几个包本地yum源有
[iyunv@localhost ~]# rpm -ivh libedit-2.11-4.20080712cvs.1.el6.x86_64.rpm
[iyunv@localhost ~]# rpm -ivh python-imaging-1.1.6-19.el6.x86_64.rpm
[iyunv@localhost ~]# rpm -ivh python-docutils-0.6-1.el6.noarch.rpm
上述三个包前两个本地YUM源有,python-docutils需要安装第三方yum源或者百度搜索这个包吧


[iyunv@localhost ~]# tar -zxvf varnish-4.1.3.tar.gz -C /usr/src/
varnish官网:http://www.varnish-cache.org/


[iyunv@localhost ~]# cd /usr/src/varnish-4.1.3/
[iyunv@localhost varnish-4.1.3]# ./configure --prefix=/usr/local/varnish --enable-debuggingsymbols
[iyunv@localhost varnish-4.1.3]# make && make install
[iyunv@localhost varnish-4.1.3]# ls /usr/local/varnish/
[iyunv@localhost ~]# ln -s /usr/local/varnish/sbin/* /usr/sbin/
[iyunv@localhost ~]# ln -s /usr/local/varnish/bin/* /usr/local/bin/
[iyunv@localhost ~]# cp /usr/local/varnish/share/doc/varnish/example.vcl
/usr/local/varnish/default.vcl
[iyunv@localhost ~]# vim /usr/local/varnish/default.vcl
修改:
backend default {
.host = "192.168.1.100";
.port = "80";
}
[iyunv@localhost ~]# varnishd -f /usr/local/varnish/default.vcl -a 0.0.0.0:80
[iyunv@localhost ~]# netstat -anpt | grep varnish
注意:
停止varnish用下面的命令:
[iyunv@localhost ~]# killall -9 varnishd
4、在WEB服务器
[iyunv@localhost ~]# service httpd restart
[iyunv@localhost ~]# echo "welcome to WEB server" > /var/www/html/index.html
5、综合验证:
1、在varnish代理服务器上
[iyunv@localhost ~]# varnishlog
2、在WEB服务器上:
缓存及加速-03单-高性能缓存服务器Varnish.txt[2016/8/19 15:28:24]
[iyunv@localhost ~]# tail -f /etc/httpd/logs/access_log
二、部署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
一)部署负载均衡
[iyunv@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();
}
[iyunv@localhost ~]# varnishd -C -f /usr/local/varnish/default.vcl //检查语法
[iyunv@localhost ~]# varnishd -f /usr/local/varnish/default.vcl //启动
[iyunv@localhost ~]# netstat -anpt | grep varnishd
验证:
客户端访问http://1.1.1.1/,varnish服务器会根据算法分配流量。


二)在实际应用中,当其中一个节点出现故障,实际上varnish服务器无法访问故障节点,但是varnish服
务器中有缓存页面内容,客户端可以访问到相同的页面内容。无法实现自动切换,我们要求实现无缝转发
流量。
[iyunv@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;
}
}
......略(其他保持一样)......
注意:可能会由于缓存的原因,切换会有延迟,我做的时候,延迟有点大,好长时间页面才切换过来……
[iyunv@localhost ~]# varnishd -C -f /usr/local/varnish/default.vcl //检查语法
[iyunv@localhost ~]# varnishd -f /usr/local/varnish/default.vcl //启动
[iyunv@localhost ~]# netstat -anpt | grep varnishd
验证:
客户端访问http://1.1.1.1/,varnish服务器会根据故障实现切换。


运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-342308-1-1.html 上篇帖子: linux(redhat\centos)下python创建沙盒环境 下篇帖子: DHCP FailOver 主备故障转移+多网段网络环境系统部署 服务器
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表