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 使用进阶的主要内容,如果未能解决你的问题,请参考以下文章

7.5 Varnish VCL的变量和应用片段

Varnish介绍

我的Android进阶之旅NDK开发之在C++代码中使用Android Log打印日志,打印出C++的函数耗时以及代码片段耗时详情

Atom编辑器入门到精通 Atom使用进阶

Atom编辑器入门到精通 Atom使用进阶

Atom编辑器入门到精通 Atom使用进阶