前文咱们聊了下varnish的缓存项修剪配置,回顾请参考https://www.cnblogs.com/qiuhom-1874/p/12666406.html;今天我来讲一下varnish做为代理服务器反向代理多主机的配置;前边的全部操做都是针对后端主机只有一台的状况来讲varnish的配置;在生产环境中,咱们的web站点服务器不该该只有一台;默认状况下才安装好varnish的主机,在default.vcl中只能够指定一台后端主机的地址和端口;若是咱们后端主机是多台的状况下,咱们须要加载varnish的模块directors;而后用backend+后端主机名称(这个名称是咱们自定义的,只要是一合法名称便可),来分别把每一个主机的地址和端口配置好便可;html
示例:node
提示:以上每一个红框中的内容表示一台后端server;以上配置表示定义两台后端主机,其名称分别为webserver1和webserver2;web
把主机定义好后,这里还须要用在vcl_init状态引擎中配置初始化一个组,而后把这两台主机加到对应的组中;算法
示例:shell
提示:以上配置表示用directors模块中的round_robin()方法初始化一个组对象,取名叫webserver;而后把对应两台主机加入到这个初始化组对象中;这意味着这个组里有两个成员,一个是webserver1,一个是webserver2;directors.round_robin()用这个方法初始化组对象表示日后端调度的算法是轮询,即没有权重;要想有权重,须要用directors.random()方法;若是须要作会话保持,须要用到directors.hash()方法;后端
示例:初始化组对象用randomf方法centos
提示:用random方法就在后面加权重;缓存
示例:初始化组对象用hash方法来保持会话bash
提示: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;说明咱们配置后端主机健康状态监测是没有问题的;