Varinish缓存机制

来源:互联网 发布:淘宝卖家怎么删除订单 编辑:程序博客网 时间:2024/06/05 02:42

Go|Python|Java

1.了解:https://www.unixhot.com/page/ops

运维社区:运维知识体系运维发展趋势(个人理解)    打杂(小公司啥都干)->分层(应用运维、系统运维、基础运维、运维开发等)->场景化(分业务)->自动化(最终大家的目标都是自动化)

2.层级

客户端层    浏览器    DNS(重要)    客户端/APP外部    第三方cdn(缓存)        可以摆脱地理上的限制    云计算        云计算管理员        工程师(需要开发)        直播|游戏平台网络层---(CCNA|CCNP|CCIE)|(RHCSA|RHCE|RHCA)|(OCP|OCM)|(RHCA+CCIE+OCM)    (连接到企业的路由器交换机)    独立出来接入层    负载均衡        四层            主要在数据流分流        七层(OSI七层模型****)        四层转发,七层代理    反向代理缓存应用服务层    WEB层        curl -I www.baidu.com        curl -I www.taobao.com        curl -I www.163.com        HTTP协议、Web服务器(静态)        动态网页需要应用服务器处(tomcat)理       应用层    业务层        业务实现        服务层    分布式层        消息队列(限流,否则会产生雪崩现象)存储层    文件存储        分布式存储(主)    DAL        数据访问层    数据存储(热数据|冷数据)        Mysql(主)基础服务层容器层操作系统层基础设施层运维产品化运维服务化测试和开发相关运维管理体系运维发展趋势运维自动化发展趋势 

3.cdn加速缓存
4.IOE IBM+ORACLE+EMC
5.缓存体系:https://www.unixhot.com/page/cache

6.创建封装虚拟机

#母镜像保持只读,不要再开启创建母镜像base#封装虚拟机尽量使用 ip addr 命令#网卡cd /etc/udev/rm -fr 70...net(删除MAC地址绑定)vim /etc/sysconfig/network-scripts/ifcf-eth0...DEVICE=eth0ONBOOT=yesBOOTPROTO=staticIPADDR=172.25.66.105PREFIX=24...#yum源vim /etc/yum.repos.d/rhel-source.repo.....name=Red Hat Enterprise Linux $releasever - $basearch - Sourcebaseurl=http://172.25.66.250/rhel6.5gpgcheck=0.....#删除keycd /etc/ssh/rm -fr ssh_host_*#修改主机名hostname nenamevim /etc/sysconfig/network.....NETWORKING=yesHOSTNAME=server0.....#解析vim /etc/hosts.....172.25.66.105 server0172.25.66.1 server1172.25.66.2 server2172.25.66.3 server3172.25.66.4 server4172.25.66.5 server5172.25.66.6 server6.....#关闭selinux|iptableschkconfig iptables off    iptables参数:http://blog.csdn.net/beyondlpf/article/details/6902344vim /etc/sysconfig/selinux .....SELINUX=disabled.....

7.创建两个虚拟机

cd /var/lib/libvirt/images  #镜像保存目录qemu-img  create -f  qcow2 -b  rhel6.5.qcow2 server1架构:    http://zhuanlan.51cto.com/columnlist/shenj/(58沈剑)    http://www.cnblogs.com/codeon/p/6206308.html(一分钟了解负载均衡的一切)

首先一张图让你了解缓存知识体系
这里写图片描述

&&&Varinish缓存机制:

***Varinis工作流程:    Varnish与一般服务器软件类似,分为master(management)进程和child(worker,主要做cache的工作)进程。master进程读入命令,进行一些初始化,然后fork并监控child进程。child进程分配若干线程进行工作,主要包括一些管理线程和很多woker线程。针对文件缓存部分,master读入存储配置(-s file[,path[,size[,granularity]]] ),调用合适的存储类型,然后创建/读入相应大小的缓存大文件。接着,master初始化管理该存储空间的结构体。这些变量都是全局变量,在fork以后会被child进程所继承(包括文件描述符)。    在child进程主线程初始化过程中,将前面打开的存储大文件整个mmap到内存中(如果超出系统的虚拟内存,mmap失败,进程会减少原来的配置mmap大小,然后继续mmap),此时创建并初始化空闲存储结构体,挂到存储管理结构体,以待分配。    接着,真正的工作开始,Varnish的某个负责接受新HTTP连接的线程开始等待用户,如果有新的HTTP连接过来,它总负责接收,然后叫醒某个等待中的线程,并把具体的处理过程交给它。Worker线程读入HTTP请求的URI,查找已有的object,如果命中则直接返回并回复用户。如果没有命中,则需要将所请求的内容,从后端服务器中取过来,存到缓存中,然后再回复。    分配缓存的过程是这样的:它根据所读到object的大小,创建相应大小的缓存文件。为了读写方便,程序会把每个object的大小变为最接近其大小的内存页面倍数。然后从现有的空闲存储结构体中查找,找到最合适的大小的空闲存储块,分配给它。如果空闲块没有用完,就把多余的内存另外组成一个空闲存储块,挂到管理结构体上。如果缓存已满,就根据LRU机制,把最旧的object释放掉。    释放缓存的过程是这样的:有一个超时线程,检测缓存中所有object的生存期,如果超初设定的TTL(Time To Live)没有被访问,就删除之,并且释放相应的结构体及存储内存。注意释放时会检查该存储内存块前面或后面的空闲内存块,如果前面或后面的空闲内存和该释放内存是连续的,就将它们合并成更大一块内存。    整个文件缓存的管理,没有考虑文件与内存的关系,实际上是将所有的object都考虑是在内存中,如果系统内存不足,系统会自动将其换到swap空间,而不需要varnish程序去控制。    **在有效的缓存时间内,访问的是缓存的页面,当设置的缓存时间到期后,自动更新后端服务器刷新后的页面

