WEB缓存系统之varnish代理以及健康状态检测配置
前文我们聊了下varnish的缓存项修剪配置,回顾请参考https://www.cnblogs.com/qiuhom-1874/p/12666406.html;今天我来说一下varnish作为代理服务器反向代理多主机的配置;前边的所有操作都是针对后端主机只有一台的情况来说varnish的配置;在生产环境中,我们的web站点服务器不应该只有一台;默认情况下才安装好varnish的主机,在default.vcl中只可以指定一台后端主机的地址和端口;如果我们后端主机是多台的情况下,我们需要加载varnish的模块directors;然后用backend+后端主机名称(这个名称是我们自定义的,只要是一合法名称即可),来分别把每个主机的地址和端口配置好即可;
示例:

提示:以上每个红框中的内容表示一台后端server;以上配置表示定义两台后端主机,其名称分别为webserver1和webserver2;
把主机定义好后,这里还需要用在vcl_init状态引擎中配置初始化一个组,然后把这两台主机加到对应的组中;
示例:

提示:以上配置表示用directors模块中的round_robin()方法初始化一个组对象,取名叫webserver;然后把对应两台主机加入到这个初始化组对象中;这意味着这个组里有两个成员,一个是webserver1,一个是webserver2;directors.round_robin()用这个方法初始化组对象表示往后端调度的算法是轮询,即没有权重;要想有权重,需要用directors.random()方法;如果需要做会话保持,需要用到directors.hash()方法;
示例:初始化组对象用randomf方法

提示:用random方法就在后面加权重;
示例:初始化组对象用hash方法来保持会话

提示:hash方法也是支持权重的;
到此我们就把两台后端主机加入到webserver组中了;现在我们可以编译加载我们的配置文件,然后用varnishadm工具连接到控制管理shell中查看后端主机列表;
[root@test_node1-centos7 ~]# varnishadm -S /etc/varnish/secret -T 127.0.0.1:6082
200
-----------------------------
Varnish Cache CLI 1.0
-----------------------------
Linux,3.10.0-693.el7.x86_64,x86_64,-sfile,-smalloc,-hcritbit
varnish-4.0.5 revision 07eff4c29 Type 'help' for command list.
Type 'quit' to close CLI session. varnish> vcl.list
200
active 0 boot varnish> vcl.load test default.vcl
200
VCL compiled. varnish> vcl.list
200
active 0 boot
available 0 test varnish> vcl.use test
200
VCL 'test' now active varnish> backend.list
200
Backend name Refs Admin Probe
webserver1(192.168.0.10,,80) 2 probe Healthy (no probe)
webserver2(192.168.0.99,,80) 2 probe Healthy (no probe) varnish> quit
500
Closing CLI connection
[root@test_node1-centos7 ~]#
提示:可以看到我们编写的vcl把多台主机加入到webserver组的配置生效了;从上面的配置看,后端主机有两台,一台是webserver1,一台是webserver2;
测试:用curl命令访问192.168.0.99:8000 看看是否把用户请求分别调度到后端个server上去了?

提示:从上面的结果看,好像没有把用户的请求调度到server1上去;原因是我们没有配置说明把所有未命中缓存的请求发送到后端主机上去,它默认是把第一次匹配backend 关键字+名称的配置当作默认主机;所以这里我们怎么访问都调度到192.168.0.10这台主机上去;
示例:在vcl_recv中调用我们之前定义的组,明确说明把未命中缓存的请求发送到该组上;

提示:以上红框中的内容表示把用户请求发送到我们定义好的组上的主机;
测试:

提示:从上面的结果看,我们定义的主机上基于轮询的方式在往后端调度;这里测试需要把varnish上的缓存项给修剪掉,然后再次请求才可以看到把请求调度到不同主机上;
以上就是varnish代理多主机的配置方法,总结如下:
1)首先我们要导入directors模块;
2)用backend关键字来定义后端主机,起一名称,用花括号引入一段上下文,里面用.host指定后端主机的IP地址,用.port指定后端主机端口;
3)在vcl_init状态引擎中初始化一个组对象,然后用组对象的add_backend(server)把对应主机加入到该组;
4)在vcl_recv状态引擎中使用我们初始化好的组对象;用set req.backend_hint = 组对象中的backend();表示把为能命中的用户请求发送到该组上,至于用轮询还是加权轮询还是hash,取决于我们初始化组对象用到的方法;
了解了varnish代理多台主机的配置后,接下来我们再来说说varnish对后端主机做健康状态监测的配置;对于varnish来讲,对后端主机做健康状态监测的原理是请求后端主机特定的资源,如果能够在指定的超时时长内正确响应我们就认为后端主机上健康状态的,如果不能正确的响应我们就认为该后端主机上不健康的;在varnish中对后端主机做健康状态监测需要用.probe 来引入一段上下文配置,明确的说明怎么对后端做健康状态监测(或者用probe关键字+名称来引入一段公有的健康状态监测机制,后端多台主机可以用.probe +名称引用);比如请求后端主机的那个url或者用.request来指定向后端主机发送的请求的报文;对后端主机的响应多少次我们认为是健康的,监测频度,超时时长等等信息;
示例:

