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中的内容,如下:

时间: 2024-08-05 09:52:49

varnish 使用进阶(二)的相关文章

Python爬虫进阶二之PySpider框架安装配置

关于 首先,在此附上项目的地址,以及官方文档 PySpider 官方文档 安装 1. pip 首先确保你已经安装了pip,若没有安装,请参照 pip安装 2. phantomjs PhantomJS 是一个基于 WebKit 的服务器端 JavaScript API.它全面支持web而不需浏览器支持,其快速.原生支持各种Web标准:DOM 处理.CSS 选择器.JSON.Canvas 和 SVG. PhantomJS 可以用于页面自动化.网络监测.网页截屏以及无界面测试等. 安装 以上附有官方安

varnish 使用进阶

varnish 使用进阶 ================================================================================ 概述: ================================================================================ VCL配置用法详解  1.state engine:状态引擎切换机制(varnish4.0 ) ★request:  vcl_recv   接

2、蛤蟆的数据结构进阶二静态查询之顺序查询

2.蛤蟆的数据结构进阶二静态查询之顺序查询 本篇名言:"我从不把安逸和快乐看作是生活的本身 --这种伦理基础,我叫它猪栏的理想. --爱因斯坦" 这篇我们来看下静态查询中的顺序表查询. 我们先来看下概念,然后是代码实现. 欢迎转载,转载请标明出处:http://blog.csdn.net/notbaron/article/details/47175103 1.  查找 在计算机科学中定义为:在一些(有序的/无序的)数据元素中,通过一定的方法找出与给定关键字相同的数据元素的过程叫做查找.

Android进阶(二十八)上下文菜单ContextMenu使用案例

上下文菜单ContextMenu使用案例 前言 回顾之前的应用程序,发现之前创建的选项菜单无法显示了.按照正常逻辑来说,左图中在"商品信息"一栏中应该存在选项菜单,用户可进行分享等操作,但是现在此操作莫名其妙的消失了.写了个测试Demo,如中图所示,一切按照逻辑显示正常.怪就怪在项目中无法显示,起初设想是因为Android系统版本太高问题,但是在别的手机上测试之后发现问题依旧存在.难道是因为顶部Tab标题栏遮挡住了选项菜单的显示?继续测试,通过在别的没有Tab标题栏的页面测试选项菜单,

Java进阶(二十五)Java连接mysql数据库(底层实现)

Java进阶(二十五)Java连接mysql数据库(底层实现) 前言 很长时间没有系统的使用java做项目了.现在需要使用java完成一个实验,其中涉及到java连接数据库.让自己来写,记忆中已无从搜索.特将之前使用的方法做一简单的总结.也能够在底层理解一下连接数据库的具体步骤. 实现 首先需要导入相关的jar包,我使用的为:mysql-connector-java-5.1.7-bin.jar. 下面来看一下我所使用的数据库连接方法类: MysqlUtil.java package cn.edu

分布式进阶(二)Ubuntu 14.04下安装Dockr图文教程(一)

当前,完全硬件虚拟化技术(KVM.Xen.Hyper-V 等)能在一个物理主机上很好地运行多个互相独立的操作系统,但这也带来一些问题:性能不佳,资源浪费,系统反应迟缓等.有时候对用户来说,完全的硬件虚拟化并不是最好的选择. 一种替代方案是使用轻量级虚拟化技术 -- 所谓的 LinuX Container 容器 (LXC),它提供的是系统级虚拟化.与跑虚拟机相比,LXC 可以在一个轻量级沙箱容器里面跑多个 Linux 操作系统.当你需要设置一些易于克隆的开发环境.测试环境,或想在安全沙盒里安装应用

Varnish基础进阶

Varnish基础进阶 前言 互联网早已惠及全人类, 我们可以通过网络与家人.朋友进行实时通信, 也能通过网络随时随地在各大电商站点上购物, 我们访问web站点的速度也越来越快, 这背后都是有很多精巧的架构以及各种先进的技术来支撑的, 我们就今天主要聊聊Web的缓存技术, 对于当今的互联网来说, Cahe Is King, 缓存真的有那么神奇么? 就由我来带领朋友们先领略一番当今最流行的开源缓存解决方案Varnish的风采 为什么需要缓存? 当今的Web站点, 特别是电商站点; 时常承受着高并发

python yield 进阶(二)

PS:接上一篇 本文摘自OSchina Linuxqueen 不幸的是,这样做看上去似乎不太可能.即使是我们有神奇的函数,可以让我们从n遍历到无限大,我们也会在返回第一个值之后卡住: 1 def get_primes(start): 2     for element in magical_infinite_range(start): 3         if is_prime(element): 4             return element 假设这样去调用get_primes: 1

Lua进阶(二)——函数环境、包

函数环境 function foo() print(g or "No g defined!") end foo() setfenv(foo, { g = 100, print = print }) --设置foo的环境为表{ g=100, ...} foo() print(g or "No g defined!") --No g defined! --100 --No g defined! 定义:函数环境就是函数在执行时所见的全局变量的集合,以一个表来承载. 说明: