且构网

分享程序员开发的那些事...
且构网 - 分享程序员编程开发的那些事

varnish

更新时间:2022-09-27 13:26:48

一,varnish原理:

    varnish的特性:

    1,缓存位置:可以使用内存也可以使用磁盘,如果使用磁盘的话推荐SSD做RAID1

    2,日志存储:日志也可以存储在内存中

    3,支持虚拟内存。

    4,有精确的时间管理机制,及缓存的时间属性控制

    5,状态引擎架构:在不同的引擎上完成对不同的缓存代理数据进行处理,可以通过特定的配置语言设计不同的控制语句,以决定数据在不同位置以不同方式缓存,在特定的地方对经过的报文进行特定规则的处理

     6,缓存管理:以二叉堆格式管理缓存数据,做到数据的即时清理

    简单架构:

    分为management进程和child进程

        menagenment进程:对子进程进行管理,同时对VCL配置进行编译,并应用到不同的状态引擎

        child进程:生成线程池,负责对用户请求进行处理,并通过hash查找返回用户结果。

    varnish主要配置文件

        varnish配置主要分为:后端配置,ACL配置,probes配置,directors配置,核心子进程配置几大块,其中后端配置是必要的,在多台服务器中还会用到directors配置,核心子程序配置

        后端配置:即给varnish添加反代服务器节点,最少配置一个

        ACL配置:即给varnish添加访问控制列表,可以指定这些列表访问或禁止访问

        probes配置:即给varnish添加负载均衡模式管理多个后端服务器

        核心子进程配置:即给varnish添加后端服务器切换,请求缓存,访问控制,错误处理等规则

        req:the request object,请求到达可用的变量

        berep:the backend request object,向后端主机请求时可用的变量

        beresp:the backend response object,从后端足迹获取内容是可用的变量

        resp:the http response object,对客户端响应时可用变量

        obj:存储的内存中时对象属性相关的可用变量

        now:作用:放好当前时间戳

二,安装varnish

    安装依赖关系的软件包

    yum -y install autoconf automake libedit-devel libtool ncurses-devel pcre-devel pkgconfig python-docutils python-sphinx

    varnish

    安装varnish

    官方网址为http://varnish-cache.org。varnish有时会被墙。

    解压目录

    varnish

    编译安装:

    varnish

    复制vcl文件(编译安装目录下),如果安装目录里没有defalut.vcl文件。赋值打扫安装目录的/usr/local/var/varnish目录下。这个文件只是一个带注释的参考配置。一般由自己vim设定一个新配置文件。

三,varnish

    varnish配置基本上是编辑vcl文件,有自定义语法,启动是,会将配置文件编译为c语言,在执行。

    1,后端服务器地址配置及后端服务器健康检查

        varnish有“后端”或者“源”服务器的概念,backend server提供给varnish加速的内容,实际上就是给varnish添加可供访问的web服务器,如果有多台web服务器,可添加多个backend块

    后端服务器定义:

    语法格式:

        backend name{

            .attribute="value";

        }

        backend是定义后端关键字,name是当前后端节点的别名,多个后端节点是,name名不能重复,负责覆盖,花括号里面定义当前节点相关属性。默认节点外其他节点定义后必须有调用。负责varnish无法启动。

    支持运算符

        =(赋值运算)

        ==(相等比较)

        ~(匹配,可以使用正则表达式,或访问列表)

        !~(不匹配,可以使用正则表达式,或访问控制列表)

        !(非)

        &&(逻辑与)

        ||(逻辑或)

     属性列表:

        .host="ip地址"

        .port=""

        .host_header=

        .connect_timeout=

        .first_byte_timeout=

        .between_bytes_timeout=

        .probe=probe_name

        .max_connections=

    2,监视器定义

        语法格式:

        probe name{

            .attribute="value";

        }

        属性列表:

        .rul="/"

        .request=""

        .expected_response="

        .timeout

        .interval=

        .initial

        .window=

        .threshold

    3,集群负载均衡directors

        可以定义多个后端,也可以将几个后端放在一个后端集群里面达到负载均衡的目的。也可以将几个后端组成一组后端,这个组叫做ddirectors,可以提高性能和弹性。

        directors是varnish负载均衡模块,使用前必须引人directors模块directors模块主要包含:round_robiin,random,hash,fallback负载均衡模式。

        round_robin:循环依次逐个选择后端服务器

        random:随机选择后端服务器,可设置每个后端权重增加随机率

        hash:通过散列随机选择对应的后端服务器且保持对应关系,下次则直接找对应的后端服务器。

        fallback:后备

        set命令是设置变量

        unset命令删除变量

        web_ccluster.add_backend:添加后端服务器节点,backend为后端配置别名

        real为权重值,随机率计算公式:100*(当前权重/总权重)

        req.backend_hint是varnish的预定义变量,作用是指定请求后端节点

        vcl对象需要使用new关键字创建,所忽悠可创建对象都是内定的,使用前必须import,所有new操作只能在vcl_init子程序中。

本文转自   宏强   51CTO博客,原文链接:http://blog.51cto.com/tanhong/1919377