varinish工作原理:

http://blog.csdn.net/wangpengqi/article/details/8900896    http://467754239.blog.51cto.com/4878013/1577216/

实验:

rhel6.5     iptables|selinux off

Server1:

[root@server1 ~]# lsvarnish-3.0.5-1.el6.x86_64.rpm  varnish-libs-3.0.5-1.el6.x86_64.rpm[root@server1 ~]# rpm -ivh *   #需要gcc环境[root@server1 ~]# yum install gcc -y[root@server1 ~]# cd /etc/varnish/[root@server1 varnish]# lsdefault.vcl  secret[root@server1 varnish]# vim default.vcl.....  7 backend default {  8   .host = "172.25.66.2";    #定义后后端服务器  9   .port = "80";.....[root@server1 varnish]# vim /etc/sysconfig/varnish  #varinsh 参数优化..... 66 VARNISH_LISTEN_PORT=80....[root@server1 varnish]# vim /etc/security/limits.conf [root@server1 ~]# /etc/init.d/varnish start    #开启varnish服务Starting Varnish Cache:                                    [  OK  ][root@server1 ~]# Server2(1)安装 https 服务(2)写测试页面测试:(查看缓存命中)[root@foundation66 pub]# curl -I server1    #查看缓存信息HTTP/1.1 200 OKServer: Apache/2.2.15 (Red Hat)Last-Modified: Sun, 17 Sep 2017 06:52:12 GMTETag: "40ead-1b-5595d10d76358"Content-Type: text/html; charset=UTF-8Content-Length: 27Accept-Ranges: bytesDate: Sun, 17 Sep 2017 07:20:08 GMTX-Varnish: 310134326 310134302Age: 118Via: 1.1 varnishConnection: keep-alive  #状态[root@foundation66 pub]# curl  server1      #查看缓存内容是否命中<h1>www.westos.org.server2[root@foundation66 pub]# ***在设置的缓存时间内,会访问到的是同一页面,缓存失效后则自动刷新后端页面

varinish常用命令

###通过 varnishadm 手动清除缓存# varnishadm ban.url .*$#清除所有# varnishadm ban.url /index.html#清除 index.html 页面缓存# varnishadm ban.url /admin/$#清除 admin 目录缓存

定义不同域名站点的后端服务器

server2添加虚拟主机[root@server2 ~]# vim /etc/httpd/conf/httpd.conf ..... 990 NameVirtualHost *:80   #开启虚拟i服务1003 <VirtualHost *:80>     #定义虚拟主机1004     DocumentRoot /var/www/html1005     ServerName www.westos.org1006 </VirtualHost>1007 1008 <VirtualHost *:80>     1009     DocumentRoot /bbs1010     ServerName bbs.westos.org1011 </VirtualHost>....#测试:[root@foundation66 Desktop]# curl bbs.westos.orgbbs[root@foundation66 Desktop]# curl www.westos.orgServer2[root@foundation66 Desktop]#

在Varinish上定义后端集群服务

[root@server1 ~]# vim /etc/varnish/default.vcl .....  7 backend server2 {  8   .host = "172.25.66.2";  9   .port = "80"; 10 } 11 backend server3 { 12   .host = "172.25.66.3"; 13   .port = "80"; 14 } 15  16 director lb round-robin{    #把多个后端聚合成一个组,并进行健康状况检查 17         { .backend=server2; } 18         { .backend=server3; } 19 } 20  21 sub vcl_recv { 22 if (req.http.host ~ "^(www.)?westos.org") { 23 set req.http.host = "www.westos.org"; 24 set req.backend = lb; 25 return (pass);  #为了测试方便,不保存缓存 26 } elsif (req.http.host ~ "^bbs.westos.org") { 27 set req.backend = server2; 28 } else {error 404 "westos cache";    }    }.....

命中缓存测试

[root@foundation66 ~]# cat /etc/hosts.....172.25.66.1     www.westos.org www.xiaminjie.com server1 172.25.66.2     www.westos.org   westos.org  bbs.westos.org172.25.66.3     server3 .....[root@foundation66 ~]# for i in {1..10};do curl www.westos.org;doneserver2server3server2server3server2server3server2server3server2server3[root@foundation66 ~]#***此时已支持对后端的健康状况检查了,若其中一个宕机不会影响另一个Varnish缓存部署方式及原理详解    http://xinzong.blog.51cto.com/10018904/1782669

—–好啦,一个简单的varinish缓存就部署好啦!—–

原创粉丝点击