varnish加速器的原理和配置,varnish实现的负载均衡,cdn推送平台搭建
2018-01-20 19:37
555 查看
本次实验环境;redhat6.5,selinux和iptables关闭
varnish服务器:server4(172.25.92.4)
后端服务器;server5(172.25.92.5)和server6(172.25.92.6)
一,varnish的简介:
1,什么是varnish?
Varnish 是一个 web 加速器,被安装在 web 应用程序前面,缓存 web 应用程序,并响应用求,varnish 让您的 web 应用程序运行的更快,并且 varnish 灵活好用。
2,varnish的功能:
varnish的功能:
a, 一套缓存系统,在CDN中扮演web缓存的角色,性能和响应时间更优越,语法简单,可以实现很多定制化,而HAProxy无缓存
b,反代是最基本的功能,自然具备
c,可以实现动静分离
d,可以实现负载均衡
二,varnish系统架构:
varnish主要运行两个进程:Management进程和Child进程(也叫Cache进程)。
Management进程主要实现应用新的配置、编译VCL、监控varnish、初始化varnish以及提供一个命令行接口等。Management进程会每隔一段时间探测一下Child进程以判断其是否正常运行,如果在指定的时长内未得到Child进程的回应,Mangagement将会重启此Child进程。
Child进程包含多种类型的线程
三,VCL简介:Varnish Configration Lnguage, 是varnish配置缓存策略的一种基于‘域‘的简单编程语言。使用VCL编写的缓存策略通常保存在.vcl文件中,其需要编译成 二进制文件才能被varnish调用。
VCL策略在启用前,会由management进程将其转换为C代码,而后再有gcc编译器将C代码编译成二进制程序。编译完成后,management负责将其连接至varnish实例,即Child进程。正式由于编译工作在child进程之外完成,它避免了转载错误格式VCL的风险,因此,varnish修改配置的开销非常小,其可以同时保有几分尚在引用的旧版本配置,也能够让新的配置即刻生效,编译后的旧版本配置通常在varnish重启时才会被丢弃,如果需要手动清理,则可以使用varnishadm的vcl.discard命令来完成
四,vcl函数
1,vcl_recv是在varnish完成对请求报文的解码为基本数据结构后第一个要指定的子例程,他通常有四个主要用途:
1)修改客户端数据以减少缓存对象差异性,比如删除URL中的www.等字符串
(2)基于客户端数据*选用缓存策略*:比如仅缓存特定的额URL请求、不缓存POST请求等
(3)为某web应用程序执行URL重写
(4)挑选合适的后端服务器;
2,vcl_fetch如果vcl_recv是根据客户端的请求做出缓存策略来说,vcl_fetch则是根据服务器端的响应做出缓存决策,在任何VCL状态引擎中发挥pass操作都将有vcl_fetch进行后续处理
3,vcl_deliver 在缓存中找到缓存内容,发送给客户端时调用此参数
4,val_pass在进入pass模式时被调用,用于将请求直接传递至后端主机,后端主机应答数据后发送给客户端,但是不缓存任何数据,在当前连接下,每次都是犯回最新的内容
5,vcl_pipe不对客户端进行检查或做出任何操作,而是在客户端与后端服务器之间建立专业“通道”,并直接将数据在二者之间进行传送:此时,keep-alive连接中后续传送的数据也都将在通过此管道进行直接传送,并不会出现在任何日志中
6,l**lookup**表示在缓存里查找被请求的对象,并且根据查找的数据把控制权交给vcl_miss或vcl_hit
7,vcl_hit 在执行lookup指令后,如果在缓存中找到请求的内容,将自动调用此函数
8,vcl_miss函数在执行lookup指令后,如果在缓存中找不到请求的内容,将自动调用此函数,此函数可以判断是否在后端服务器上获取内容
9,vcl_hash使用 req.hash += req.http.Cookie 或者 HTTP 头文件包含的 cookie 生成 hash 字符串。
五,VCL处理流程图
六,varnish的安装和基本配置:
实验一:初识varnish缓存,指定varnish服务器(server4)的后端主机为server5,访问server4时可以自动指定到server5上的apache服务器上
server4上:
[root@server4 ~]# yum install -y varnish-3.0.5-1.el6.x86_64.rpm varnish-libs-3.0.5-1.el6.x86_64.rpm
[root@server4 ~]# vim /etc/sysconfig/varnish
[root@server4 ~]# vim /etc/varnish/default.vcl
指定后端服务器:
编写vcl_deliever标示是否命中:
root@server4 ~]# /etc/init.d/varnish start
server5上:
[root@server5 ~]# yum install -y httpd
[root@server5 ~]vim /var/www/html/index.html
[root@server5 html]# /etc/init.d/httpd start
测试:
(测试一):在浏览器访问:172.25.92.4和172.25.92.5
访问结果一样,实际上server4是显示的缓存中的数据
(测试二):
使用命令:
在真机上添加解析:
vim /etc/hosts
开始未命中,因为缓存中还没有数据
第二次在缓存中命中数据:
注意:age参数是缓存的生命周期,默认是120秒失效,可以/etc/sysconfig/varnish中修改,当age过期后,缓存服务器重新从后端服务器中获取数据
实验二:
当访问 www.test.com 域名时从 web1 上取数据,访问 bbs.test.com域名时到 web2 取数据,访问其他页面报错。
server4上;
[root@server4 ~]# vim /etc/varnish/default.vcl
添加两个后端服务器:
[root@server4 ~]# /etc/init.d/varnish reload
server6上:
[root@server6 ~]# yum install -y httpd
[root@server6 ~]# vim /var/www/html/index.html
[root@server6 ~]# /etc/init.d/httpd start
测试:
在真机上添加解析:
vim /etc/hosts
使用命令:curl -I www.test.com第一次未在缓存中命中,第二次命中了
使用命令:curl -I bbs.test.com第一次未在缓存中命中,第二次命中了
由测试结果可以看出来完成了实验要求。
实验三:varnish作为负载均衡调度器实现后端主机的负载均衡
server4上:
[root@server4 ~]# vim /etc/varnish/default.vcl
server6上:
测试:
在主机上:
可以看出实现了轮叫算法的负载均衡。
七,cdn推送系统的搭建:
测试:在浏览器输入:172.25.92.4:8080
如何推送?
假如后端主机server5的index.html页面发生了变化,需要更新varnish缓存,则点击“http“,将“/index.html“写入白框,然后提交即可。
在server5上:curl www.test.com/index.html,使用完整url可以看见缓存更新后的效果
varnish服务器:server4(172.25.92.4)
后端服务器;server5(172.25.92.5)和server6(172.25.92.6)
一,varnish的简介:
1,什么是varnish?
Varnish 是一个 web 加速器,被安装在 web 应用程序前面,缓存 web 应用程序,并响应用求,varnish 让您的 web 应用程序运行的更快,并且 varnish 灵活好用。
2,varnish的功能:
varnish的功能:
a, 一套缓存系统,在CDN中扮演web缓存的角色,性能和响应时间更优越,语法简单,可以实现很多定制化,而HAProxy无缓存
b,反代是最基本的功能,自然具备
c,可以实现动静分离
d,可以实现负载均衡
二,varnish系统架构:
varnish主要运行两个进程:Management进程和Child进程(也叫Cache进程)。
Management进程主要实现应用新的配置、编译VCL、监控varnish、初始化varnish以及提供一个命令行接口等。Management进程会每隔一段时间探测一下Child进程以判断其是否正常运行,如果在指定的时长内未得到Child进程的回应,Mangagement将会重启此Child进程。
Child进程包含多种类型的线程
三,VCL简介:Varnish Configration Lnguage, 是varnish配置缓存策略的一种基于‘域‘的简单编程语言。使用VCL编写的缓存策略通常保存在.vcl文件中,其需要编译成 二进制文件才能被varnish调用。
VCL策略在启用前,会由management进程将其转换为C代码,而后再有gcc编译器将C代码编译成二进制程序。编译完成后,management负责将其连接至varnish实例,即Child进程。正式由于编译工作在child进程之外完成,它避免了转载错误格式VCL的风险,因此,varnish修改配置的开销非常小,其可以同时保有几分尚在引用的旧版本配置,也能够让新的配置即刻生效,编译后的旧版本配置通常在varnish重启时才会被丢弃,如果需要手动清理,则可以使用varnishadm的vcl.discard命令来完成
四,vcl函数
1,vcl_recv是在varnish完成对请求报文的解码为基本数据结构后第一个要指定的子例程,他通常有四个主要用途:
1)修改客户端数据以减少缓存对象差异性,比如删除URL中的www.等字符串
(2)基于客户端数据*选用缓存策略*:比如仅缓存特定的额URL请求、不缓存POST请求等
(3)为某web应用程序执行URL重写
(4)挑选合适的后端服务器;
2,vcl_fetch如果vcl_recv是根据客户端的请求做出缓存策略来说,vcl_fetch则是根据服务器端的响应做出缓存决策,在任何VCL状态引擎中发挥pass操作都将有vcl_fetch进行后续处理
3,vcl_deliver 在缓存中找到缓存内容,发送给客户端时调用此参数
4,val_pass在进入pass模式时被调用,用于将请求直接传递至后端主机,后端主机应答数据后发送给客户端,但是不缓存任何数据,在当前连接下,每次都是犯回最新的内容
5,vcl_pipe不对客户端进行检查或做出任何操作,而是在客户端与后端服务器之间建立专业“通道”,并直接将数据在二者之间进行传送:此时,keep-alive连接中后续传送的数据也都将在通过此管道进行直接传送,并不会出现在任何日志中
6,l**lookup**表示在缓存里查找被请求的对象,并且根据查找的数据把控制权交给vcl_miss或vcl_hit
7,vcl_hit 在执行lookup指令后,如果在缓存中找到请求的内容,将自动调用此函数
8,vcl_miss函数在执行lookup指令后,如果在缓存中找不到请求的内容,将自动调用此函数,此函数可以判断是否在后端服务器上获取内容
9,vcl_hash使用 req.hash += req.http.Cookie 或者 HTTP 头文件包含的 cookie 生成 hash 字符串。
五,VCL处理流程图
六,varnish的安装和基本配置:
实验一:初识varnish缓存,指定varnish服务器(server4)的后端主机为server5,访问server4时可以自动指定到server5上的apache服务器上
server4上:
[root@server4 ~]# yum install -y varnish-3.0.5-1.el6.x86_64.rpm varnish-libs-3.0.5-1.el6.x86_64.rpm
[root@server4 ~]# vim /etc/sysconfig/varnish
[root@server4 ~]# vim /etc/varnish/default.vcl
指定后端服务器:
编写vcl_deliever标示是否命中:
root@server4 ~]# /etc/init.d/varnish start
server5上:
[root@server5 ~]# yum install -y httpd
[root@server5 ~]vim /var/www/html/index.html
<h1>www.test.com</h1>
[root@server5 html]# /etc/init.d/httpd start
测试:
(测试一):在浏览器访问:172.25.92.4和172.25.92.5
访问结果一样,实际上server4是显示的缓存中的数据
(测试二):
使用命令:
在真机上添加解析:
vim /etc/hosts
开始未命中,因为缓存中还没有数据
第二次在缓存中命中数据:
注意:age参数是缓存的生命周期,默认是120秒失效,可以/etc/sysconfig/varnish中修改,当age过期后,缓存服务器重新从后端服务器中获取数据
实验二:
当访问 www.test.com 域名时从 web1 上取数据,访问 bbs.test.com域名时到 web2 取数据,访问其他页面报错。
server4上;
[root@server4 ~]# vim /etc/varnish/default.vcl
添加两个后端服务器:
[root@server4 ~]# /etc/init.d/varnish reload
server6上:
[root@server6 ~]# yum install -y httpd
[root@server6 ~]# vim /var/www/html/index.html
<h1>bbs.test.com</h1>
[root@server6 ~]# /etc/init.d/httpd start
测试:
在真机上添加解析:
vim /etc/hosts
使用命令:curl -I www.test.com第一次未在缓存中命中,第二次命中了
使用命令:curl -I bbs.test.com第一次未在缓存中命中,第二次命中了
由测试结果可以看出来完成了实验要求。
实验三:varnish作为负载均衡调度器实现后端主机的负载均衡
server4上:
[root@server4 ~]# vim /etc/varnish/default.vcl
backend web1 { .host = "172.25.92.5"; .port = "80"; } backend web2 { .host = "172.25.92.6"; .port = < c467 span class="hljs-string">"80"; } director lb round-robin { #调度策略rr,调度集群名lb { .backend = web1; } { .backend = web2; } } sub vcl_recv { if (req.http.host ~ "^(www.)?test.com") { set req.http.host = "www.test.com"; set req.backend = lb; #此处修改 return (pass); } elsif (req.http.host ~ "^bbs.test.com") { set req.backend = web2; } else {error 404 "test cache"; } [root@server4 ~]# varnishadm ban.url .*$ #清空缓存 [root@server4 ~]# /etc/init.d/varnish restart Stopping Varnish Cache: [ OK ] Starting Varnish Cache: [ OK ]
server6上:
[root@server6 ~]# vim /etc/httpd/conf/httpd.conf 990 NameVirtualHost *:80 1011 <VirtualHost *:80> 1012 DocumentRoot /var/www/html 1013 ServerName bbs.test.com 1014 </VirtualHost> 1017 <VirtualHost *:80> 1018 DocumentRoot /www 1019 ServerName www.test.com 1020 </VirtualHost> [root@server6 ~]# mkdir /www [root@server6 ~]# cd /www/ [root@server6 www]# ls [root@server6 www]# vim index.html <h1>www.test.com-server6</h1>
测试:
在主机上:
[root@foundation92 Desktop]# curl bbs.test.com
<h1>bbs.test.com</h1>[root@foundation92 Desktop]# curl www.test.com
<h1>www.test.com</h1>[root@foundation92 Desktop]# curl www.test.com
<h1>www.test.com-server6</h1>
[root@foundation92 Desktop]# curl www.test.com
<h1>www.test.com</h1>[root@foundation92 Desktop]# curl www.test.com
<h1>www.test.com-server6</h1>
可以看出实现了轮叫算法的负载均衡。
七,cdn推送系统的搭建:
[root@server4 ~]# yum install -y httpd [root@server4 ~]# vim /etc/httpd/conf/httpd.conf 136 Listen 8080 [root@server4 ~]# /etc/init.d/httpd start [root@server4 ~]# cd /var/www/html/ 在次目录下get bansys.zip yum isntall -y unzip php unzip -x bansys.zip cd bansys mv * .. cd .. rm -fr bansys bansys.zip vim config.php <?php //varnish主机列表 //可定义多个主机列表 $var_group1 = array( 'host' => array('172.25.92.4'), 'port' => '80', ); //varnish群组定义 //对主机列表进行绑定 $VAR_CLUSTER = array( 'www.test.com' => $var_group1, ); //varnish版本 //2.x和3.x推送命令不一样 $VAR_VERSION = "3"; ?> [root@server4 html]# vim /etc/varnish/default.vcl #指定可以在cdn推送的主机群组,名为test acl test { "127.0.0.1"; "172.25.92.0"/24; } backend web1 { .host = "172.25.92.5"; .port = "80"; } backend web2 { .host = "172.25.92.6"; .port = "80"; } director lb round-robin { { .backend = web1; } { .backend = web2; } } #vcl_recv定义了一些数据进入varnish缓存的策略 sub vcl_recv { if (req.request == "BAN") { if (!client.ip ~ test) { #不是test组里的客户端不可以被推送 error 405 "Not allowed."; } ban("req.url ~ " + req.url); error 200 "ban added"; } if (req.http.host ~ "^(www.)?test.com") { set req.http.host = "www.test.com"; set req.backend = lb; return (pass); } elsif (req.http.host ~ "^bbs.test.com") { set req.backend = web2; } else {error 404 "test cache"; } } [root@server4 html]# /etc/init.d/varnish restart [root@server4 html]# /etc/init.d/httpd restart
测试:在浏览器输入:172.25.92.4:8080
如何推送?
假如后端主机server5的index.html页面发生了变化,需要更新varnish缓存,则点击“http“,将“/index.html“写入白框,然后提交即可。
在server5上:curl www.test.com/index.html,使用完整url可以看见缓存更新后的效果
相关文章推荐
- Varnish安装与配置实现负载均衡
- Nginx反向代理与负载均衡:节点服务器单/多虚拟机配置+实验环境搭建+原理解析
- (1)LVS实现四层负载均衡的原理与配置
- Nginx反向代理与负载均衡:节点服务器单/多虚拟机配置+实验环境搭建+原理解析 推荐
- 快速实现配置Windows客户端访问在linux平台上所搭建的Samba服务器&&使用swat软件
- 使用ubuntu+haproxy+heartbeat搭建大规模WEB集群环境实现负载均衡。
- 如何实现CDN内容发布网全局负载均衡与内容请求路由
- 高性能HTTP加速器Varnish搭建、配置及优化 推荐
- 安装集群apache+tomcat实现负载均衡与集群的配置
- 搭建LVS实现负载均衡集群服务
- RIP实现等开销负载均衡的配置
- RIP实现等开销负载均衡的配置
- 高性能HTTP加速器Varnish搭建、配置及优化
- 详解之:linux下tomcat、nginx的负载均衡及memcached对session共享的实现配置详细总结
- 使用nginx来负载均衡,本文在window与linux下配置nginx实现负载
- 使用nginx来负载均衡 本文在window与linux下配置nginx实现负载
- nginx做反向代理,实现负载均衡基本配置。无法加载css,js或图片
- 反向代理概念以及apache,nginx配置反向代理实现负载均衡方法
- 如何在Linux实现一个网卡配置多个IP地址与多个网卡的负载均衡和冗余