Varinish缓存机制

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=eth0
ONBOOT=yes
BOOTPROTO=static
IPADDR=172.25.66.105
PREFIX=24
...
#yum源
vim /etc/yum.repos.d/rhel-source.repo
.....
name=Red Hat Enterprise Linux $releasever - $basearch - Source
baseurl=http://172.25.66.250/rhel6.5
gpgcheck=0
.....
#删除key
cd /etc/ssh/
rm -fr ssh_host_*
#修改主机名
hostname nename
vim /etc/sysconfig/network
.....
NETWORKING=yes
HOSTNAME=server0
.....
#解析
vim /etc/hosts
.....
172.25.66.105 server0
172.25.66.1 server1
172.25.66.2 server2
172.25.66.3 server3
172.25.66.4 server4
172.25.66.5 server5
172.25.66.6 server6
.....
#关闭selinux|iptables
chkconfig iptables off
    iptables参数:http://blog.csdn.net/beyondlpf/article/details/6902344
vim /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 ~]# ls
varnish-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]# ls
default.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 OK
Server: Apache/2.2.15 (Red Hat)
Last-Modified: Sun, 17 Sep 2017 06:52:12 GMT
ETag: "40ead-1b-5595d10d76358"
Content-Type: text/html; charset=UTF-8
Content-Length: 27
Accept-Ranges: bytes
Date: Sun, 17 Sep 2017 07:20:08 GMT
X-Varnish: 310134326 310134302
Age: 118
Via: 1.1 varnish
Connection: 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/html
1005     ServerName www.westos.org
1006 </VirtualHost>
1007 
1008 <VirtualHost *:80>     
1009     DocumentRoot /bbs
1010     ServerName bbs.westos.org
1011 </VirtualHost>
....
#测试:
[root@foundation66 Desktop]# curl bbs.westos.org
bbs
[root@foundation66 Desktop]# curl www.westos.org
Server2
[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.org
172.25.66.3     server3 
.....
[root@foundation66 ~]# for i in {1..10};do curl www.westos.org;done
server2
server3
server2
server3
server2
server3
server2
server3
server2
server3
[root@foundation66 ~]#

***此时已支持对后端的健康状况检查了,若其中一个宕机不会影响另一个


Varnish缓存部署方式及原理详解
    http://xinzong.blog.51cto.com/10018904/1782669

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
C语言是一种广泛使用的编程语言,它具有高效、灵活、可移植性强等特点,被广泛应用于操作系统、嵌入式系统、数据库、编译器等领域的开发。C语言的基本语法包括变量、数据类型、运算符、控制结构(如if语句、循环语句等)、函数、指针等。在编写C程序时,需要注意变量的声明和定义、指针的使用、内存的分配与释放等问题。C语言中常用的数据结构包括: 1. 数组:一种存储同类型数据的结构,可以进行索引访问和修改。 2. 链表:一种存储不同类型数据的结构,每个节点包含数据和指向下一个节点的指针。 3. 栈:一种后进先出(LIFO)的数据结构,可以通过压入(push)和弹出(pop)操作进行数据的存储和取出。 4. 队列:一种先进先出(FIFO)的数据结构,可以通过入队(enqueue)和出队(dequeue)操作进行数据的存储和取出。 5. 树:一种存储具有父子关系的数据结构,可以通过中序遍历、前序遍历和后序遍历等方式进行数据的访问和修改。 6. 图:一种存储具有节点和边关系的数据结构,可以通过广度优先搜索、深度优先搜索等方式进行数据的访问和修改。 这些数据结构在C语言中都有相应的实现方式,可以应用于各种不同的场景。C语言中的各种数据结构都有其优缺点,下面列举一些常见的数据结构的优缺点: 数组: 优点:访问和修改元素的速度非常快,适用于需要频繁读取和修改数据的场合。 缺点:数组的长度是固定的,不适合存储大小不固定的动态数据,另外数组在内存中是连续分配的,当数组较大时可能会导致内存碎片化。 链表: 优点:可以方便地插入和删除元素,适用于需要频繁插入和删除数据的场合。 缺点:访问和修改元素的速度相对较慢,因为需要遍历链表找到指定的节点。 栈: 优点:后进先出(LIFO)的特性使得栈在处理递归和括号匹配等问题时非常方便。 缺点:栈的空间有限,当数据量较大时可能会导致栈溢出。 队列: 优点:先进先出(FIFO)的特性使得

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值