企业级缓存系统varnish应用与实战_第1页
企业级缓存系统varnish应用与实战_第2页
企业级缓存系统varnish应用与实战_第3页
企业级缓存系统varnish应用与实战_第4页
企业级缓存系统varnish应用与实战_第5页
已阅读5页,还剩106页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

马哥教育IT人的高薪职业学院学高端IT

·

赚取高薪

·就到马哥教育马哥教育二阶段实战课程Linux云计算运维工程师互联网企业的基石,实操类高薪人才,拥有服务集群、虚拟化、Web应用、自动化、云计算等核心技术Linux管理和服务Linux企业级应用10+高级模块模块均为互联网公司常用工具20+实战演练每个模块都结合企业级应用进行演练面试技巧模拟真实面试场景,全方面掌握面试各个环节企业级项目通过企业级项目,深刻掌握运维工程师工作要领马哥Linux马哥教育二阶段入门项目马哥教育二阶段最终项目逐步实现大型互联网运维架构方案掌握互联网运维架构模型实现单台服务器Web架构实现多台服务器集群架构实现Web缓存、存储多级高级架构实现监控体系、安全体系实现运维自动化方案实现虚拟化、云计算架构企业项目全面操练Linux运维工程师职能划分Linux云计算工程师三大核心职能平台架构组建负责参与并审核架构设计的合理性和可运维性,搭建运维平台技术架构,通过开源解决方案,以确保在产品发布之后能高效稳定的运行,保障并不断提升服务的可用性,确保用户数据安全,提升用户体验。负责用运维技术或者运维平台确保产品可以高效的发布上线,负责保障产品7*24H稳定运行,在此期间对出现的各种问题可以快速定位并解决;在日常工作中不断优化系统架构和部署的合理性,以提升系统服务的稳定性。日常运营保障性能、效率优化用自动化的工具/平台提升软件在研发生命周期中的工程效率。不断优化系统架构、提升部署效率、优化资源利用率支持产品的不断迭代,需要不断的进行架构优化调整。以确保整个产品能够在功能不断丰富和复杂的条件下,同时保持高可用性。企业级缓存系统varnish应用与实战ABCD项目介绍模块讲解实战演练企业级应用1项目介绍dns

udp53解析过程apachehttpwebserverworkerpreforkevents文件共享nfssambavsftpnas网络文件服务器syslogiptables四表五链目标地址转换>

源地址转换iptables-AINPUT-s-p--dport80-jDROPnginx

web反向代理缓存邮件httpserverlocationupstreamproxy_passproxy_cache_pathzonelvsDRNATTUNFULL-NATkeepalivedvrrphaproxy4-7globaldefaultfrontendbackendcheckrise3fall2listennginxvarnish

6081pipepassmax-ageetaglastmodified7172.17192.168企业级缓存系统varnish应用与实战随着公司业务快速发展,公司的电子商务平台已经聚集了很多的忠实粉丝,公司也拿到了投资,这时老板想通过一场类似双十一的活动,进行一场大的促销,届时会有非常多的粉丝访问网站,你的总监与市场部门开完会后,确定活动期间会有平常10倍以上的访问请求,总监要求大幅增加网站容量,除了去扩容服务器之外,还有没有其他办法呢?实战项目五

如今,互联网应用规模不断扩大,应用不断增多,网络已经深入到我们生活的各个方面,给我们的日常生活带来极大方便,随着信息系统的业务扩展,网站用户增加,历史数据不断积累,业务不断增长,系统的响应速度、请求的处理能力开始下降,CPU和磁盘IO处理能力会成为瓶颈。如果在有限的硬件投入前提下,提高系统性能就成了主要解决问题手段,为了提供高性能的web服务,可采用包括负载均衡、页面静态化、数据库集群、缓存等多种技术方案,其中,缓存方案是目前主流的性能优化方式,对于网站来说,有很多特定信息系统的请求都是重复冗余的,我们的系统经常在做重复的计算和传输着相同的内容。这也就意味着在有限的计算资源条件下,可通过缓存技术,大幅提高请求处理能力以及处理速度。技术说明企业服务架构图马哥教育二阶段最终项目缓存,又称加速器,用于加速运行速度较快的设备与较慢设备之间的通信。基于程序的运行具有局部性特征其能实现加速的功能:缓存有效与否,是通过缓存命中率来衡量的。缓存命中,意味着在请求某资源时,在缓存中找到该资源,并响应给客户端。

