Varnish 安装及配置

本文涉及的产品
日志服务 SLS,月写入数据量 50GB 1个月
简介:

1、varnish系统架构


varnish主要运行两个进程:Management进程和Child进程(也叫Cache进程)。


Management进程主要实现应用新的配置、编译VCL、监控varnish、初始化varnish以及提供一个命令行接口等。Management进程会每隔几秒钟探测一下Child进程以判断其是否正常运行,如果在指定的时长内未得到Child进程的回应,Management将会重启此Child进程。


Child进程包含多种类型的线程,常见的如:

Acceptor线程:接收新的连接请求并响应;

Worker线程:child进程会为每个会话启动一个worker线程,因此,在高并发的场景中可能会出现数百个worker线程甚至更多;

Expiry线程:从缓存中清理过期内容;


Varnish依赖“工作区(workspace)”以降低线程在申请或修改内存时出现竞争的可能性。在varnish内部有多种不同的工作区,其中最关键的当属用于管理会话数据的session工作区。


2、varnish日志


为了与系统的其它部分进行交互,Child进程使用了可以通过文件系统接口进行访问的共享内存日志(shared memory log),因此,如果某线程需要记录信息,其仅需要持有一个锁,而后向共享内存中的某内存区域写入数据,再释放持有的锁即可。而为了减少竞争,每个worker线程都使用了日志数据缓存。


共享内存日志大小一般为90M,其分为两部分,前一部分为计数器,后半部分为客户端请求的数据。varnish提供了多个不同的工具如varnishlog、varnishncsa或varnishstat等来分析共享内存日志中的信息并能够以指定的方式进行显示。


3、VCL


Varnish Configuration Language (VCL)是varnish配置缓存策略的工具,它是一种基于“域”(domain specific)的简单编程语言,它支持有限的算术运算和逻辑运算操作、允许使用正则表达式进行字符串匹配、允许用户使用set自定义变量、支持if判断语句,也有内置的函数和变量等。使用VCL编写的缓存策略通常保存至.vcl文件中,其需要编译成二进制的格式后才能由varnish调用。事实上,整个缓存策略就是由几个特定的子例程如vcl_recv、vcl_fetch等组成,它们分别在不同的位置(或时间)执行,如果没有事先为某个位置自定义子例程,varnish将会执行默认的定义。


VCL策略在启用前,会由management进程将其转换为C代码,而后再由gcc编译器将C代码编译成二进制程序。编译完成后,management负责将其连接至varnish实例,即child进程。正是由于编译工作在child进程之外完成,它避免了装载错误格式VCL的风险。因此,varnish修改配置的开销非常小,其可以同时保有几份尚在引用的旧版本配置,也能够让新的配置即刻生效。编译后的旧版本配置通常在varnish重启时才会被丢弃,如果需要手动清理,则可以使用varnishadm的vcl.discard命令完成。


4、varnish的后端存储


varnish支持多种不同类型的后端存储,这可以在varnishd启动时使用-s选项指定。后端存储的类型包括:

(1)file:使用特定的文件存储全部的缓存数据,并通过操作系统的mmap()系统调用将整个缓存文件映射至内存区域(如果条件允许);

(2)malloc:使用malloc()库调用在varnish启动时向操作系统申请指定大小的内存空间以存储缓存对象;

(3)persistent(experimental):与file的功能相同,但可以持久存储数据(即重启varnish数据时不会被清除);


varnish无法追踪某缓存对象是否存入了缓存文件,从而也就无从得知磁盘上的缓存文件是否可用,因此,file存储方法在varnish停止或重启时会清除数据。而persistent方法的出现对此有了一个弥补,但persistent仍处于测试阶段,例如目前尚无法有效处理要缓存对象总体大小超出缓存空间的情况,所以,其仅适用于有着巨大缓存空间的场景。


选择使用合适的存储方式有助于提升系统性,从经验的角度来看,建议在内存空间足以存储所有的缓存对象时使用malloc的方法,反之,file存储将有着更好的性能的表现。然而,需要注意的是,varnishd实际上使用的空间比使用-s选项指定的缓存空间更大,一般说来,其需要为每个缓存对象多使用差不多1K左右的存储空间,这意味着,对于100万个缓存对象的场景来说,其使用的缓存空间将超出指定大小1G左右。另外,为了保存数据结构等,varnish自身也会占去不小的内存空间。


为varnishd指定使用的缓存类型时,-s选项可接受的参数格式如下:

malloc[,size] 或

    file[,path[,size[,granularity]]] 或

persistent,path,size {experimental}

file中的granularity用于设定缓存空间分配单位,默认单位是字节,所有其它的大小都会被圆整。



环境:

centos7.2

varnish server: 192.168.250.128

web server:  192.168.250.131

一、安装varnish(版本5.1.2-1.el7)

curl -s https://packagecloud.io/install/repositories/varnishcache/varnish5/script.rpm.sh | bash #######varnish 仓库

rpm -ihv http://dl.fedoraproject.org/pub/epel/7/x86_64/e/epel-release-7-9.noarch.rpm #####

jemalloc 以来包仓库地址

yum install jemalloc varnish -y

systemctl restart varnish

systemctl enable varnish

二、配置

web server:  192.168.250.131

yum install httpd -y

systemctl restart httpd; systemctl enable httpd

建立测试页

for i in {1..10};do echo "page $i on web1" > /var/www//html/test$i.html;done


varnish server: 192.168.250.128

vim /etc/varnish/default.vcl

backend default {        ###   后端主机

    .host = "192.168.250.131";  ######  后端主机地址(web server)

    .port = "80";       ############   后端主机端口

}

