码迷,mamicode.com
首页 > 其他好文 > 详细

varnish 使用进阶(二)

时间:2016-11-20 00:17:56      阅读:174      评论:0      收藏:0      [点我收藏+]

标签: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页面如下:

[root@RS2 ~]# vim /var/www/html/index.php 
<?php
     phpinfo()
?>

[root@RS2 ~]# systemctl start httpd

 RS1 默认测试页面如下:

[root@RS1 ~]# vim /var/www/html/index.html 
<h1>Backend Server 1</h1>

[root@RS1 ~]# systemctl start httpd

2.在varnish服务器端,首先编辑配置文件/etc/varnish/default.vcl,添加对应的后端主机和端口,如下:

 [root@centos7~]# 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配置,使其生效,如下:

[root@centos7 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配置,使其生效,如下:

[root@centos7 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 使用进阶(二)

标签:varnish

原文地址:http://1992tao.blog.51cto.com/11606804/1874669

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!