缓存命中率的计算方式:hits/(hits+misses)(0-1)缓存是把之前访问到的数据及其周边的数据放置于具有更快速度的、效率更高的设备中来完成加速。使用缓存之后,资源的请求与响应过程由client–>server–>client改变为client–>cache[–>server]–>client。若在缓存中没有查找到相应的资源,将会由缓存向server请求该资源,这一过程,会造成额外的开销,若换成命中率过低,则会造成资源的浪费。因此,提高缓存的命中率是必然的。缓存介绍缓存之所以能够生效是程序的运行具有局部性特征:时间局部性:一个数据被访问过之后,可能很快会被再次访问到;空间局部性:一个数据被访问时,其周边的数据也有可能被访问到时效性:缓存空间耗尽:LRU,最近最少使用;(Leastrecentlyused,最近最少使用)缓存过期:到了缓存时间后失效缓存命中率:hit/(hit+miss)缓存的数据类型资源缓存:pagecache,staticcache;数据缓存:datacache;缓存系统的关键点浏览器的缓存机制浏览器的缓存机制浏览器缓存控制机制有两种:HTMLMeta标签vs.HTTP头信息1、HTMLMeta标签浏览器缓存机制,其实主要就是HTTP协议定义的缓存机制(如:Expires;Cache-control等)。但是也有非HTTP协议定义的缓存机制,如使用HTMLMeta标签,Web开发者可以在HTML页面的<head>节点中加入<meta>标签,代码如下:<METAHTTP-EQUIV="Pragma"CONTENT="no-cache">2、HTTP头信息浏览器的缓存机制浏览器的缓存机制1.0版本的Expires策略:Expires是Web服务器响应消息头字段,在响应http请求时告诉浏览器在过期时间前浏览器可以直接从浏览器缓存取数据,而无需再次请求。不过Expires是HTTP1.0的东西,现在默认浏览器均默认使用HTTP1.1,所以它的作用基本忽略。Expires的一个缺点就是,返回的到期时间是服务器端的时间,这样存在一个问题,如果客户端的时间与服务器的时间相差很大(比如时钟不同步,或者跨时区),那么误差就很大,所以在HTTP1.1版开始,使用Cache-Control:max-age=秒替代。1.1版本的Cache-control策略(重点关注):Cache-Control与Expires的作用一致,都是指明当前资源的有效期,控制浏览器是否直接从浏览器缓存取数据还是重新发请求到服务器取数据。只不过Cache-Control的选择更多,设置更细致,如果同时设置的话,其优先级高于Expires。浏览器的缓存机制值可以是public、private、no-cache、no-store、no-transform、must-revalidate、proxy-revalidate、max-age浏览器的缓存机制值可以是public、private、no-cache、no-store、no-transform、must-revalidate、proxy-revalidate、max-age浏览器的缓存机制2.Last-Modified/If-Modified-SinceLast-Modified/If-Modified-Since要配合Cache-Control使用。(1)Last-Modified:标示这个响应资源的最后修改时间。web服务器在响应请求时,告诉浏览器资源的最后修改时间。(2)If-Modified-Since:当资源过期时(使用Cache-Control标识的max-age),发现资源具有Last-Modified声明,则再次向web服务器请求时带上头If-Modified-Since,表示请求时间。web服务器收到请求后发现有头If-Modified-Since则与被请求资源的最后修改时间进行比对。若最后修改时间较新,说明资源又被改动过,则响应整片资源内容(写在响应消息包体内),HTTP200;若最后修改时间较旧,说明资源无新修改,则响应HTTP304(无需包体,节省浏览),告知浏览器继续使用所保存的cache。浏览器的缓存机制3.Etag/If-None-MatchEtag/If-None-Match也要配合Cache-Control使用。(1)Etag:web服务器响应请求时,告诉浏览器当前资源在服务器的唯一标识(生成规则由服务器觉得)。Apache中,ETag的值,默认是对文件的索引节(INode),大小(Size)和最后修改时间(MTime)进行Hash后得到的。(2)If-None-Match:当资源过期时(使用Cache-Control标识的max-age),发现资源具有Etage声明,则再次向web服务器请求时带上头If-None-Match(Etag的值)。web服务器收到请求后发现有头If-None-Match则与被请求资源的相应校验串进行比对,决定返回200或304。浏览器的缓存机制4.既生Last-Modified何生Etag?你可能会觉得使用Last-Modified已经足以让浏览器知道本地的缓存副本是否足够新,为什么还需要Etag(实体标识)呢?HTTP1.1中Etag的出现主要是为了解决几个Last-Modified比较难解决的问题:(1)Last-Modified标注的最后修改只能精确到秒级,如果某些文件在1秒钟以内,被修改多次的话,它将不能准确标注文件的修改时间(2)如果某些文件会被定期生成,当有时内容并没有任何变化,但Last-Modified却改变了,导致文件没法使用缓存(3)有可能存在服务器没有准确获取文件修改时间,或者与代理服务器时间不一致等情形Etag是服务器自动生成或者由开发者生成的对应资源在服务器端的唯一标识符,能够更加准确的控制缓存。Last-Modified与ETag是可以一起使用的,服务器会优先验证ETag,一致的情况下,才会继续比对Last-Modified,最后才决定是否返回200或者304。浏览器的缓存机制浏览器缓存:http1.0http1.1cache-controlcache-controlrequestnocachemax-age=互联网业务优化三大黄金法则1、把所有的请求尽可能在架构前层阶段交付,尽可能减少后端交互(pushahead)2、对于重复类的业务,尽最大程度的去做缓存策略(cacheisking)3、服务能用内存响应的,坚决不用硬盘(memoryisking)分析完需求后对项目进行分解,分解后分阶段去逐步完成各个环节需求分析针对硬件、CPU、内存、硬盘进行选型,对操作系统,软件版本年进行选型技术选型项目分解充分了解项目中所提出的需求,针对需求暂定出初步计划可行性方案探究架构方案设计针对业务场景,设计出对应的运维架构,从各个层面多维度保证业务方案对设计的方案进行可行性研究,验证架构的可行性,从业务的质

