varnish 使用进阶
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了varnish 使用进阶相关的知识,希望对你有一定的参考价值。
varnish 使用进阶(二)
==============================================================================
概述:
==============================================================================
设定varnish使用多个后端主机:
1.介绍
★两种情况
有多个后端主机,各主机分别响应不同的内容(动静分离)
基于负载均衡轮询的方式进行响应
实验1:
设定varnish使用两台后端主机,各主机分别响应不同的内容,实现动静分离
实验环境描述:
三台虚拟主机,一台作为varnish的缓存服务器,CentOS 7(IP:10.1.252.153);剩余两台作为后端原始服务器,RS1(IP:10.1.252.161),RS2(10.1.252.73);
后端原始服务器RS2响应动态php内容,RS1响应其余的静态内容,实现动静分离;
具体实验步骤如下:
------------------------------------------------------------------------------------------
1.首先为两台后端原始服务器准备测试页面;
RS2 php页面如下:
[[email protected] ~]# vim /var/www/html/index.php <?php phpinfo() ?> [[email protected] ~]# systemctl start httpd
RS1 默认测试页面如下:
[[email protected] ~]# vim /var/www/html/index.html <h1>Backend Server 1</h1> [[email protected] ~]# systemctl start httpd
2.在varnish服务器端,首先编辑配置文件/etc/varnish/default.vcl,添加对应的后端主机和端口,如下:
[[email protected]~]# vim /etc/varnish/default.vcl backend default { .host = "10.1.252.161"; .port = "80"; } backend appsrv { .host = "10.1.252.73"; .port = "80"; }
然后在sub vcl_recv 子例中指明要如何调用,如下:
sub vcl_recv { if (req.url ~ "(?i)\.php$") { set req.backend_hint = appsrv; } else { set req.backend_hint = default; } }
3.执行varnish_reload_vcl命令,重载varnish配置,使其生效,如下:
[[email protected] varnish]# varnish_reload_vcl Loading vcl from /etc/varnish/default.vcl Current running config name is reload_2016-11-19T18:38:19 Using new config name reload_2016-11-19T19:56:07 VCL compiled. VCL ‘reload_2016-11-19T19:56:07‘ now active available 0 boot available 0 reload_2016-11-19T18:06:32 available 0 reload_2016-11-19T18:33:15 available 0 reload_2016-11-19T18:38:19 active 0 reload_2016-11-19T19:56:07 Done
4.在浏览器中分别对index.html和index.php请求资源,发现可以响应;但是在访问php时,有个问题,就是PHP Logo显示不出来,这是因为,我们只是把所有以php结尾的内容发送给R2主机,但logo不以php结尾,所以其请求的是R1主机,R1主机上没有Logo的图片,所以件显示不出来,要想显示图片要在PHP Logo图片链接对应的位置放上图片才可以加载到,这也是我们在实现动静分离是应该着重考虑的问题,要确保所有的静态内容都放置在正确的位置,如下:
-----------------------------------------------------------------------------------------
实验2:
设定varnish使用两台后端主机,基于负载均衡轮询的方式进行响应;
实验环境同上;
具体操作步骤如下:
--------------------------------------------------------------------------------
1.要想实现负载均衡,使用前要首先导入import director 模块,编辑配置文件/etc/varnish/default.vcl,如下:
import directors;
2.在sub vcl_init中定义一个组,并在组中添加后端服务器,如下:
sub vcl_init { new websrvs = directors.round_robin(); websrvs.add_backend(default); websrvs.add_backend(appsrv); }
3.在sub vcl_recv中定义调用定义的组,如下:
sub vcl_recv { set req.backend_hint = websrvs.backend(); }
4.执行varnish_reload_vcl命令,重载varnish配置,使其生效,如下:
[[email protected] varnish]# varnish_reload_vcl Loading vcl from /etc/varnish/default.vcl Current running config name is reload_2016-11-19T18:38:19 Using new config name reload_2016-11-19T19:56:07 VCL compiled. VCL ‘reload_2016-11-19T19:56:07‘ now active available 0 boot available 0 reload_2016-11-19T18:06:32 available 0 reload_2016-11-19T18:33:15 available 0 reload_2016-11-19T18:38:19 active 0 reload_2016-11-19T19:56:07 Done
5.在浏览器中请求,发现能缓存的项,第一次命中之后,就在缓存中提供了,所以显示不出负载均衡的效果,只有那些不能缓存的项才能显示出负载均衡的效果,如下,我们在上一章中定义过对于login,admin的请求不缓存,所以,我们请求login中的内容,如下:
以上是关于varnish 使用进阶的主要内容,如果未能解决你的问题,请参考以下文章
我的Android进阶之旅NDK开发之在C++代码中使用Android Log打印日志,打印出C++的函数耗时以及代码片段耗时详情