varnish的简单使用

2024-01-08 18:52:11

安装

varnish已被收录进EPEL源,故可直接利用EPEL源进行yum安装
yum install -y varnish
在这里插入图片描述


配置
配置启动参数文件

vim /usr/lib/systemd/system/varnish.service
在这里插入图片描述

限定该进程的最大句柄数,最大打开文件数

# Maximum number of open files (for ulimit -n)
LimitNOFILE=131072



内存锁定,限制我们可以使用多大内存

# Locked shared memory (for ulimit -l)
# Default log size is 82MB + header
LimitMEMLOCK=82000

通过命令查看到,当前的最大文件数为182462
在这里插入图片描述

满足varnish的131072,就不用改动了,如果小于varnish的最大句柄数,可以将varnish的最大句柄数,调整小一些,达到系统的要求即可

ulimit -l
查看可以锁定的物理内存的最大值为64M
在这里插入图片描述

将这里改成64000
在这里插入图片描述


配置环境信息文件

/etc/varnish/varnish.params

这里指定了varnish的配置文件

指定了varnish的默认监听端口
在这里插入图片描述
这里要做反向代理实验,我就把端口改成80


配置varnish反向代理

varnish是不提供服务的
这里配置一台后端服务器来提供服务
这里是配置好web服务

在这里插入图片描述

配置varnish

vim /etc/varnish/default.vcl
在这里插入图片描述

在这里插入图片描述

启动varnish

systemctl start varnish

查看varnish的进程

一个是root开启的,它会用来读取各项配置,监控子进程
一个是varnish开启的,真实处理用户请求的进程

在这里插入图片描述

访问varnish服务的地址,就可以看到varnish反向代理的后端服务的页面了

在这里插入图片描述


更加直观的查看varnish缓存

curl -I 192.168.xx.xx(varnish的IP地址)

查看详细信息,可以看到,是通过varnish来读取后端的数据的
这里的Age 表示缓存过期时间,默认120秒,120秒后就会将缓存清空,再次从后端获取新的数据
在这里插入图片描述

编辑varnish配置文件

vim /etc/varnish/default.vcl

接收语句块
在这里插入图片描述

传送语句块
在这里插入图片描述

如果,命中缓存的次数大于0,就返回一句话HIT from cache,
如果不是就返回MISS from cache
在这里插入图片描述

obj.hit :某个对象在缓存中命中的次数

然后重启varnish

systemctl restrat varnish

再次curl一下

curl -I 192.168.xx.xxx(varnish的IP地址)

可以看到第一次访问的时候,返回的是MISS from cache,

第一次访问的时候,CDN节点没有所请求的数据的话,需要向后端请求数据,顺便将数据缓存在CDN节点,然后返回给客户端。
在这里插入图片描述

当我们再次访问的时候,读取的就是varnish的缓存
命中缓存的次数大于0,就返回一句HIT from cache
在这里插入图片描述


手动清除缓存

清除所有的缓存(慎用)

varnishadm ban req.url "~" /

ban :表示清除

req.url :表示客户端发送给varnish的请求报文中请求的url

/:表示的是,网页默认发布目录里面的所有内容

清除完后,再次访问,就返回MISS
在这里插入图片描述

从第二次开始有变成命中缓存


清除指定的缓存

varnishadm ban req.url "~" /index.html

清除指定缓存后,再访问,Age并没有从0开始,而是持续下去了
在这里插入图片描述

访问指定的页面时候,Age才会从0开始
在这里插入图片描述

说明清除的只是index.html的缓存,并不是全部的缓存


varnish配置多后端

首先准备好两台web服务器

配置多后端

vim /etc/varnish/default.vcl
在这里插入图片描述

backend web1 {
 .host = "192.168.xx.xxx1";
 .port = "80";
}

backend web2 {
 .host = "192.168.xx.xx2";
 .port = "80";
}

sub vcl_recv {

 if (req.http.host ~ "^(www.?)web1.com") {
  set req.http.host = "www.web1.com";
  set req.backend_hint = web1;
  }
 elsif (req.http.host ~ "^www.web2.com") {
  set req.backend_hint = web2;
  }
 else {
  return (synth(405));
  }
}
在本地配置域名解析

把两台后端服务器的域名都解析到varnish

192.168.xx.xxx www.web1.com www.web2.com

然后varnish通过判断请求的域名,来决定请求的去向

查看测试结果

在这里插入图片描述

在这里插入图片描述


负载均衡配置
导入模块

4.0版本以后,定义负载均衡时候,需要导入一个模块

ls /usr/lib64/varnish/vmods/libvmod_directors.so
在这里插入图片描述

在varnish的配置文件中这个位置导入模块
在这里插入图片描述

定义负载均衡调度器

在这里插入图片描述
负载均衡器的名字叫lb
调用的算法是round_robin轮询算法

sub vcl_init {
new lb = directors.round_robin();
lb.add_backend(web1);
lb.add_backend(web2);

}
调用负载均衡

在这里插入图片描述

定义在此处的意义是,当请求www.web1.com这个域名的时候,对后端两台服务器进行轮询访问
访问www.web2.com这个域名的时候,只访问web2这台服务器

sub vcl_recv {

if (req.http.host ~ "^(www.?)web1.com") {
 set req.http.host = "www.web1.com";
 set req.backend_hint = lb.backend();
}
elsif (req.http.host ~ "^www.web2.com") {
 set req.backend_hint = web2;
}
else {
 return (synth(405));
}
}

当你重启varnish服务后,会发现访问web1时候,并没有出现轮询的效果,
因为它一直在访问缓存
为了达到测试的效果,此处先让它不缓存

在这里插入图片描述

然后重启varnish服务

再次测试,就可以实现轮询访问后端两台服务器了

在这里插入图片描述

在这里插入图片描述

一直访web2,它并不会发生变化
在这里插入图片描述


varnish推送平台配置
通过图形化的方式简化缓存清理步骤

谷歌开源

下载地址:https://code.google.com/archive/p/varnish-php-bansys/downloads

在这里插入图片描述

部署

yum install -y php httpd unzip

解压bansys.zip到Apache的默认发布目录,然后将内容都移到至发布目录

unzip bansys.zip -d /var/www/html/

在这里插入图片描述

编辑配置文件

vim config.php

定义主机列表

填写varnish的主机的地址

因为varnish占用了80端口,所以Apache的端口就改成8080

在这里插入图片描述

绑定刚才定义的主机列表
在这里插入图片描述

保存退出

修改Apache的端口为8080

vim /etc/httpd/conf/httpd.conf

在这里插入图片描述

启动Apache

systemctl start httpd

然后就可以看到平台了
在这里插入图片描述

编辑varnish配置文件,定义权限控制
在这里插入图片描述

vcl_recv中加入以下配置
在这里插入图片描述

重启varnish

systemctl restart varnish
在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

文章来源:https://blog.csdn.net/Wangjiachenga/article/details/135460709
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。