varnish的简单使用

varnish的简单使用

        • 安装
        • 配置
          • 配置启动参数文件
          • 配置环境信息文件
          • 配置varnish反向代理
        • 配置varnish
        • 启动varnish
        • 更加直观的查看varnish缓存
          • 手动清除缓存
          • 清除指定的缓存
        • varnish配置多后端
          • 配置多后端
          • 在本地配置域名解析
          • 查看测试结果
        • 负载均衡配置
          • 导入模块
          • 定义负载均衡调度器
          • 调用负载均衡
        • varnish推送平台配置
          • 通过图形化的方式简化缓存清理步骤
          • 部署

安装

varnish已被收录进EPEL源,故可直接利用EPEL源进行yum安装
yum install -y varnish
varnish的简单使用_第1张图片


配置
配置启动参数文件

vim /usr/lib/systemd/system/varnish.service
varnish的简单使用_第2张图片

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

# 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的简单使用_第3张图片

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

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

将这里改成64000
varnish的简单使用_第4张图片


配置环境信息文件

/etc/varnish/varnish.params

这里指定了varnish的配置文件

指定了varnish的默认监听端口
varnish的简单使用_第5张图片
这里要做反向代理实验,我就把端口改成80


配置varnish反向代理

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

varnish的简单使用_第6张图片

配置varnish

vim /etc/varnish/default.vcl
varnish的简单使用_第7张图片

varnish的简单使用_第8张图片

启动varnish

systemctl start varnish

查看varnish的进程

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

varnish的简单使用_第9张图片

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

varnish的简单使用_第10张图片


更加直观的查看varnish缓存

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

查看详细信息,可以看到,是通过varnish来读取后端的数据的
这里的Age 表示缓存过期时间,默认120秒,120秒后就会将缓存清空,再次从后端获取新的数据
varnish的简单使用_第11张图片

编辑varnish配置文件

vim /etc/varnish/default.vcl

接收语句块
varnish的简单使用_第12张图片

传送语句块
varnish的简单使用_第13张图片

如果,命中缓存的次数大于0,就返回一句话HIT from cache,
如果不是就返回MISS from cache
varnish的简单使用_第14张图片

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

然后重启varnish

systemctl restrat varnish

再次curl一下

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

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

第一次访问的时候,CDN节点没有所请求的数据的话,需要向后端请求数据,顺便将数据缓存在CDN节点,然后返回给客户端。
varnish的简单使用_第15张图片

当我们再次访问的时候,读取的就是varnish的缓存
命中缓存的次数大于0,就返回一句HIT from cache
varnish的简单使用_第16张图片


手动清除缓存

清除所有的缓存(慎用)

varnishadm ban req.url "~" /

ban :表示清除

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

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

清除完后,再次访问,就返回MISS
varnish的简单使用_第17张图片

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


清除指定的缓存

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

清除指定缓存后,再访问,Age并没有从0开始,而是持续下去了
varnish的简单使用_第18张图片

访问指定的页面时候,Age才会从0开始
varnish的简单使用_第19张图片

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


varnish配置多后端

首先准备好两台web服务器

配置多后端

vim /etc/varnish/default.vcl
varnish的简单使用_第20张图片

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通过判断请求的域名,来决定请求的去向

查看测试结果

varnish的简单使用_第21张图片

varnish的简单使用_第22张图片


负载均衡配置
导入模块

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

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

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

定义负载均衡调度器

varnish的简单使用_第23张图片
负载均衡器的名字叫lb
调用的算法是round_robin轮询算法

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

}
调用负载均衡

varnish的简单使用_第24张图片

定义在此处的意义是,当请求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的简单使用_第25张图片

然后重启varnish服务

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

varnish的简单使用_第26张图片

varnish的简单使用_第27张图片

一直访web2,它并不会发生变化
varnish的简单使用_第28张图片


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

谷歌开源

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

varnish的简单使用_第29张图片

部署

yum install -y php httpd unzip

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

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

varnish的简单使用_第30张图片

编辑配置文件

vim config.php

定义主机列表

填写varnish的主机的地址

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

varnish的简单使用_第31张图片

绑定刚才定义的主机列表
varnish的简单使用_第32张图片

保存退出

修改Apache的端口为8080

vim /etc/httpd/conf/httpd.conf

在这里插入图片描述

启动Apache

systemctl start httpd

然后就可以看到平台了
varnish的简单使用_第33张图片

编辑varnish配置文件,定义权限控制
varnish的简单使用_第34张图片

vcl_recv中加入以下配置
varnish的简单使用_第35张图片

重启varnish

systemctl restart varnish
varnish的简单使用_第36张图片

varnish的简单使用_第37张图片

varnish的简单使用_第38张图片

你可能感兴趣的:(综合架构,缓存)