量、维护成本、可行性、可扩展性等多维度进行多角度衡量

项目准备下载最新稳定版本的安装包软件,并了解各软件包的组成结构模块掌握软件部署服务启动修改软件配置文件,并实现目标功能和效果将下载的软件包进行安装部署,并按照规范添加需要的功能掌握项目中各个模块功能的原理、角色、以及实现方式启动相关服务,并检查服务日志内容,保证服务进程、端口、状态正常软件准备配置修改项目实践效果检验2模块讲解:企业级缓存系统varnish应用与实战常见的缓存服务开源解决方案有varnish、nginx、squid、ats等。Varnish是一款高性能的开源HTTP加速器,挪威最大的在线报纸VerdensGang使用3台Varnish代替了原来的12台Squid,性能比以前更好。

Varnish的作者Poul-HenningKamp是FreeBSD的内核开发者之一,varnish项目是2006年发布的第一个版本0.9.距今已经有十年了,此文档之前也提过varnish还不稳定,那是2007年时候编写的,经过varnish开发团队和网友们的辛苦耕耘,现在的varnish已经很健壮。很多门户网站已经部署了varnish,并且反应都很好,甚至反应比squid还稳定,且效率更高,资源占用更少。相信在反向代理,web加速方面,varnish已经有足够能力代替squid。Varnish是什么1、Varnish的稳定性很高,两者在完成相同负荷的工作时,Squid服务器发生故障的几率要高于Varnish,因为使用Squid要经常重启;2、Varnish访问速度更快,因为采用了“PageCache”技术,所有缓存数据都直接从内存读取(映射),而squid是从硬盘读取,因而Varnish在访问速度方面会更快;3、Varnish可以支持更多的并发连接,因为Varnish的TCP连接释放要比Squid快,因而在高并发连接情况下可以支持更多TCP连接;4、Varnish可以通过管理端口,使用正则表达式批量的清除部分缓存,而Squid是做不到的;5、squid属于是单进程使用单核CPU,但Varnish是通过fork形式打开多进程来做处理,所以可以合理的使用所有核来处理相应的请求Varnish的特性varnish主要运行两个进程:Management进程和Child进程(也叫Cache进程)。Management进程主要实现应用新的配置、编译VCL、监控varnish、初始化varnish以及提供一个命令行接口等。Management进程会每隔几秒钟探测一下Child进程以判断其是否正常运行,如果在指定的时长内未得到Child进程的回应,Management将会重启此Child进程。Child进程包含多种类型的线程,Varnish依赖“工作区(workspace)”以降低线程在申请或修改内存时出现竞争的可能性。在varnish内部有多种不同的工作区,其中最关键的当属用于管理会话数据的session工作区。Acceptor线程:接收新的连接请求并响应;Worker线程:child进程会为每个会话启动一个worker线程,此worker线程真正来管理缓存,构建响应报文,因此,在高并发的场景中可能会出现数百个worker线程甚至更多;Expiry线程:从缓存中清理过期内容;Varnish的架构Varnish的架构Varnish安装方式Varnish安装常用两种方式,yum安装和源码包安装yum安装:通常是在线安装,好处是安装方式简单,不易出错;常用的安装yum源为epel源码包安装:是先将Varnish的源码下载下来,在自己的系统里编译生成可执行文件,然后执行,好处是因为是在自己的系统上编译的,更符合自己系统的性能,也就是说在自己的系统上执行Varnish服务性能效率更好。(推荐)区别:路径和启动方式不同,支持的模块也不同。Varnish程序路径主程序:/usr/sbin/varnishd命令行管理工具程序:/usr/bin/varnishadm主配置文件:/etc/varnish/default.vcl性能配置文件:/etc/varnish/varnish.paramsUnitfile:/usr/lib/systemd/system/varnish.service(centos7)Init.file:/etc/init.d/varnish(centos6)Varnish配置文件讲解Varnish的主配置文件路径一般在/etc/varnish/default.vcl下(yum安装)VCL,VarnishConfigurationLanguage是varnish配置缓存策略的工具,它是一种基于“域”(可想象与iptables的几个链,也就是类似钩子函数)的简单编程语言,它支持有限的算术运算和逻辑运算操作、允许使用正则表达式进行字符串匹配、允许用户使用set自定义变量、支持if判断语句,也有内置的函数和变量等。使用VCL编写的缓存策略通常保存至.vcl文件中,其需要编译成二进制的格式后才能由varnish调用。事实上,整个缓存策略就是由几个特定的子例程如vcl_recv、vcl_hash等组成,它们分别在不同的位置(或时间)执行,如果没有事先为某个位置自定义子例程,varnish将会执行默认的定义。VCL策略在启用前,会由management进程将其转换为C代码,而后再由gcc编译器将C代码编译成二进制程序。编译完成后,management负责将其连接至varnish实例,即child进程。正是由于编译工作在child进程之外完成,它避免了装载错误格式VCL的风险。因此,varnish修改配置的开销非常小,其可以同时保有几份尚在引用的旧版本配置,也能够让新的配置即刻生效。编译后的旧版本配置通常在varnish重启时才会被丢弃,如果需要手动清理,则可以使用varnishadm的vcl.discard命令完成。Varnish配置文件讲解varnish程序功能的配置文件介绍RELOAD_VCL=1设置为1表示当使用systemctlreloadvarnish时,会自动重新装载vcl的配置文件,也就是能够让新的配置生效VARNISH_VCL_CONF=/etc/varnish/default.vcl加载的缓存策略的配置文件路径#VARNISH_LISTEN_ADDRESS=varnish服务监听的地址,默认是监听在本机所有可用的地址上VARNISH_LISTEN_PORT=6081#varnish监听的端口,因为varnish要作为web服务器的反代进行工作时,才能将http的内容缓存,一般要将其改为80端口,但是实际生产环境中,varnish一般是处于前端调度器的后面,所以可以在前端调度器上将调度的端口改为此处的端口也可以VARNISH_ADMIN_LISTEN_ADDRESS=varnish管理接口监听的地址,监听在表示只允许从本机登录进行管理VARNISH_ADMIN_LISTEN_PORT=6082varnish管理接口监听的端口VARNISH_SECRET_FILE=/etc/varnish/secretvarnish管理时的秘钥文件VARNISH_STORAGE="file,/var/lib/varnish/varnish_storage.bin,1G"varnish缓存时,使用哪种存储方式对缓存内容进行存储,本处是指使用file文件方式,存在/var/lib/varnish/varnish_storage.bin文件中,总共使用1G大小的空间如果要使用内存缓存,则可以定义为:"malloc,400M"在很多生产环境还是使用file,但是将文件放在固态硬盘,如果希望性能更好点,放在PCI-E的固态硬盘fution-IOVARNISH_TTL=120如果后端服务器没有指明缓存内容的TTL时间,则varnish自身为缓存定义的TTL时间VARNISH_USER=varnishVARNISH_GROUP=varnishVarnish配置文件讲解Varnish配置文件讲解Varnish配置文件讲解VCL有多个状态引擎,状态之间存在相关性,但状态引擎彼此间互相隔离;每个状态引擎可使用return(x)指明关联至哪个下一级引擎;每个状态引擎对应于vcl文件中的一个配置段vcl_recv:接受用户请求进varnish的入口的引擎,接受到结果之后,利用return(lookup),将请求转交给vcl_hash引擎进行处理vcl_hash:接受到用户请求后,对用户请求的URL进行hash计算,根据请求的首部信息,以及hash结果进行下一步处理的引擎vcl_hit:经过vcl_hash引擎处理后,发现用户请求的资源本地有缓存,则vcl_hash引擎通过return(hit)将请求交给vcl_hit引擎进行处理,vcl_hit引擎处理后将请求交给vcl_deliver引擎,vcl_deliver引擎构建响应报文,响应给用户vcl_miss:经过vcl_hash引擎处理后,发现用户请求的资源本地没有缓存,则vcl_hash引擎通过return(miss)将请求交给vcl_miss引擎进行处理Varnish配置文件讲解vcl_purge:经过vcl_hash引擎处理后,发现请求是对缓存的内容进行修剪时,则通过return(purge)交给vcl_purge引擎进行处理,vcl_purge引擎处理后,利用vcl_synth引擎将处理的结果告知给用户vcl_pipe:经过vcl_hash引擎处理后,发现用户请求的报文varnish无法理解,则通过return(pipe),将请求交给vcl_pipe引擎,pipe引擎直接将请求交给后端真实服务器vcl_pass:当请求经过vcl_hash处理后,发现请求报文不让从缓存中进行响应或其他原因没办法查询缓存,则由return(pass)或return(hit-for-pass)交由vcl_pass引擎进行处理vcl_backend_fetch:当发现缓存未命中或由vcl_pass传递过来的某些不能查询缓存的请求,交由vcl_backend_fetch引擎处理,vcl_backend_fetch引擎会向后端真实web服务器发送请求报文,请求对应的资源vcl_backend_response:当后端发送响应报文到varnish后,会由vcl_backend_resonse引擎进行处理,如:判断响应的内容是否可缓存,如果能缓存,则缓存下来后,交给vcl_deliver引擎,如果不能缓存,则直接交给vcl_deliver引擎,vcl_deliver引擎构建响应报文给客户端Varnish配置文件讲解varnish4.0版本的两个特殊的引擎vcl_init:在处理任何请求之前要执行的vcl的代码,主要用于初始化VMOD,可用在后端主机有多台时,借助此引擎完成多台主机的负载均衡效果vcl_fini:所有的请求都已经结束,在vcl配置被丢弃时调用;主要用于清理VMODVarnish配置文件讲解常见的状态引擎之间的处理流程为:如果缓存命中:用户请求–>vcl_recv–>vcl_hash–>vcl_hit–>vcl_deliver–>响应给用户如果缓存未命中:用户请求–>vcl_recv–>vcl_hash–>vcl_miss–>vcl_backend_fetch–>后端服务器接受请求发送响应报文–>vcl_backend_response–>vcl_deliver或:用户请求–>vcl_recv–>vcl_hash–>vcl_miss–>vcl_pass–>vcl_backend_fetch–>后端服务器接受请求发送响应报文–>vcl_backend_response–>vcl_deliver–>响应给用户如果不能从缓存中进行响应用户请求–>vcl_recv–>vcl_hash–>vcl_pass–>vcl_backend_fetch–>后端服务器接受请求发送响应报文–>vcl_backend_response–>vcl_deliver–>响应给用户如果请求报文无法理解用户请求–>vcl_recv–>vcl_pipe–>交给后端服务器Varnish配置文件讲解vcl语法格式<1>配置文件第一个非注释行必须是vcl4.0,标明此vcl配置文件是基于vcl4.0版本<2>//、#或/comment/用于单行或多行注释<3>sub$NAME定义函数,子例程<4>不支持循环,支持条件判断,有内置变量<5>使用终止语句return(XXX),没有返回值,仅仅是标明下一步交给哪个状态引擎,没有走默认<6>域专用,语句用{}括起来,用sub声明,指明为哪一段的专用代码,如:subvcl_recv{…},可理解为一个配置段<7>每个语句必须以;分号结尾<8>每个变量有其能使用的引擎的位置,可理解为变量由其可用的配置段<9>操作符:=(赋值)、==(等值比较)、~(模式匹配)、!(取反)、&&(逻辑与)、||(逻辑或)、>(大于)、>=(大于等于)、<(小于)、<=(小于等于)Varnish配置文件讲解vcl常见内建的函数VCL提供了几个函数来实现字符串的修改,添加bans,重启VCL状态引擎以及将控制权转回Varnish等。ban(expression):清除能被表达式匹配的所有缓存对象ban_url(regex):清除所有其URL能够由regex匹配的缓存对象;hash_data(str):对指定的字符串做hash计算后的结果return():当某VCL域运行结束时将控制权返回给Varnish,并指示Varnish如何进行后续的动作;其可以返回的指令包括:lookup、hash、hit、miss、pass、pipe、hit_for_pass、purge等;但某特定域可能仅能返回某些特定的指令,而非前面列出的全部指令;Varnish配置文件讲解vcl的内建变量的分类req.*:req.开头的变量,由客户端发来的http请求相关的变量:req.method表示客户端的请求方法bereq.*:bereq.开头的变量,varnish主机在向后端真实服务器发送http请求报文时的相关变量beresp.*:beresp.开头的变量,由后端真实服务器发来的http响应报文中的某些首部信息相关的变量,一般是在vcl_backend_response或vcl_backend_fenth引擎中调用resp.*:resp.开头的变量,由varnish响应给客户端的响应报文相关的变量obj.*:obj.开头的变量,对存储在缓存空间中的缓存对象属性的引用变量。obj开头的变量都是只读的obj.hits:某个缓存对象的缓存的命中次数client.,server.,storage.*:可用在所有面向客户端一侧的引擎中,也就是vcl_recv、vcl_pipe、vcl_hash、vcl_pass、vcl_purge、vcl_miss、vcl_hit、vcl_deliver、vcl_synth中用户还可自定义:setunset