提示:以上红框中的配置就表示对webserver1这台主机做健康状态监测;其中.window表示基于最近的多少次检查来判读其健康状态;.threshold表示最近.window中定义的检查次数至少有多少次是成功的,我们就认为后端主机上健康的;.interval表示检查的频度,多久检查一次;.timeout表示超长时长;综上所述,该配置就表示对webserver1这台主机做健康状态监测,如果每隔2秒,超时时长为1秒,请求该主机上的/index.html资源,在最近5次中有4次是成功的,我们就认为后端主机上健康的;
当然以上是对一台主机做健康状态检查的配置。如果是多台主机,监测的方式都是一样的,我们可以把对健康状态监测的配置单独用probe + 名称来定义监测机制;然后在个server中用.probe +名称来应用我们定义的健康状态监测的配置;
示例:

提示:以上配置就表示定义了一个健康状态监测的配置其名称为webserver_check,然后在个后端server的配置中用.probe来对webserver_check调用;意思就表示两台主机都用同样的监测配置;
当然除了以上对rul请求外,我们也可使用向后端主机发送指定一的请求报文的形式来定义健康状态监测机制;
示例:

提示:以上配置表示对于server1的健康状态监测是向server1发送特定的请求首部,如果每隔2秒超时时长为1秒,在5次请求中有4次是200的响应码,我们就认为该主机上健康的,否则不健康;对于server2主机的健康状态监测是通过项该主机上的特定资源/index.html发起请求,如果每个2秒超时1秒的情况下,5次请求中有4次都是200的响应码,我们就认为该主机上健康的,否则不健康;如果不指定.expected_response默认值就是200;
测试:编译加载default.vcl 看看我们配置的健康状态监测是否正确
[root@test_node1-centos7 ~]# varnishadm -S /etc/varnish/secret -T 127.0.0.1:6082
200
-----------------------------
Varnish Cache CLI 1.0
-----------------------------
Linux,3.10.0-693.el7.x86_64,x86_64,-sfile,-smalloc,-hcritbit
varnish-4.0.5 revision 07eff4c29 Type 'help' for command list.
Type 'quit' to close CLI session. varnish> vcl.load check_cfg default.vcl
200
VCL compiled. varnish> vcl.use check_cfg
200
VCL 'check_cfg' now active varnish>
提示:上面load过程没有保存,说明我们配置后端服务器健康状体检查的配置没有问题;接下来测试把后端主机服务宕机,在管理shell中使用backend.list查看对应主机是否会变为sick?

