Varnish实现缓存、后端负载均衡和状态检测

本文介绍了Varnish作为高性能缓存和HTTP加速器的工作原理,包括缓存分配、释放机制和配置思路。通过实验展示了如何强制不检查缓存、配置多个后端主机、实现负载均衡以及监控后端主机状态。Varnish以其高效率和易管理性,被广泛应用于提升网站性能。
摘要由CSDN通过智能技术生成

简介

Varnish 是一款高性能且开源的反向代理服务器和 HTTP 加速器,其采用全新的软件体系机构,和现在的硬件体系紧密配合,与传统的 squid 相比,varnish 具有性能更高、速度更快、管理更加方便等诸多优点,很多大型的网站都开始尝试使用 varnish 来替换 squid,这些都促进 varnish 迅速发展起来。

挪威的最大的在线报纸 Verdens Gang(vg.no) 使用 3 台 Varnish 代替了原来的 12 台 Squid,性能比以前更好,这是 Varnish 最成功的应用案例。

varnish有community版本和enterprise版本。通常community版本即可够我们使用。企业版本有更多的功能。

缓存原理

Varnish 与一般服务器软件类似,分为 master 进程和 child 进程。Master 进程读入存储配置文件,调用合适的存储类型,然后创建 / 读入相应大小的缓存文件,接着 master 初始化管理该存储空间的结构体,然后 fork 并监控 child 进程。Child 进程在主线程的初始化的过程中,将前面打开的存储文件整个 mmap 到内存中,此时创建并初始化空闲结构体,挂到存储管理结构体,以待分配。Child 进程分配若干线程进行工作,主要包括一些管理线程和很多 worker 线程。
接着,开始真正的工作,varnish 的某个负责接收新 HTTP 连接线程开始等待用户,如果有新的 HTTP 连接过来,它总负责接收,然后唤醒某个等待中的线程,并把具体的处理过程交给它。Worker 线程读入 HTTP 请求的 URI,查找已有的 object,如果命中则直接返回并回复用户。如果没有命中,则需要将所请求的内容,从后端服务器中取过来,存到缓存中,然后再回复。

分配缓存的过程是这样的:它根据所读到 object 的大小,创建相应大小的缓存文件。为了读写方便,程序会把每个 object 的大小变为最接近其大小的内存页面倍数。然后从现有的空闲存储结构体中查找,找到最合适的大小的空闲存储块,分配给它。如果空闲块没有用完,就把多余的内存另外组成一个空闲存储块,挂到管理结构体上。如果缓存已满,就根据 LRU 机制,把最旧的 object 释放掉。

释放缓存的过程是这样的:有一个超时线程,检测缓存中所有 object 的生存期,如果超初设定的 TTL(Time To Live)没有被访问,就删除之,并且释放相应的结构体及存储内存。注意释放时会检查该存储内存块前面或后面的空闲内存块,如果前面或后面的空闲内存和该释放内存是连续的,就将它们合并成更大一块内存。

整个文件缓存的管理,没有考虑文件与内存的关系,实际上是将所有的 object 都考虑是在内存中,如果系统内存不足,系统会自动将其换到 swap 空间,而不需要 varnish 程序去控制。

缓存思想

实际生产中,要考虑如何提高命中率。

varnish配置

软件配置文件:/etc/varnish/varnish.params
缓存配置文件:/etc/varnish/default.vcl
varnish的管理命令:varnishadm

varnish的的软件配置文件/etc/varnish/varnish.params,其中指定了VARNISH_ADMIN_LISTEN_ADDRESSVARNISH_ADMIN_LISTEN_PORT,从字面意思来看,是管理监听地址和管理监听端口,不错,这个套接字就是管理varnish的套接字。

配置文件中还有一个监听端口,VARNISH_LISTEN_PORT=6081,这个是varnish对外监听web请求的端口,可是为什么是6081,而不是80 端口呢?因为varnish作为缓存服务器,常常是放在nginx反代的后面,这样不面对互联网,因此就不需要监听在80端口了。

varnish的缓存配置文件是以vcl结尾的文件,在配置文件/etc/varnish/varnish.params中指定默认的配置文件是VARNISH_VCL_CONF=/etc/varnish/default.vcl, 和其他软件不同的是,此缓存配置文件是需要编译成二进制文件后方可以使用。这就涉及到了varnish的管理命令了。

修改缓存配置后,如何生效?

1、使用varnishadm连接到varnish,注意尽量不要退出,否则将会不见了那些编译好的编译列表
varnishadm -S /etc/varnish/secr

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值