Varnish配置文件讲解vcl的内建变量的分类Varnish配置文件讲解vcl的内建变量的分类Varnish配置文件讲解1.实现对登陆页面/login或admin的请求不检查缓存示例:vcl_recv{if(req.url~“(?i)^/(login|admin)”){return(pass);}}Varnish配置文件讲解2.拒绝某种请求访问示例:vcl_recv{if(req.http.User-Agent~“(?i)curl”){return(synth(405));}}(?i)即匹配时不区分大小写。Varnish配置文件讲解3.对资源去除cookie,并设定缓存时长示例:if(bereq.url~“(?i)\.(jpg|jpeg|png|gif|css|js)$”){unsetberesp.http.Set-Cookie;setberesp.ttl=3600s;}Varnish配置文件讲解4.显示后端主机IP示例:if(req.http.X-Fowarded-For){setreq.http.X-Forwarded-For=req.http.X-Forwarded-For+“,”+client.ip;}else{setreq.http.X-Forwarded-For=client.ip;}Varnish配置文件讲解5、配置varnish后端多台主机示例:importdirectors;#导入模块backendserver1{.host=“”;.port=“80”;}backendserver2{.host=“”;.port=“80”;}Varnish配置文件讲解6、定义后端健康监测.probe:定义健康状态检测方法;.url:检测时请求的URL,默认为”/”;.request:发出的具体请求;.window:基于最近的多少次检查来判断其健康状态;.threshhold:最近.window中定义的这么次检查中至有.threshhold定义的次数是成功的;.interval:检测频度;.timeout:超时时长;.expected_response:期望的响应码,默认为200;backendserver1{.host=“”;.port=“80”;.probe={.url=“/.healthcheck.html”#得先创建这个测试页面;.timeout=1s;.interval=2s;.window=5;.threshold=5;}}Varnish配置文件讲解7、varnish动静分离backenddefault{.host=“0”;.port=“80”;}backendappsrv{.host=“”;.port=“80”;}subvcl_recv{if(req.url~“(?i)\.php$”){setreq.backend_hint=appsrv;}else{setreq.backend_hint=default;}}Varnish配置文件实例Varnish配置文件实例Varnish配置文件实例Varnish配置文件实例Varnish配置文件实例Varnish配置文件实例Varnish配置文件实例Varnish配置文件实例Varnish配置文件实例Varnish配置文件实例Varnish配置文件实例Varnish管理工具介绍varnish管理工具varnishadm登录:

