细说varnish反向代理

特点:
基于内存缓存,高效但易失性强,命中率极高

缓存方式:
1)file:本地会生成文件,用于映射到内存中(不建议使用)
2)malloc:调用系统对用的函数,在内存中申请一块空间用于存储,不需要本地映射直接存(高效)
3)persistent(experimental):本地会生成文件,用于映射到内存中,如内存出现文件本地文件会有备份(不建议使用)

架构环境:
四台服务器(两台web,一台varnish,一台网关)

注:这里后端测试web不予搭建,只详细说varnish架构详情

架构步骤:(源码)
yum -y install libtool ncurses-devel pcre-devel libxslt groff pkgconfig gcc gcc-c++ lrzsz
//安装源码依赖以及开发语言支持

1)rpm -ivh libedit-devel-2.11-4.20080712cvs.1.el6.x86_64.rpm
2)rpm -ivh python-imaging-1.1.6-19.el6.x86_64.rpm
3)rpm -ivh python-docutils-0.6-1.el6.noarch.rpm
//三款依赖包,源码仓库中没有,需自行下载

tar -zxvf varnish-4.0.1.tgz -C /usr/src/
//varnish包官网自行下载
cd /usr/src/varnish-4.0.1/
//切换到指定目录
./autogen.sh
//先运行varnish脚本,自动设置libtool环境变量
./configure --prefix=/usr/local/varnish --enable-debugging-symbols --enable-developer-warnings
//指定配置文件位置并增加功能模块
启用选项详解:
–enable-debugging-symbols
//启动BUG调试模式
–enable-developer-warnings
//开启日志信息警告:加载后默认为"NO"
make && make install
//编译并安装
echo “PATH=$PATH:/usr/local/varnish/bin:/usr/local/varnish/sbin”>>/etc/profile
//增加命令到系统环境变量中
source /etc/profile
//立即刷新生效
cp /usr/local/varnish/share/doc/varnish/example.vcl /usr/local/varnish/default.vcl
//在模板文件中拷贝配置文件,默认没有

编辑配置文件添加参数(注意添加位置)
vim /usr/local/varnish/default.vcl
import directors; //加载directors模块,提供负载均衡功能
backend web1 { //定义后端服务器的标识名称
.host = “192.168.1.100”; //定义后端服务器的IP
.port = “80”; //定义后端服务器监听端口
.probe = { //开启健康状态检查
.url = “/”; //健康状态检查默认页面("/"为首页)
.interval = 5s; //定义检测的间隔时长
.timeout = 1s; //超时时间,如1秒内无回应则标记一次故障
.window = 5; //判断健康状态时,如连续5次无响应则不再发送请求
.threshold = 3; //继续检测故障服务器,如连续3次响应则标记正常
}
}

在这里插入图片描述backend web2 { //定义后端服务器的标识名称
.host = “192.168.1.200”; //定义后端服务器的IP
.port = “80”; //定义后端服务器监听端口
.probe = { //开启健康状态检查
.url = “/”; //健康状态检查默认页面("/"为首页)
.interval = 5s; //定义检测的间隔时长
.timeout = 1s; //超时时间,如1秒内无回应则标记一次故障
.window = 5; //判断健康状态时,如连续5次无响应则不再发送请求
.threshold = 3; //继续检测故障服务器,如连续3次响应则标记正常
}
}
在这里插入图片描述sub vcl_init {
//VCL初始化VMODS模块,指定群集算法
new bar = directors.round_robin();
//定义轮询算法(directory组名)
注:算法参照详解:random:随机 round-robin:加权轮询
bar.add_backend(web1);
//添加标识名称为web1的加到directory群集
bar.add_backend(web2);
//添加标识名称为web2的加到directory群集
}

  sub vcl_recv {				
  //用于接收并处理请求,通过判断来决定如何处理请求
    set req.backend_hint = bar.backend();	
    //未命中请求转发给dictctors组(交web处理)
}

注:sub vcl_recv如果命中这不使用这个组,如未命中则交由这个组处理请求

在这里插入图片描述varnishd -C -f /usr/local/varnish/default.vcl
//检测配置文件是否有误
注:配置文件编译完成,系统默认不认识vcl语言,使用特有命令转换为C语言再转换为二进制!
三种方式自行选一种即可:(针对的缓存方式不同)

启动方式一:(默认 如没加-s指定存储方式,默认使用这个)
varnishd -f /usr/local/varnish/default.vcl -a 0.0.0.0:80 -s malloc,100m
//直接存入内存

启动方式二:(一般不用)
varnishd -f /usr/local/varnish/default.vcl -a 0.0.0.0:80 -s file,/tmp/aa,100m
//文件映射

启动方式三:(一般不用)
varnishd -f /usr/local/varnish/default.vcl -a 0.0.0.0:80 -s persistent,/tmp/aa,100m
//双存储
注:默认的单位为字节,需要手动跟单位(MB,m都可以,大小写不区分)

varnishlog //查看日志,动态输出缓存及客户端访问情况

测试即可
在这里插入图片描述注:虽然有轮询效果,但是如后端web相同页面的情况下,会发现一段时间内一直请求web1的页面内容,其实则不是这样的,用户端所请求到的web1页面则是varnish缓存服务器的缓存数据,如web1故障,或缓存时间超时,或不同页面时,即可实现轮询效果!

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值