systemctl restart varnish

测试访问:

wKiom1kTLYzgKD0SAAAd1XYwwsw785.png

三、varnishadm 介绍

-S:指定安全认证文件

-T :127.0.0.1:6082   指定varnish 主机与管理端口

一般使用:varnishadm -S /etc/varnish/secret -T 127.0.0.1:6082 进入控制台

ping  检测主机存活

status 服务器状态信息

vcl.list 显示vcl 加载的文件

200        状态码

active auto/warm  0 boot 已激活  自动热加载  编号0(可以理解为版本号,配置文件改了以后,编号也会发生改变) 启动时加载的一个名字

例如:

vcl.load test default.vcl    

200        

VCL compiled.

vcl.list

200        

active      auto/warm  0 boot

available    auto/warm  0 test    可用的


vcl.use test    使用这个策略

200        

VCL 'test' now active


vcl.list

200        

available   auto/warm           0 boot

active      auto/warm          0 test  发现这个策略已被激活使用


vcl.use boot    应用这个策略

200        

VCL 'boot' now active


vcl.discard test   删除策略

200


vcl.list   查看

200        

active      auto/warm          0 boot

vcl.show boot   显示编译前的配置信息


param.show  运行时参数

param.set thread_pools 4   设置参数值为4,建议有几个cpu,设置为几个线程池数

param.show -l thread_pools  单独查看一个 运行参数的详细信息,也可以不加-l 参数

panic.show   显示子进程挂掉后的日志信息

panic.clear  清除日志信息


storage.list   显示存储类型(内存,文件,持久化)

backend.list  显示后端主机

ban.list  显示 缓存模式及缓存次数(可以指定删除缓存中的一些信息)

bans (默认模式):缓存过期后自动清零


四、varnish工具介绍(都是通过共享内存空间状态获取的)

log:

varnishlog:显示缓存在内存中的日志信息。

varnishncsa:显示类似与web服务器中的日志信息。

状态:

varnishtop:排序显示缓存时的详细信息

varnishstat:显示varnish状态  



本文转自 a120518129 51CTO博客,原文链接:http://blog.51cto.com/silencezone/1874793,如需转载请自行联系原作者
相关实践学习
【涂鸦即艺术】基于云应用开发平台CAP部署AI实时生图绘板
【涂鸦即艺术】基于云应用开发平台CAP部署AI实时生图绘板
相关文章
|
负载均衡 安全 中间件
Express——结合multer上传图片、EJS
Express——结合multer上传图片、EJS
264 0
|
自然语言处理 算法 数据挖掘
【数据挖掘】十大算法之PageRank连接分析算法
文章介绍了PageRank算法的基本概念和数学模型,包括如何通过一阶马尔科夫链定义随机游走模型以及如何计算网页的重要性评分,并提供了PageRank迭代算法的具体步骤。
369 0
|
应用服务中间件 持续交付 nginx
[nginx]借助nginx实现自动获取本机IP
[nginx]借助nginx实现自动获取本机IP
222 5
|
缓存 负载均衡 应用服务中间件
如何在 CentOS 7 上为 NGINX 安装开源 HTTP 加速器:Varnish
如何在 CentOS 7 上为 NGINX 安装开源 HTTP 加速器:Varnish
301 1
如何在 CentOS 7 上为 NGINX 安装开源 HTTP 加速器:Varnish
|
开发工具 git
如何创建git并上传
如何创建git并上传
129 0
|
Ubuntu
Ubuntu 20.04通过udev规则修改网卡名称(例如eth0)
注意:这种方法可能会对系统的网络配置产生影响,因此在生产环境中使用时需要谨慎。
1279 1
|
机器学习/深度学习 数据采集 算法
基于Apriori关联规则的电影推荐系统(附python代码)
这是一个基于Apriori算法的电影推荐系统概览。系统通过挖掘用户评分数据来发现关联规则,例如用户观看某部电影后可能感兴趣的其他电影。算法核心是逐层生成频繁项集并设定最小支持度阈值,之后计算规则的置信度。案例中展示了数据预处理、频繁项集生成以及规则提取的过程,具体包括用户评分电影的统计分析,如1-5部电影的评分组合。最后,通过Python代码展示了Apriori算法的实现,生成推荐规则,并给出了一个简单的推荐示例。整个过程旨在提高推荐的精准度,基于用户已评分的电影推测他们可能尚未评分但可能喜欢的电影。
基于Apriori关联规则的电影推荐系统(附python代码)
|
前端开发 Java Docker
【分享】记一次项目迁移(docker java | docker python)
该项目是一个前端Vue3和后端Python+Java的应用,原本部署在CentOS7服务器上通过宝塔面板管理。由于服务器即将到期,计划迁移到另一台使用OpenCloudOS和1Plane的服务器。在尝试构建Docker镜像时,首先为Java应用创建Dockerfile,成功构建并运行。对于Python应用,也创建了Dockerfile,并处理了依赖包的安装。在迁移过程中遇到Java项目加载验证码失败的问题,原因是缺少字体配置。通过在宿主机安装fontconfig并将相关字体文件复制到镜像中解决了问题。最后,前端Vue应用作为静态文件运行,如果使用反代理,需要进行相应配置。
218 1
|
存储 Dart 编译器
Dart编程语言中的数值类型与运算
Dart编程语言中的数值类型与运算
179 0
|
Ubuntu 开发工具
ubuntu 网卡 ens33 改名 eth0 方法
ubuntu 网卡 ens33 改名 eth0 方法
481 0