-S/etc/varnish/secret-T:80配置文件相关:

vcl.list:状态引擎列表;vcl.load:装载,加载并编译;vcl.use:激活;vcl.discard:删除;vcl.show[-v]<configname>:查看指定的配置文件的详细信息,可看默认配置;运行时参数:

param.show-l:显示列表;param.show<PARAM>param.set<PARAM><VALUE>缓存存储:

storage.list后端服务器:

backend.list3实战演练:Varnish实现高级负载均衡实战实现基于Keepalived+Haproxy+Varnish+LNMP企业级架构实战演练实现基于Keepalived+Haproxy+Varnish+LNMP企业级架构:一、环境准备:基于前面安装准备的haproxy+lnmp架构,在此基础上,准备两台varnish服务器,服务器配置好yum源、防火墙关闭、各节点时钟服务同步、各节点之间可以通过主机名互相通信二、安装步骤:1、iptables-F&&setenforing清空防火墙策略,关闭selinux2、拿两台服务器使用yum方式安装varnish软件3、后端准备好两台服务器配置好基于LNMP架构的web服务三、修改配置文件:1.修改/etc/varnish/default.vcl配置文件内容2、定义后端服务器组,以及检测机制和配置后端集群事件3、配置检测机制为http检测,配置后端两台webserver,算法为轮询。4、配置varnish入口函数vcl_recv,定义get请求类型被缓存5、配置vcl_deliver函数,设定缓存头部信息6、配置后端缓存文件类型,对图片缓存30天,对静态文件缓存7天7、配置Varnish程序功能的配置文件,使其以文件形式缓存,大小为1G,监听端口为60818、配置完成,保存退出,启动varnish服务。9、配置主haproxy完成后,同步配置到从haproxy,并启动所有服务。实战演练实现基于Keepalived+Haproxy+Varnish+LNMP企业架构:项目规划:centos系统服务器5台、两台用于做haproxy主从架构,两台作为后端server,一台做varnish缓存服务器配置好yum源、防火墙关闭、各节点时钟服务同步、各节点之间可以通过主机名互相通信机器名称IP配置服务角色备注haproxy-server-masterVIP:00DIP:负载均衡器主服务器开启路由功能配置keepalivedhaproxy-server-backupRIP:VIP:00后端服务器从服务器开启路由功能配置keepalivedvarnish01RIP:后端服务器网关指向DIP(桥接)rs02RIP:后端服务器网关指向DIP(桥接)rs01RIP:后端服务器网关指向DIP(桥接)实战演练实现基于Keepalived+Haproxy+Varnish+LNMP企业架构:四、检验缓存的效果1、配置完成后,通过访问varnish,看后端是否能被访问到?2、访问缓存信息,头部信息,能否正常被访问?3、关闭后端一台server,检查状态监测是否生效?4、访问动态内容,看是否会被缓存?5、重启缓存服务器,看缓存内容是否会被清空?6、修改缓存时间,看过期后,缓存内容是否还会提供?7、观察第一次访问,未被缓存的请求时间,和已经被缓存,缓存响应的请求时间4企业级应用:Varnish实现高级负载均衡实战Varnish常见工具使用1>、varnishstat–VarnishCachestatistics各种计数器-1批次显示,只显示1次-1-fFILED_NAME-l:可用于-f选项指定的字段名称列表;#varnishstat-1-fMAIN.cache_hit-fMAIN.cache_miss#varnishstat-l-fMAIN-fMEMPOOL2>、varnishtop–Varnishlogentryranking将日志文件中相关数据逆序排序-1Insteadofacontinouslyupdateddisplay,printthestatisticsonceandexit.-itaglist,可以同时使用多个-i选项,也可以一个选项跟上多个标签;筛选-I<[taglist:]regex>-xtaglist:排除列表-X<[taglist:]regex>varnishtop-iRespStatus查看响应码3>、varnishlog–DisplayVarnishlogs查看实时日志4>、varnishncsa–DisplayVarnishlogsinApache/NCSAcombinedlogformat标准日志格式Varnish进行缓存清理将缓存删除:curl-XPURGE87/index.htmlVarnish开启后端故障保护subvcl_recv{if(!req.backend.healthy){setreq.grace=30m;}}subvcl_fetch{setberesp.grace=30m;}#以上配置表示varnish将会将失效的缓存对象再多保留30分钟,此值等于最大的req.grace值即可;#而根据后端主机的健康状况,varnish可向前端请求提供30分钟过期内容Varnish三种缓存方式Varnish支持的后端缓存存储机制:

