是一种开源方案。
Varnish Architecture
进程分为两类:management 进程和 (管理进程)Child/cache(子进程)
管理进程:编译VCL并应用新配置。监控varnish。初始化varnish,CLI接口。
Child/cache:
Acceptor:接受新的连接请求。
worker thread:处理用户请求。
Expire:请求缓存中的过期对象。
日志:Shared Memory Log:共享内存日志,默认大小一般为90MB,分为两部分,前一部分为计数器,后一部分为请求相关的数据。
log file:存放于内存。
vcl:varnish configuration language,缓存策略配置接口,基于“域“的简单编程语言。
内存分配与回收:malloc(), free()
在varnish中就是通过jemalloc-3.6.0-1.el7.x86_64
包来实现
varnish如何存储缓存对象:
1、file:将所有缓存对象存于单个文件,元数据存储与内存中,重启后元数据都没了,所以不支持持久机制。
2、malloc:缓存对象存于内存中。
3、persistent:基于文件的持久存储。
接下来安装varnish
系统:rhel7.3
epel源中就有varnish的安装包,所以我们在本地配置好epel源,直接yum install varnish
即可
vim /etc/yum.repos.d/epel.repo
name=Extra Packages for Enterprise Linux 7 – $basearch
#baseurl=http://download.fedoraproject.org/pub/epel/7/$basearch
mirrorlist=https://mirrors.fedoraproject.org/metalink?repo=epel-7&;arch=$basearch
failovermethod=priority
enabled=1
gpgcheck=0
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-EPEL-7
[epel-debuginfo]
name=Extra Packages for Enterprise Linux 7 – $basearch – Debug
#baseurl=http://download.fedoraproject.org/pub/epel/7/$basearch/debug
mirrorlist=https://mirrors.fedoraproject.org/metalink?repo=epel-debug-7&;arch=$basearch
failovermethod=priority
enabled=0
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-EPEL-7
gpgcheck=1
[epel-source]
name=Extra Packages for Enterprise Linux 7 – $basearch – Source
#baseurl=http://download.fedoraproject.org/pub/epel/7/SRPMS
mirrorlist=https://mirrors.fedoraproject.org/metalink?repo=epel-source-7&;arch=$basearch
failovermethod=priority
enabled=0
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-EPEL-7
gpgcheck=1
yum clean all
yum makecache
配置文件
/etc/varnish/default.vcl
/etc/varnish/varnish.params #该文件用于传递参数
在服务启动脚本里面定义了varnish.params文件。
配置varnish的三种应用:
1、varnishd应用程序的命令行参数:
监听的socket,使用的存储类型等等;
额外的配置参数:
-p param=value
-r param,param:设定只读参数列表
/etc/varnish/varnish.params
2、-p选项指明的参数:
运行时参数:可以程序运行时通过CLI接口进行配配置。
3、vcl:配置缓存系统的缓存机制
通过vcl配置文件进行配置
先编译,再配置,并且依赖于C编译器gcc
定义缓存方式:
在varnish.params文件中
VARNISH_STORAGE="malloc,256M" #malloc方式
#VARNISH_STORAGE="file,/var/lib/varnish/varnish_storage.bin,1G" #file方式
初步搭建缓存体系
缓存服务器:
[root@server7 ~]# vim /etc/varnish/default.vcl
backend default {
.host = "172.25.44.8";
.port = "80";
}
[root@server7 ~]# systemctl start varnish
在172.25.44.8(后端服务器)这台主机上定义web页面
[root@serevr8 ~]# cat /var/www/html/index.html
web pag for server8
[root@serevr8 ~]# systemctl start httpd
接下来就可以访问了
varnish命令行工具:
varnishadm
用法:
输入help查看命令列表
ping 用来探测服务器是否在线
start,stop用来开启和停止子进程,status用来查看子进程状态
vcl.list 列出所有vcl文件
active表示活动状态的,boot表示启动加载的
vcl.use表示使用哪个vcl文件,vcl.discard表示删除哪个vcl文件
vcl.load表示装载哪个文件为配置文件,它会先对default.vcl文件进行编译,编译后的文件命名为test,我们使用vcl.list看到的结果就是编译后的文件名。
active表示当前正在使用的vcl文件,available表示可用的vcl文件
启用test文件
param.show [-l] [] 显示运行时参数
param.set 用来设定参数所对应的值,例如thread_pools默认为2
我们可以将其设定为3
panic.show 显示panic(恐慌)信息
panic.clear 清除panic信息
storage.list 显示当前存储机制
vcl.show显示配置文件编译前的样子
backend.list 显示后端服务器列表
设置后端主机在线状态
backend.set_health <backend_expression>
ban用来清理缓存中的缓存对象
ban.list列出定义的清理规则。
varnishlog
用来显示varnish日志,由于显示的是共享内存中的信息,所以在命令行输入该命令回车后没有任何信息,我们刷新以下访问页面结果就出来了
varnishncsa 显示日志信息,也要先访问在查看
varnishtop进行排序,也要先敲入命令回车后,访问再查看
varnishstat查看varnish状态(统计数据)