提示:通过上面的测试结果看,我们把后端主机192.168.0.10这台主机的httpd服务给停了,然后在看后端主机情况,立刻webserver1的状态就变为了sick,我们接着又把服务给启动起来,再看后端服务器状态,可看到当检查到第四次是正常的响应后,状态就变成health;说明我们配置后端主机健康状态监测是没有问题的;
WEB缓存系统之varnish代理以及健康状态检测配置的更多相关文章
- WEB缓存系统之varnish基础入门(一)
前文我们聊了下http协议里的缓存控制机制以及varnish架构组件介绍,回顾请参考https://www.cnblogs.com/qiuhom-1874/p/12620538.html:今天我们来聊 ...
- WEB缓存系统之varnish状态引擎
前文我们聊了下varnish的VCL配置以及语法特点,怎样去编译加载varnish的vcl配置,以及命令行管理工具varnishadm怎么去连接varnish管理接口进行管理varnish,回顾请参考 ...
- WEB缓存系统之varnish缓存项修剪
前文我们聊了下varnish的状态引擎和不同类型的变量对应该使用在那个状态引擎中,以及每个状态引擎的对应处理事务:回顾请参考https://www.cnblogs.com/qiuhom-1874/p/ ...
- 如何编写LVS对Real Server的健康状态检测脚本
简介:Linux 虚拟服务器(Linux Virtual Server. LVS),是一个由章文松开发的自由软件.利用KVS可以实现高可用的.可伸缩缩的Web, Mail, Cache和Medial等 ...
- Tengine笔记3:Nginx的反向代理和健康状态检查
通常代理服务器只用于处理内部网络对Intenet的请求,客户端必须通过代理服务器把本来要发送到Web服务器上的请求通过代理服务器分发给Web服务器,Web服务器响应时再通过代理服务器把响应发给客户端: ...
- WEB服务健康状态检测
#!/bin/sh #date:2015-12-07 #filename:check_web.sh #作者:lixingli #Email:1162572407@qq.com #version:v1. ...
- kubernetes之健康状态检测
1.说明 容器探针: kubelet 对容器执行的定期诊断 探针执行方式: LivenessProbe: 判断容器是否存活 running状态, 如果不健康kubelet就会杀掉pod,根据重启策略R ...
- 企业级缓存系统varnish应用
场景 随着公司业务快速发展,公司的电子商务平台已经聚集了很多的忠实粉丝,公司也拿到了投资,这时老板想通过一场类似双十一的活动,进行一场大的促销,届时会有非常多的粉丝访问网站,你的总监与市场部门开完会后 ...
- [转载]WEB缓存技术概述
[原文地址]http://www.hbjjrb.com/Jishu/ASP/201110/319372.html 引言 WWW是互联网上最受欢迎的应用之一,其快速增长造成网络拥塞和服务器超载,导致客户 ...
随机推荐
- C#的关键字Explicit 和 Implicit
一.explicit和implicit explicit 关键字用于声明必须使用强制转换来调用的用户定义的类型转换运算符:implicit 关键字用于声明隐式的用户自定义的类型转换运算符. 总结来说: ...
- vue中moment.js的使用
一.介绍 moment.js是一款现在对时间处理的强大的函数. Moment被设计用于在浏览器和Node.js中工作. 目前ci系统使用的浏览器有:IE8.IE9在Windows 7上.Chrome在 ...
- Spark入门(二)--如何用Idea运行我们的Spark项目
用Idea搭建我们的Spark环境 用IDEA搭建我们的环境有很多好处,其中最大的好处,就是我们甚至可以在工程当中直接运行.调试我们的代码,在控制台输出我们的结果.或者可以逐行跟踪代码,了解spark ...
- 初创电商公司Drop的数据湖实践
欢迎关注微信公众号:ApacheHudi 1. 引入 Drop是一个智能的奖励平台,旨在通过奖励会员在他们喜爱的品牌购物时获得的Drop积分来提升会员的生活,同时帮助他们发现与他们生活方式产生共鸣的新 ...
- Gitblit无法查看单个文件解决方案
一个简单的解决方案是在reference.properties中设置: web.mountParameters = false 在这种情况下,您完全避免了该问题,因为项目名称,分支和文件名作为查询字符 ...
- 量化学习 | Tushare 基本面选股 (二)
量化投资比较重要的是策略,可是你得先选个好股,价值投资需要认同他的价值,值得投资的股票才有投资的机会,现在简单介绍一下基于基本面的选股,其实我现实生活中也有炒股,都是经验之说的选股原则. 首先从tus ...
- 作为一位Vue工程师,这些开发技巧你都会吗?
路由参数解耦 一般在组件内使用路由参数,大多数人会这样做: export default { methods: { getParamsId() { return this.$route.params. ...
- asp.net c# 通过消息队列处理高并发请求(以抢小米手机为例)
网站面对高并发的情况下,除了增加硬件, 优化程序提高以响应速度外,还可以通过并行改串行的思路来解决.这种思想常见的实践方式就是数据库锁和消息队列的方式.这种方式的缺点是需要排队,响应速度慢,优点是节省 ...
- java -输入年龄判断是否符合范围。
//创建的一个包名. package demo3; //定义一个类. public class Test { //公共静态的主方法. public static void main(String[] ...
- 【JAVA进阶架构师指南】之三:深入了解类加载机制
前言 在上一篇文章中,我们知道了JVM的内存划分,其中在说到方法区的时候说到方法区中存放的信息包括[已被JVM加载的类信息,常量,静态变量,即时编译的代码等],整个方法区其实就和类加载有关. 类加 ...