1、malloc[,size]使用内存缓存机制VARNISH_STORAGE="malloc,64M"

2、file[,path[,size[,granularity]]]通过内存映射文件方式存储

VARNISH_STORAGE="file,${VARNISH_STORAGE_FILE},${VARNISH_STORAGE_SIZE}"3、persistent[,path[,size[,granularity]]]通过文件持久存储

persistent,path,size前两者在重启后缓存都会消失,persistent可以永久保存缓存,但还为开发阶段Varnish企业常见面试题1、Varnish是做什么用的,能实现什么功能?2、Varnish目前常用的版本有哪些?3、Varnish有几种缓存方式,分别是什么?4、Varnish如何实现后端健康监测的?5、Varnish是如何清理缓存的?6、Varnish有哪些负载均衡算法?7、Varnish如何实行动静分离的?8、Varnish如何设定头部信息,观察缓存,web缓存相关的头部标示有哪些?9、Varnish、Nginx和squid都能实现缓存功能,区别是什么?全国布局马哥教育以北京校区为中心,郑州为分中心,在上海、广州、深圳、重庆等一线城市设立了办事处分部。每年有数十万学员受益于马哥教育组织的技术研讨会、技术培训课、网络公开课以及免费教学视频。马哥教育在国内IT行业主要城市-北京、上海、深圳等享有广泛赞誉,其学员在一线城市普遍高薪就业,与马哥教育建立人才合作关系的企业达500+家,深度合作企业100+家。8年积累2大中心4大办事处100+合作企业创新教育线上与线下相结合,开启智能云学堂学习模式教育体系360°全方位覆盖科学学习以专业的学习路线图引导学生学习,坚持一对一的学习跟踪项目实战2017全新课程体系,8年课程研发,10+项知名企业实战案例高薪就业学员普遍就业与北上广等一线城市,就业一到两年平均年薪高达18W+名师教学讲师平均8年以上工作经验,BAT一线名师亲自授课专业顾问配备国家认证的职业规划师与猎头顾问为您职业发展保驾护航2家顶级教育平台2016年成为腾讯课堂、51CTO学院官方认证战略合作伙伴20000+培训学员8年累计培养学员2万+,全网影响人数过百万500+合作企业建立人才合作关系的企业达500+家,深度合作企业100+家6000+小时课程时长课程研发课时超过6000小时,每年更新两个大版本60%高薪就业60%以上学员在互联网排名前300的企业高薪就业数据展现教育实力实力雄厚的专家团队国内知名Linux运维、云计算、大数据等领域技术布道师,曾服务过阿里巴巴、腾讯、京东、大众点评等流量过亿的知名产品,擅长Linux运维、企业级运维自动化、系统架构和优化、hadoop海量数据、IaaS云技术等相关技术,多年Linux实战和教学经验,通过现场、线上或视频授课影响学员数十万人,在业内享有广泛赞誉,其教学一贯被网友称赞为“马哥出品,必属精品”,其毕业的学员更是遍布国内各类涉及相关计算机技术的公司。马永亮-马哥马哥教育创始人&CEO,51CTO金牌讲师和专家博主国内知名架构师,集群、高可用、自动化技术专家,连续互联网创业者。曾服务过大众点评等多个亿级PV、百万并发企业站点,擅长独立设计过载保护、容灾、降级等企业级高级运维体系方案,所设计的方案为企业节省成本上千万。曾著作《mongodb分布式集群架构》、《手把手让你实现开源企业级web高并发解决方案》、《手把手让你了解linux上集群原理篇》获得几十万关注。张冠宇-张sir马哥教育联合创始人,马哥教育总经理兼COO王晓春(老王)首批红帽授权元老级认证Linux实战专家,拥有RHCI、RHCA、RHCVA、RHCE、CCNA、OCPMCT、MCSE、MCDBA等几十种专业证书认证,中国移动、中国联通、中国电信、中国人民银行、中国建设银行、中国工商银行、三星、空中客车等几十家上市公司和外企的特聘技术顾问。李松涛(Stanley)Linux运维实战专家,原腾讯游戏核心高级运维,《Ansible权威指南》作者,运维部落系列产品创始人,红帽认证工程师。操盘过十万CCU营收上亿的游戏项目,对自动化、平台架构、服务平台安全、云平台框架的常见疑难杂症有极强的处理能力。李远鹏(林旭)原唯品会高级运维工程师,第九城市页游部门运维负责人,红帽认证工程师参与并主导九城多款爆款网页游戏的维护,对高并发和高流量网站的应急预案、降级方案的制定有着丰富的经验。教学团队权欣欣(小欣)国家注册心理咨询师,环球MBA特邀企业EAP,国家灾后心理援助志愿咨询师曾服务于多个世界500强企业,对职业规划与个人心理成长有资深的经验,曾任心公艺艺术心理治疗项目教员,生活在左心理工作室沙盘治疗高级讲师,对学员的职业规划与职业心理成长有非常深入的研究和多个成功案例。张娟(小Z)前知名互联网企业就业主管,职业规划顾问曾与上百家互联网企业有合作关系,6年以上培训行业就业与教务管理经验,对学员定向就业与就业难题有非常资深的经验,帮助了数名学员成功入职理想的互联网企业。职业规划团队教学实力获得多方专业认可▲Linux核心专家▲51CTO专家博主▲红帽中心特邀专家▲国内首批RHCI认证教师▲授课老师持有RHCVA证书▲授课老师持有RHCE证书0302010405据国际知名科技机构思科预测,2021年全球手机用户将突破55亿。截至2016年底,中国手机用户达到13.16亿70%用户设备运行安卓系统,其底层操作系统是Linux。小到路由器,大到航空航天,甚至政府、券商、银行、互联网等系统应用,清一色为Linux操作系统。平均每家公司拥有Linux工程师不到2名,行业缺口380000人!比如:百度、阿里巴巴、腾讯、IBM、DELL、HP、联想、浪潮等公司。linux人才需求持续升温,Linux工程师在2016年全国日招聘量23978个,每年全国Linux工程师需求增长33.39%。Linux运维工程师行业前景33.39%/年30%10020元全国日招聘量平均月薪薪资增幅最低随着

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论